jboss to weblogic移值说明(原创)

好不容易把原有的jboss系统移值到了weblogic上,呵呵花了一天时间,真是充满痛苦和愤怒,就像当初把

系统部署到jboss上一样,一出错就是好多,呵呵,只有一个个的看,但比较另人费解的是,在部署jboss出错

时,前后错误不一样,前面提示的是正确的,而后面又提示你是别的bean出现不符合规范引起的错误。呵呵,

不说了,想必各位也经历过如何情形,慢慢享受吧。言归正传:

在我看来jboss的配置还是比较简单,不是很复杂和难以理解的,尽管都是手工的(没有人用jmx-console配吧

),虽然weblogic的配置很图形化,但是不知道配置的东东跑到什么地方去了,config.xml文件只能找到conne

ction pool等得配置,但是系统级的找不着,很典型的是log级别的配置,不知放哪里了,对weblogic了解不深

,还望各位高手指点。

第一步:jbosscmp-jdbc.xml->weblogic-cmp-rdbms-jar.xml
如果你没有weblogic-cmp-rdbms-jar.xml文件的样本,jbuilder生成一个。
这个文件主要包含ejb字段和数据库字段的对应关系,移植这个文件修改不是很多,主要是datasource

需要修改,其余就是tag的不同了。
首先是数据源的修改,weblogic和jboss都提供对某个具体的EntityBean的datasource定义,而jboss还

提供所有缺省的datasource,所以如果jbosscmp-jdbc.xml用的缺省的datasource形如:


<defaults>
<datasource>java:/OracleDS</datasource>
<datasource-mapping>Oracle9i</datasource-mapping>
<create-table>false</create-table>
</defaults>

的得修改一下了,加到每个WEBLOGIC 每个定义entity下。另外java:/OracleDS得修改为OracleDS
示例:


jbosscmp-jdbc.xml
<jbosscmp-jdbc>
<defaults>
<datasource>java:/OracleDS</datasource>
<datasource-mapping>Oracle9i</datasource-mapping>
<create-table>false</create-table>
</defaults>
<enterprise-beans>
<entity>
<ejb-name>Test</ejb-name>
<table-name>Test</table-name>
<cmp-field>
<field-name>lineNbr</field-name>
<column-name>LINE_NBR</column-name>
</cmp-field>
<cmp-field>
<field-name>nxxNbr</field-name>
<column-name>NXX_NBR</column-name>
</cmp-field>

</entity>
<enterprise-beans>
....
</bosscmp-jdbc>

移植后的WEBLOGIC weblogic-cmp-rdbms-jar.xml


<weblogic-rdbms-jar>
<weblogic-rdbms-bean>
<ejb-name>AccNbr</ejb-name>
<data-source-name>OracleDS</data-source-name>
<table-map>
<table-name>Test</table-name>
<field-map>
<cmp-field>lineNbr</cmp-field>
<dbms-column>LINE_NBR</dbms-column>
</field-map>
<field-map>
<cmp-field>nxxNbr</cmp-field>
<dbms-column>NXX_NBR</dbms-column>
</field-map>
</table-map>
</weblogic-rdbms-bean>
....
</weblogic-rdbms-jar>

注意weblogic datasource每个entity都需定义

第二步:jboss.xml->weblogic-ejb-jar.xml
jboss.xml中主要描述的是EJB的local和remote jndi名称,以及EJB资源和实际的对应关系
weblogic.xml中也是如此,weblogic中还必须定义Entity的persistence type。
除此,如过你没有用到别的依赖服务器的设置,基本上修改也就不多了。
sessionbean大体上不用修改啥,修改一下tag就ok了。对于entity还得加上entity-descriptor
示例:


jboss.xml
<entity>
<ejb-name>Test</ejb-name>
<local-jndi-name>Test</local-jndi-name>
</entity>

weblogic-ejb-jar.xml
<weblogic-enterprise-bean>
<ejb-name>Test</ejb-name>
<entity-descriptor>
<persistence>
<persistence-use>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>6.0</type-version>
<type-storage>META-INF/weblogic-cmp-rdbms-jar.xml</type-storage>
</persistence-use>
</persistence>
</entity-descriptor>
<local-jndi-name>Test</local-jndi-name>
</weblogic-enterprise-bean>

对于ejb来将需要修改的地方只有两处了,当然如果你需要调整一下性能,那就是以后慢慢加的事了。
对于web应用来要可能增加weblogic.xml配置文件(如果你定义了ejb引用的话),也可以不要。


好了部署文件的修改完了。下面是weblogic的配置了,网上weblogic配置的文档也不少。我大概说说datasourc

e配置,以及和jboss的区别
jboss: 在JBOSS_HOME\docs\examples\jca目录中有关于各个数据库的配置(如oracle-ds.xml),修改一

