我用Eclipse+JBoss4.0+MySql写一个信息管理系统,遇到一个部署错误的问题,在下花了N多天,伤了N多脑细胞,看了N篇文章,google了N遍net,终于找到了问题的症结。下面写出来供可能遇到相同问题的以参考:在这个系统中,有一个school和grade的之间的1:N的关联。我在school和grade中定义了相应的关联如下:
/*********School EJB*******************
* 2005-9-23
*
* @ejb.interface-method view-type = "local"
* @ejb.relation name="school-grade" role-name="school-has-grade"
* @return
*/
public abstract Collection getGrade();
/**
* @ejb.interface-method view-type = "local"
* @param grade
*/
public abstract void setGrade(Collection grade);
/*********Grade EJB**********************
* 2005-9-23
*
* @ejb.interface-method view-type = "local"
* @ejb.relation name="school-grade" role-name="grade-belong-school"
*
* @jboss.relation related-pk-field="id" fk-column="school_id"
* fk-constraint="true"
* @return SchoolLocal
*/
public abstract SchoolLocal getSchool();
/**
* @ejb.interface-method view-type = "local"
* @param school
*/
public abstract void setSchool(SchoolLocal school);
用xDoclet生成了部署描述文件后,然后就在JBoss中部署这两个EJB,哪知道出现了如下的错误:org.jboss.deployment.DeploymentException: Setter was found but no getter was found for field: school
真是奇怪了,在接口中和EJB实现文件中明明有getter方法,怎么会找不到呢?我第一反应是:JBoss有BUG????我还特地下了JBoss4.0.3RC,结果还是一样,还是报上面的错。会不会是部署描述文件出了问题?可是查了很多遍,看不出有哪一点不对。真是见鬼了!害得我一气之下将原来的工程文件全部删除(还好,损失不太大:))重新再做一遍,原以为这回应该没什么问题了吧。可是一部署,晕倒!还是这样的问题。
写到这儿,各位看官有何感想?我差一点就放弃了。好在laliluna的文章帮了我的大忙.原来是在GradeEJB中少了一个引用描述,在GradeEJB的类定义前加入下面一行,再运行xDoclet,再部署,问题就解决了:
@ejb.ejb-ref view-type="local" ejb-name="School" ref-name="ejb/school/School"
好了,问题终于解决了,我又得继续去写我的程序了。以后我会把我在写程序过程中遇到的问题和体会、感悟写出来和大家分享、交流。咱们下回再见。