去年在做系统的时候oracle数据库,开始用的weblogic做ejb服务器,后来要移植到jboss上,程序中数据库设计部分很多表的主键我设计的方案时要求用序列生成后再转换成varchar2型,同事们在做的时候直接在ejb中定义相应的主键为long,如此就可以直接运用ejb的primarykey 的auto generate了,型号weblogic cmp在存贮的时候对long自动转换成varchar2进了数据库。但是移植到jboss后发现部署失败,具体的异常不及的了,大概就是这个数据类型不匹配的问题,在findByPrimaryKey中。怎么办?总不能修改那几百个cmp为主键string吧?况且修改后ejb的primary key 的auto generate也不能用了,很麻烦。
//本人原创runnerrunning@163.com转载请保留本信息
//http://blog.youkuaiyun.com/runnerrunning
//大家看了别忘了点右边的广告阿支持一下runnerrunning@163.com阿
后来想到jboss的 jboss4/server/default/conf/standardjbosscmp-jdbc.xml中定义了ejb中引用的数据的类型及函数,于是试验寻找到
<type-mapping>
<name>Oracle9i</name>
在其中寻找一个不长用的函数,比如
<function-mapping>
<function-name>length</function-name>
<function-sql>length(?1)</function-sql>
</function-mapping>
修改为
<function-mapping>
<function-name>length</function-name>
<function-sql>UF_length(?1)</function-sql>
</function-mapping>
然后在oracle数据库中定义UF_length(?1),其作用为to_char(),把整形转换为varchar2
然后修改cmp中的findByPrimaryKey方法,where pk_no = length(?)
再编译大包部署,成功了
这个问题解决了,但是偶感觉jboss等开源服务器和商业服务器确实在可用性和稳定性,代码健壮性上和商业软件确实还有距离。
//本人原创runnerrunning@163.com转载请保留本信息
//http://blog.youkuaiyun.com/runnerrunning
//大家看了别忘了点右边的广告阿支持一下runnerrunning@163.com阿