下然后放到jboss的deploy目录下(jboss默认启动的是default那个目录,如果你要启动别的配置,需加参数-

c)
,注意jndi-name名称就是你在部署文件中用到的OracleDS,如果你想加一些其他的关于datasource的配置(如

对最大连接数的配置),可以将jca目录下generic-ds.xml配置考到你的文件中,那个是所有ds的默认配置。(3.

2.1和3.0.X不同)

weblogic:先配置connection pools,配置一个连接,然后再新建一个datasource就ok了.
这里有点说明:weblogic的DataSource

Jndi是OracleDS,而jboss是java:/OracleDS,注意两者datasource的区别.

配置好后可以将你文件打包部署到weblogic上了,如果在development

mode模式,可以直接将文件copy到user_projects\mydomain\applications下,weblogic会自动部署,不过你上控

制台看一下部署好的应用名可能不是你刚才的那个,weblogic也自动生成一个临时的名称
也可以直接再控制台上上传文件部署,或者用别的工具了.

说一下部署过程中会遇到的一些问题.
1.不符合ejb规范.报错ejbc....之类的错误,这种情况最好在部署时将weblogic的log级别调整到info

lever,这样可以看到具体是什么地方不符合规范.如果你只通过web看部署的错误,你会弄的一头雾水的.:)

这里要说一点的是,我原来用xdoclet生成的ejb在jboss上部署没问题,在weblogic中部署提示少了一个ejbRemov

e方发,查了一下果然是少了,而jboss部署没有报错,这可能和实现有关系,weblogic是通过ejbc生成stub和proxy

代码,而jboss主要使用的reflect,会提供给ejb一些默认的方法.(个人想法)
2.datasource没找着,在部署entity时,会根据datasource去找数据源的,如果你部署文件写错了,或者你配置

的有问题,都会引起该问题.

3.log4j问题,JBOSS是使用的log4j做为日志,所以原来程序的log配置都和jboss放在一起了,现在移值到weblogi

c上,呵呵,都没了,只是我的info lever的日志可以出来.看来得手工配一配了:)

以上讲的是ejb移植平台最基本的配置,由于本人对weblogic不熟,没有涉及高级一些的配置.其中有些不对的

地方,恳请交流指正!
欢迎来信探讨

mcindo
mcindo@etang.com

第一次写文章,给点意见吧!

好材料
我没有怎么用过WebLogic
不过我正在把一个东西从WebSphere往JBoss上移植,EJB特别是CMP的移植真是faint

很不错,现在大多数为了节约资金,是将weblogic向jboss上移,不过这篇文章也可以借鉴。

是啊是啊,我们项目就是从weblogic7移植到jboss3.2

感觉jboss也挺不错的

jboss to weblogic, weblogic to jboss呵呵,移植都差不多的


我有过从weblogic to jboss 的移植的经历,产品用JB开发,所有你只要在JBOSS环境下重新编译EJB,大部分工作JB都给你做好了,但还是有一部分工作需要自己动手配置,

1、如mcindo所言,在weblogic中,EJB连接数据源的Jndi是OracleDS的话,在jboss中要写成java:/OracleDS,datasource前加上java:/.

2、QL语句,以前的代码中大量使用小写select object(p) from logic p,但在JBOSS中,就必须全部改成大写字母的QL。

3、在JB环境中编译带有“LIKE”的QL(不符合J2EE规范),weblogic能转换识别,但JBOSS就不行了,得要自己改EJB配置文件

4、如果你的系统需要用到多个DATASOURCE,在JB编译后不会自动转换,得先动手配置EJB datasource,再编译。

最后 ,就是在转换过程碰到一些莫名其妙的问题,一定要先考虑到软件版本问题,特别是 数据库,一些低版本的 数据库,weblogic能很好的支持,但jboss就不能实现,我曾经就碰到过JBOSS 中执行findall(),结果只能取到前4条记录,后来升级了数据库,就OK了。


>2、QL语句,以前的代码中大量使用小写select object(p) from logic p,但在JBOSS中,就必须全部改成大写字母的QL

jboss中对ejb-ql得大小写没有限制

>一些低版本的 数据库,weblogic能很好的支持,但jboss就不能实现
是不是配置数据源时没有选择对应的datasource-mapping?如oracle8, oracle9i,我在oracle8,oracle8i都试过,没有出现问题

有l知道如何resin2.0.1下的servlet移植到JBoss3.x下?在JBoss下,如何\行 /app/resource/index.servlet@呢?假如@是一入界面,是一孟到y的_始界面.感xn教

有l知道如何resin2.0.1下的servlet移植到JBoss3.x下?在JBoss下,如何\行 /app/resource/index.java或index.class @呢?假如@是一入界面,是一孟到y的_始界面.感xn教

何必呢,用xdoclet 什么服务器的配置文件都能产生,真正能实现一次编译,所有服务器适用

weblogic to jboss时,cmp中的finder在weblogic中用的where a.sss like ?1,但jboss好像不支持like,只能用=,那这样的话通配符就不管用了啊,有什么好的解决办法没有啊?