一直找不到LOMBOZ v3.1.2里面建立实体Bean的实现,浪费了很多时间还是一无所获。于是毅然转投myeclipse阵营(eclipse v3.2 + myeclipse + jboss 4.0),感谢泡泡的指点,使我迅速安装成功,省事不少。
连着三天晚上的尝试,BMP和CMP终于在我机子上跑起来了,那个高兴啊….
回头总结一下,发现煞费一番苦心,结果解决了几个很现在看来很简单的问题。
一个人的探索无疑事倍功半,往往一点即通的问题在google,百度上却要花去好几个小时。苦于无人指点啊!为什么老师讲课要基于SUN的J2EE Server + notepad呢!好端端的jboss+eclipse不用!愤怒!
对于BMP的开发,部署,无须多说,挺容易就配置成功了。CMP可就折磨人了,老是报错,部署一直不正确。本质在于我对XDoclet这种基于注释编程的方式不熟悉,对于它的标记和XML配置文件的标签的对应关系更是一概不晓。只能对着它的官方文档和网上一些示例对照着摸索..
总结几点在CMP中我犯的错误:
1. EJB-QL编译错误,这是因为我不了解EJB-QL以及抽象持久化模式的原因造成的。比如“SELECT DISTINCT OBJECT(p) FROM PRODUCTS p WHERE p.basePrice < ?1”这句中的PRODUCTS并非数据库空中的表名,而是抽象持久花模式名,也就是在ejb-jar.xml中指定的“<abstract-schema-name>PRODUCTS</abstract-schema-name>”
2. 对于配置jboss的mysql数据源,可以参见网上一些文档,比较多,这里就不详谈。只是要注意,利用XDoclet时,应该在Bean类中指定比如“ @jboss.persistence datasource=”java:/MySqlDS” datasource-mapping=”mySQL” create-table=”true” remove-table=”false””
3. 部署时出现如下错误:
00:40:09,809 INFO [EJBDeployer] Undeploying: file:/F:/jboss 4.0.5.GA/server/default/deploy/Product.jar
00:40:11,496 WARN [verifier] EJB spec violation:
Bean : Product
Method : public abstract Collection findByName(String) throws FinderException, RemoteException
Section: 10.5.6
Warning: Every finder method except findByPrimaryKey(key) must be associated with a query element in the deployment descriptor.
然后我的每个finder方法都指定了EJB-QL的语句,原因到底在哪里喃?百思不得其解。至少耗费了三到四个小时的尝试,才发现原来是指定finder的时候,函数签名的参数没有使用完全限定类名!
也就是说,把比如
@ejb.finder view-type= “both”
signature = “java.util.Collection findByName(String name)”
query = “SELECT DISTINCT OBJECT(p) FROM PRODUCTS p WHERE p.name = ?1″
改成
@ejb.finder view-type= “both”
signature = “java.util.Collection findByName(java.lang.String name)”
query = “SELECT DISTINCT OBJECT(p) FROM PRODUCTS p WHERE p.name = ?1″
一切就OK…
狂晕+狂汗…GOD… such a stupid mistake!
算了,这里还是表扬一下GOOGLE,顺便鄙视百度…最后的一个错误就是百度三小时未果,google三分钟解决啊~!
好了,打住,上述文字未免也太混乱了吧…OK, 欧冠开始了,嘿嘿。。希望今天米兰笑到最后~~(上半场1:0了,呵呵)

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-No Derivative Works 2.5 China Mainland License.




