论坛首页 Java企业应用论坛

Struts+SessionBean+DAO+PO的部署方案探讨

浏览 10168 次
该帖已经被评为精华帖
作者 正文
   发表时间:2003-10-16  
系统实例:4-5个子模块,模块之间的实体有一定的关联,大致按模块分组开发,采用Struts、Stateless SessionBean、Hibernate等技术。我初步设想的部署方案是:
·由于PO穿越了DAO、SessionBean、Action,所以所有PO打成一个JAR文件,加到应用服务器启动的CLASSPATH和WAR的WEB-INF\lib下,为了协作开发的方便,也可以各模块的PO分开打成不同的JAR;
·各模块的SessionBean和DAO分别打成EJB-JAR,部署到容器;
·SessionBean的远程接口、Home接口等分模块打成JAR加到WAR的WEB-INF\lib下;
·共用的工具类、系统参数的单件类等单独打一个JAR,也加到应用服务器启动的CLASSPATH和WAR的WEB-INF\lib下
   发表时间:2003-10-17  
muziq 写道
系统实例:4-5个子模块,模块之间的实体有一定的关联,大致按模块分组开发,采用Struts、Stateless SessionBean、Hibernate等技术。我初步设想的部署方案是:
·由于PO穿越了DAO、SessionBean、Action,所以所有PO打成一个JAR文件,加到应用服务器启动的CLASSPATH和WAR的WEB-INF\lib下,为了协作开发的方便,也可以各模块的PO分开打成不同的JAR;
·各模块的SessionBean和DAO分别打成EJB-JAR,部署到容器;
·SessionBean的远程接口、Home接口等分模块打成JAR加到WAR的WEB-INF\lib下;
·共用的工具类、系统参数的单件类等单独打一个JAR,也加到应用服务器启动的CLASSPATH和WAR的WEB-INF\lib下


我想你大概考虑到团队开发的情况了。如果考虑这个问题就比较复杂,因为团队的规模不同,代码的分模块管理方法也不同,例如团队非常大,需要按照不同的功能模块分组,或者团队规模比较小,按照J2EE不同层开发人员进行分组,这都会影响到代码如何打包和管理。如果抛开团队管理,还要分开发的时候怎么管理和部署的时候怎么管理:


我建议如下:

如果是开发的时候

1、DAO接口,DAO接口实现类(Hibernate实现),PO类统统都不打包,放在App Server的CLASSPATH下,由App ClassLoader去load。

2、每个SLSB单独打包发布

3、WAR下面只放SLSB的接口类包,也是每个SLSB一个jar包

部署的时候

统统打在一起做成一个EAR包进行运行环境的部署。

我觉得你的方案中有几个地方有点小毛病:

1、同时在App Server CLASSPATH下面放置PO和Web App CLASSPATH下面放置PO,那么对于Web App来说,他会优先load自己目录下面的PO,如果两个地方的PO版本是一致的话,完全没有必要同时维护两套。

2、不要同时在App Server CLASSPATH下面放置PO和Web App CLASSPATH下面放置Singleton类,这就是我说的对Singleton Class Loader误用导致Singleton失效的情况。Web App优先load自己目录下面的Singleton,而该Singleton是由Web Class Loader调入,而系统其它的应用,例如EJB是load不到该Singleton的,当EJB运行的时候,会去初始化App Server CLASSPATH下面的那个Singleton类,造成重复初始化。
0 请登录后投票
   发表时间:2003-10-17  
robbin 写道
我觉得你的方案中有几个地方有点小毛病:
...
说的没错。多谢robbin!
0 请登录后投票
   发表时间:2003-10-21  
cxhz_cn 写道
1、DAO接口,DAO接口实现类(Hibernate实现),PO类统统都不打包,放在App Server的CLASSPATH下,由App ClassLoader去load。


我一直认为DAODAO接口实现类里面其实是封装的是对某张表的Insert,update,Select,Delete的操作,既然采用的Hibernate了,本身就是一个DAO,那么为啥还要用DAO


对于这个问题,前面有很多讨论,search一下。
0 请登录后投票
论坛首页 Java企业应用版

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