论坛首页 Java企业应用论坛

工作总结 – remote control

浏览 2208 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (12) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-05-30  
工作总结 – 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开发,目前看来有一定局限性。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics