工作总结 – remote control

本文总结了一个名为RemoteControl项目的开发过程,涉及文档开发、数据库设计、前后端开发等内容。使用的技术栈包括MySQL、Spring、Hibernate、JSF/RichFaces等。特别提到了在使用Hibernate时遇到的lazy initialization问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作总结 – remote control

工作周期:2008/04/05 – 2008/05/30

工作流程:文档开发,数据库开发,后台程序开发,前台页面设计,前台页面开发

编程工具:mysql,Spring, Hibernate, JSF/Rich Faces

经验与教训:

文档开发阶段:由于对UML图的不熟悉,在绘制Use case diagram, Activity diagram, Component diagram, Deployment diagram 时均出现了一定问题,用了大概2周时间才完成, 以后需要加强这方面的研究。

数据库开发:DB schema 由Manager设计,只负责录入数据库。在和hibernate结合中,pk的生成方式为native,所以需要在mysql中将pk设为auto increment。此外还需要注意index的设 置,需要考虑到效率问题,对于非重复性字段,需将index设为unique index。

后台程序开发:
1. 使用hibernate时,遇到了经典的lazy initialization 问题。解决方案:没有使用open session in view方法,而是使用Spring在service层进行transaction的管理,当在service方法中需要使用到lazy load的属性时,使用Hibernate.initialization() load出来。在对DAO层测试时,扩展TestCase, 使用BaseCase工具类。

2. JSF与Spring的结合,由于J2EE5已经包含JSF1.2,所以不需要引入额外的包,否则会引起冲突。如果使用JSF1.1,一般需要添加jsf-spring工具包。


a. web.xml:用于获得WebApplicationContext
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

b.Faces-config.xml:
<application>
<variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
</variable-resolver>
</application>

c. 在managed-bean中注入

3. 因为系统的服务器端使用分层的结构,所以程序之间的通信需要用到RPC方法。Spring目前支持的RPC包括RMI,Burlap/Hessian,Http Invoker和SOAP。方案选择为SOAP,基于XML的网际传输,使用第三方工具Xfire支持。因为用了JAVA5泛型的特性,所以使用起来很方便,不需额外编写aegis文件。在传输object时,对于想lazy load的属性,使用annotation @IgnorProperty声明即可。不过在传输Collection时,这种方法似乎有问题,会抛出session close异常。

配置方法:在WEB-INF下加入XFireServlet-servlet.xml文件,配置SimpleUrlHandlerMapping,并将需要远程访问的服务用XFireExporter声明。在web.xml中配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:org/codehaus/xfire/spring/xfire.xml
classpath:applicationContext.xml
</param-value>
</context-param>

<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
在客户端的ApplicationContext.xml中用XFireClientFactoryBean接收服务。注意XFire需要的jar包比较多,配置的时候要小心。

4. 客户端在发送heartbeat时使用了Spring提供的ApplicationEvent,ApplicationEventPublisher和ApplicationListner,然后再web.xml中配置listener。

5. 在发布Web App时运行一个自定义的初始化方法,只需要继承HttpServlet,在init方法中定义具体过程,然后再web.xml中加入servlet即可。

6. 还有一些零散的经验,包括异常处理机制的定义,log系统使用动态生成表,对java.util.Date, java.util.Calendar与mysql中datetime类型的结合使用等。

前台页面设计:没什么经验,效果一般。
前台页面开发:基本未参与,使用JSF + Rich Faces开发,目前看来有一定局限性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值