天的项目经历使我终身难忘有喜有悲有付出更有收获从web service Tomcat Eclipse AjaxSpring都在这天的辛勤努力中克服了 时间转眼过去一年多了我离开H公司也已经一年多了往事不堪回首世事也总是以成败论英雄因为我知道前面的一个接口项目先后导致个人离职个人被处罚;而这个项目只有我一个人在项目割接的当天我总算不辱使命完成了;我既是成功者也是失败者;我证明了自己是可以笑着离开H公司的其实我一直不太想写出来毕竟申请离职也不是一件很光彩的事情 年是全国号码百事通风起云涌的一年而Z电信公司正是第一个勇于吃螃蟹的人且率业界之先的公司;我就是年初被派到Z电信公司跟着另外一个项目经理讨论接口需求的(原因很简单为了避免垄断Z电信公司把省中心业务给了Q公司而个地市给了H公司所以在省中心和地市之间需要通过Web Service接口进行互连)其实在这之前的一年内我是做BI和数据库优化的对于所谓的接口和是一窍不通的估计看出了点苗头项目经理当了甩手掌柜只好由我一个人来负责此事了 月号春节还没过完我便来到了H市经过反复的讨论和调研其实我做的工作只是号码百事通业务的一部分即实现对现有知识库的智能访问当然访问是需要通过接口来完成的此外还要实现一定的功能例如发送短信来电转接记录计费信息当然也是通过接口来实现 其实我很早就已经有了初步的想法最简单的就是我自动生成存储过程和自动生成html网页(其实基本上已经实现了)但是了解到存储过程需要在友商的数据库中创建以及考虑到相关的风险和双方的剑拔弩张的气氛这显然是不可能实现的任务现在只能自己另辟蹊径建一个独立的Web Server服务器通过正在流行的Web Service接口来实现这一切功能了 上述的图片显示的框架源于我对BI和数据库的理解只要有一个开放的数据字典基本上就可以实现任何的自定义查询和自定义组合;如果复杂一点的话甚至可以实现一套简单的报表系统正是基于这样的想法和相关数据结构开始和Q公司谈相关的接口但是有几个问题一直缠绕着我: 采用什么样的WEB服务器Tomcat还是Resin 采用什么样的编程工具Jbuilder还是Eclipse? Web Service接口到底是什么如何完成发布和调用 采用什么样的Java框架(Struct还是Spring还是纯粹的JSP) Ajax技术 关于树型目录的实现(需要高效无延迟) 最难缠的还是和Q公司的谈判和交流(要面对对方人的轮番轰炸) 也许对于Java高手而言这根本不算什么可对于我而言那简直是一场噩梦我的Java水平和HTML水平仅限于写一些简单的JSP页面和JavaBean完成简单的封装我自认为自己水平最高的还是HTML和Javascript水平不管多么复杂的页面和frame我都可以整理出一个头绪出来我从来不是一个唯工具论者我相信任何工具都只是手段而条条马路都可以通向罗马的可惜给我留的时间太短了只有周的时间说真的那时候天天对着西湖的美景没有一丝丝观看的心情真的想扑通一声跳下去一了百了 言规正传首先需要确定系统大体的架构Tomcat和Eclipse都是开源的架构不涉及到版权和费用从网上down的Tomcat呵呵如果Z电信公司知道了非要气个半死不可按照从网上搜索的资料把Tomcat和Eclipse环境配置完毕然后按照公司的Java高手指点配置Spring框架 关于Spring框架的配置 Spring 是一个开源框架是为了解决企业应用程序开发复杂性而创建的框架的主要优势之一就是其分层架构分层架构允许您选择使用哪一个组件同时为 JEE 应用程序开发提供集成的框架 其实在这样的小型系统里它提供了一个便于调试和控制的开关;至少在本文中是为了解决无法使用接口环境进行调试的时候改用数据库接口方式 <! =======如果是和soap接口连接请去掉该bean的注释===========><bean id=QueryData class=comxxxyyyinfSoapInterface><property name=endpoint><value>;/value> </property><property name=nameSpace><value>;/value> </property></bean><! ===========如果是和db接口连接测试请去掉该bean的注释 =====><!<bean id=QueryData class=comxxxyyyinfDBInterface><property name=dataSource><ref local=DataSource/></property></bean>> 关于树型目录的框架 严格说来写一个树型目录的架构是一项非常复杂的工作树型目录的实现有两种方式:全部画出所有的树节点和当触发时实时画出下一层节点前一种的实现相对简单一些但是当节点数量超过之后采用递归算法会导致页面首次显示时出奇的缓慢我曾经做过对js脚本和相应的存储过程做过调优但是效果还是不甚理想;触发时才实时画出下一层节点技术难度很高还好公司有现成的框架光Java类和接口就有几个完全阅读并理解显然是不现实的只能通过摸索把先有的业务和原来的接口进行不断的测试花费了一天时间才得以完成 关于Web Service Web Service是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求轻量级的独立的通讯技术总体来讲它能够突破平台限制穿越企业防火墙通过开放的接口和认证实现信息的共享和传递 WSDL 对于商业用户来说要找到一个自己需要使用的服务他必须知道如何来调用 WSDL (Web Services Description Language) 规范是一个描述接口语义以及Web服务为了响应请求需要经常处理的工作的XML文档这将使简单地服务方便快速地被描述和记录 对于Net的WSDL调用来说是很简单的例如一个简单的VBS脚本 Dim objset obj=createobject(MSSOAPSoapClient)objMSSoapInit QueryServicewsdlMsgBox objgetPhoneByName( XXX单位) 但是对于Java而言调用一个Net产生的WSDL简直被折磨了半死Q公司又不肯提供技术支持不断的进行调试跟蹤最后才发现是一个setEncodingStyle参数设置的问题 public class CpSpInterface {protected Log logger = LogFactorygetLog(thisgetClass());private String endpoint = ;private String nameSpace = GetSPInfo;public String callGetIndexByType(String strTypeID String strParaListString strResultType){String ret = <?xml version=\\ encoding=\gb\ ?><root status=\\ lines=\\></root>;try {String methodName = GetIndexByType;Service service = new Service();Call call = (Call) servicecreateCall();callsetTimeout(new Integer());callsetTargetEndpointAddress(new URL(endpoint));callsetUseSOAPAction(true);callsetSOAPActionURI(nameSpace + /GetIndexByType);callsetOperationStyle(nstantsStyleWRAPPED);callsetEncodingStyle(literal);callsetOperationName(new QName(nameSpace methodName));StringHolder holder = new StringHolder();// Set Call Parameter calladdParameter(new QName(nameSpace strTypeID)ConstantsXSD_STRING ParameterModeIN);…………略//Set back Parameter callsetReturnType(ConstantsXSD_STRING);ret = (String) callinvoke(new Object[] { strTypeID strParaListstrResultType });ret = retreplaceAll(utfgb);loggerdebug(ret = +ret);(return errorcode = + holdervalue);} catch (Exception e) {loggererror(Error + e);}return ret;}} 关于Ajax 单纯从Ajax本身来说其最主要不过就是解决在网页上一个无刷新获取数据的问题再加上减少了数据的传输量将数据解析的工作推到了客户端的确能解决很多传统的问题很方便的实现一些动态效果Ajax的应用本来是为了增强用户体验于是就有了一个新的名词WEB 其实在该系统的应用很简单即获取到COM组件传过来的主叫号码和被叫号码记录到Session中具体的JSP页面是一个非常简单的页面就不必再写了呵呵 Xh = new ActiveXObject(MicrosoftXMLHTTP); var link = /beginSessiondo?callID=+callid+&callerNo=+callerno+&calleeNo=+calleeno; 关于交流 其实整个系统过程中最头疼的问题还是和Q公司的交流Q公司是一家新型的在电信领域刚刚展露头脚的公司面对这样一个扬名立万的机会当然不会错过了于是派了个现场人员进行现场开发真不知道他们的项目成本控制是怎么做的;而我方总计也只有个人参与接口的讨论最多也只有个人;每次都要面对对方嗡嗡的一群人的轮番轰炸;最后不得已拉着Z电信公司一起参与讨论还好对方也有很多的软肋(双方都要提供一些接口)才不至于被折磨的太惨 年月日是个特殊的日子当天下午Q公司终于把接口调试完毕当天晚上我也把相应的功能完善起来终于到了一个milestone彷佛经历了一场噩梦连续周的时间每天从早点到晚上点不停的写代码调试代码查询资料讨论需求;极度厌烦了这样的生活最后终于借口身体不好仓惶逃离了这个地方把工作交接给一位新来的同事他又继续维护了个月我回去后休整了个多月身体仍然比较虚弱再过了一个月就黯然离职了 补记:时年月份便发生了一幕惨剧一位同事因过劳而死…不知道我再呆上几个月轮到的是不是我… |