原创于2007年06月19日,2009年10月16日迁移至此。
时间转眼过去一年多了
,我离开
H公司也已经一年多了
.往事不堪回首
,世事也总是以成败论英雄的
,因为我知道前面的一个接口项目先后导致
3个人离职
,2个人被处罚
;而这个项目只有我一个人
,在项目割接的当天我总算不辱使命完成了
;我既是成功者
,也是失败者
;我证明了自己是可以笑着离开
H公司的
.其实我一直不太想写出来
,毕竟申请离职也不是一件很光彩的事情
.
2006年是全国号码百事通风起云涌的一年
,而
Z电信公司正是第一个勇于吃螃蟹的人且率业界之先的公司
;我就是
2006年初被派到
电信公司跟着另外一个项目经理讨论接口需求的
(原因很简单
,为了避免垄断
,Z电信公司把省中心业务给了
Q公司
,而
12各地市给了
H公司
所以在省中心和地市之间需要通过
Web Service接口进行互连
),其实在这之前的一年内我是做
BI和数据库优化的
,对于所谓的接口和
114是一窍不通的
.估计看出了点苗头
,项目经理当了甩手掌柜
,只好由我一个人来负责此事了
.
Z
,
2月
8号
,春节还没过完
,我便来到了
H市
,经过反复的讨论和调研
,其实我做的工作只是号码百事通业务的一部分
,即实现对现有知识库的智能访问
,当然访问是需要通过接口来完成的
,此外还要实现一定的功能
,例如发送短信
,来电转接
,记录计费信息
,当然也是通过接口来实现
.
其实我很早就已经有了初步的想法
,最简单的就是我自动生成存储过程和自动生成
html网页
(其实基本上已经实现了
),但是了解到存储过程需要在友商的数据库中创建
,以及考虑到相关的风险和双方的剑拔弩张的气氛
,这显然是不可能实现的任务
.现在只能自己另辟蹊径建一个独立的
Web Server服务器
,通过正在流行的
Web
Service接口来实现这一切功能了
.
上述的图片显示的框架源于我对
BI和数据库的理解
,只要有一个开放的数据字典
,基本上就可以实现任何的自定义查询和自定义组合
如果复杂一点的话
,甚至可以实现一套简单的报表系统
.正是基于这样的想法和相关数据结构开始和
Q公司谈相关的接口
.但是有几个问题一直缠绕着我
:
;
1.
采用什么样的
WEB服务器
,Tomcat还是
Resin
2.
采用什么样的编程工具
,Jbuilder还是
Eclipse?
3.
Web Service接口到底是什么
,如何完成发布和调用
4.
采用什么样的
Java框架
(Struct还是
Spring还是纯粹的
JSP)
5.
Ajax技术
6.
关于树型目录的实现
(需要高效
,无延迟
)
7.
最难缠的还是和
Q公司的谈判和交流
(要面对对方
5,6人的轮番轰炸
)
也许对于
java高手而言这根本不算什么
,可对于我而言
,那简直是一场噩梦
,我的
Java水平和
HTML水平仅限于写一些简单的
JSP页面和
JavaBean完成简单的封装
,我自认为自己水平最高的还是
HTML和
javascript水平
,不管多么复杂的页面和
frame我都可以整理出一个头绪出来
.我从来不是一个唯工具论者
,我相信任何工具都只是手段
,而条条马路都可以通向罗马的
.可惜给我留的时间太短了
,只有
3周的时间
.说真的
,那时候天天对着西湖的美景
,没有一丝丝观看的心情
,真的想扑通一声跳下去
,一了百了
.
言规正传首先需要确定系统大体的架构
,Tomcat和
Eclipse都是开源的架构
,不涉及到版权和费用
,从网上
down的
Tomcat,呵呵
,如果
Z电信公司知道了非要气个半死不可
.按照从网上搜索的资料把
Tomcat和
Eclipse环境配置完毕
,然后按照公司的
java高手指点
,配置
框架
.
Spring
关于
Spring框架的配置
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为
J2EE 应用程序开发提供集成的框架。
其实在这样的小型系统里
,它提供了一个便于调试和控制的开关
;至少在本文中
,是为了解决无法使用接口环境进行调试的时候
,改用数据库接口方式
.
<!--
=======
如果是和
soap
接口连接,请去掉该
bean
的注释
===========-->
<bean
id="QueryData" class="com.xxx.yyy.inf.SoapInterface">
<property name="endpoint">
<value>http://192.168.1.2/Forxxx/ForQuery.asmx</value>
</property>
<property name="nameSpace">
<value>http://tempuri.org/</value>
</property>
</bean>
<!--
===========
如果是和
db
接口连接测试
,
请去掉该
bean
的注释
=====-->
<!--
<bean id="QueryData"
class="com.xxx.yyy.inf.DBInterface">
<property
name="dataSource">
<ref local="DataSource"/>
</property>
</bean>
-->
关于树型目录的框架
严格说来写一个树型目录的架构是一项非常复杂的工作
,树型目录的实现有两种方式
:全部画出所有的树节点和当触发时实时画出下一层节点。前一种的实现相对简单一些
,但是当节点数量超过
1000之后
,采用递归算法会导致页面首次显示时出奇的缓慢
,我曾经做过对
js脚本和相应的存储过程做过调优
,但是效果还是不甚理想
;触发时才实时画出下一层节点技术难度很高
,还好公司有比较现成的框架
,光
java类和接口就有
10几个
,完全阅读并理解显然是不现实的
,只能通过摸索把先有的业务和原来的接口进行不断的测试
,花费了一天时间才得以完成
.
关于
Web Service
Web Service是一种可以接收从
Internet或者
Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。总得来讲它能够突破平台限制
,穿越企业防火墙
,通过开放的接口和认证实现信息的共享和传递
.
WSDL
对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。
WSDL
(Web Services Description Language) 规范是一个描述接口,语义以及
Web服务为了响应请求需要经常处理的工作的
XML文档。这将使简单地服务方便,快速地被描述和记录。
对于
.Net的
WSDL调用来说是很简单的
,例如一个简单的
VBS脚本
Dim
obj
set
obj=createobject("MSSOAP.SoapClient30")
obj.MSSoapInit
"QueryService.wsdl"
MsgBox
obj.getPhoneByName("0578", "XXX
单位
",10)
但是对于
java而言调用一个
.Net产生的
WSDL简直被折磨了半死
,Q公司又不肯提供技术支持
,不断的进行调试跟踪最后才发现是一个
setEncodingStyle参数设置的问题
.
public
class CpSpInterface {
protected Log logger =
LogFactory.getLog(this.getClass());
private String endpoint =
"http://192.168.1.2/Service1.asmx";
private String nameSpace =
"GetSPInfo";
public String callGetIndexByType(String
strTypeID, String strParaList,String strResultType)
{
String
ret = "<?xml version="1.0" encoding="gb2312"
?><root status="1"
lines="0"></root>";
try
{
String
methodName = "GetIndexByType";
Service
service = new Service();
Call
call = (Call) service.createCall();
call.setTimeout(new
Integer(120000));
call.setTargetEndpointAddress(new
java.net.URL(endpoint));
call.setUseSOAPAction(true);
call.setSOAPActionURI(nameSpace
+ "/GetIndexByType");
call.setOperationStyle(org.apache.axis.constants.Style.WRAPPED);
call.setEncodingStyle("literal");
call.setOperationName(new
QName(nameSpace, methodName));
StringHolder
holder = new StringHolder("0");
//
Set Call Parameter
call.addParameter(new
QName(nameSpace, "strTypeID"),
Constants.XSD_STRING,
ParameterMode.IN);
…………
略
//Set
back Parameter
call.setReturnType(Constants.XSD_STRING);
ret
= (String) call.invoke(new Object[] { strTypeID, strParaList,
strResultType });
ret
= ret.replaceAll("utf-8","gb2312");
logger.debug("ret
= "+ret);
logger.info("return
errorcode = " + holder.value);
}
catch (Exception e) {
logger.error("Error
" + e);
}
return
ret;
}
}
关于
Ajax
单纯从
Ajax本身来说,其最主要不过就是解决在网页上一个无刷新获取数据的问题,再加上减少了数据的传输量,将数据解析的工作推到了客户端,的确能解决很多传统的问题,很方便的实现一些动态效果。
Ajax的应用本来是为了增强用户体验
,于是就有了一个新的名词
WEB2.0.
其实在该系统的应用很简单即获取到
COM组件传过来的主叫号码和被叫号码
,记录到
Session中
,具体的
JSP页面是一个非常简单的页面
,就不必再写了
,呵呵
Xh
= new ActiveXObject(“Microsoft.XMLHTTP");
var
link = "./beginSession.do?callID="+callid+"&callerNo="+callerno+"&calleeNo="+calleeno;
关于交流
其实整个系统过程中
,最头疼的问题还是和
Q公司的交流
,Q公司是一家新型的在电信领域刚刚展露头脚的公司
,面对这样一个扬名立万的机会
,当然不会错过了
,于是派了
40个现场人员进行现场开发
,真不知道他们的项目成本控制是怎么做的
;而我方总计也只有
3个人
,参与接口的讨论最多也只有
2个人
;每次都要面对对方嗡嗡的一群人的轮番轰炸
;最后不得已拉着
Z电信公司一起参与讨论
.还好对方也有很多的软肋
(双方都要提供一些接口
),才不至于被折磨的太惨
.
2006年
2月
28日
,是个特殊的日子
,当天下午
Q公司终于把接口调试完毕
,当天晚上我也把相应的功能完善起来
,终于到了一个
milestone.彷佛经历了一场噩梦
.连续
3周的时间
,每天从早
9点到晚上
3点不停的写代码
,调试代码
,查询资料
,讨论需求
;极度厌烦了这样的生活
,最后终于借口身体不好
,仓惶逃离了这个地方
,把工作交接给一位新来的同事
,他又继续维护了
6个月
.我回去后休整了
1个多月
,身体仍然比较虚弱
,再过了一个月就黯然离职了
补记
:时年
6月份便发生了一幕惨剧
,一位同事因过劳而死
…不知道我再呆上几个月
,轮到的是不是我
…
分享到:
相关推荐
初三物理-电路辅导-难题-补习资料.pdf
难题”之一:P(多项式算法)问题对NP(非多项式算法)问题 难题”之二: 霍奇(Hodge)猜想 难题”之三: 庞加莱(Poincare)猜想 难题”之四: 黎曼(Riemann)假设 难题”之五: 杨-米尔斯(Yang-Mills)存在性...
参考资料-天津-攻克盖挖逆做侧墙单侧支模施工技术难题-0419.zip
项目管理沙龙--谷雨霖 主题演讲一:中小型软件项目管理的难题 主题演讲二:如何管理好中小型软件项目 Tea break Demo秀 主题演讲三:善用管理工具 成功交付软件
8-中建八局天津-攻克盖挖逆做侧墙单侧支模施工技术难题-0419(30P).rar
8-中建八局天津-攻克盖挖逆做侧墙单侧支模施工技术难题-0419(30P).ppt
2021年09月16日
技术难题(对接)项目.pdf
自编NOIP1难题*1 望采纳珍惜资源请珍惜资源请珍惜
初中物理绝对经典80道难题--浮力2.doc
临沂市企业技术难题与项目需求.doc
临沂市企业技术难题和项目需求.doc
临沂市企业技术难题及项目需求.doc
多条措施破解学生管理难题--曾得弟.doc
就是一门应用科学$因此$在编撰过程中围绕区分&科学难题'而非&技术难 题'做了大量工作#为便于读者浏览与阅读$科普类题目放在最前面$其余 则按六个一级学科分类排列# 本书可供高等院校和科研单位从事信息科学研究的...
如何破解企业承包商安全管理难题-安全管理-行业安全-建筑安全.docx
破解白酒营销难题--多品牌策略和单一品牌策略的选择.pdf
使用kdump_crash解决死机难题-v1.2 - public
20210125-方正证券-汽车整车行业:从广汽埃安新电池技术看电动车未来发展趋势.pdf