我在使用 OpenJPA 的 Glassfish 3.1 上运行的 EJB 中遇到了一个奇怪的问题。
首先是处理所有 JPA/Entity-Stuff 的企业应用程序“businessBeans”。它提供了一些其他应用程序可以通过远程接口使用的 EJB。
现在我的应用程序(未捆绑在同一个 .ear 中)正在尝试通过
@EJB(lookup = TaskRemote.JNDI)
private TaskRemote taskRemote;
到目前为止一切顺利,我可以调用该接口中定义的方法
但是,当我在重新部署后第一次调用方法时,应该从数据库中加载一个实体,如下所示:
List<BigInteger> tasks = this.taskRemote.getMeSomeStuffFromDb(someArgument);
我得到一个例外
Caused by: java.lang.IllegalStateException: WEB9031: WebappClassLoader unable to load resource [org.apache.openjpa.util.StringId], because it has not yet been started, or was already stopped
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1401)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359)
at ch.bs.zid.egov.business.entity.egov.SystemEnvironment.pcNewObjectIdInstance(SystemEnvironment.java)
at org.apache.openjpa.enhance.PCRegistry.newObjectId(PCRegistry.java:142)
at org.apache.openjpa.meta.MetaDataRepository.processRegisteredClass(MetaDataRepository.java:1694)
at org.apache.openjpa.meta.MetaDataRepository.processRegisteredClasses(MetaDataRepository.java:1644)
... 162 more
如果我再次拨打完全相同的电话,它会起作用......直到我再次重新部署
现在我正在使用的问题的解决方法是在调用 EJB 的 @postConstruct 方法中进行调用,以完成第一次调用失败...
@PostConstruct
private void workaround()
{
try
{
this.taskRemote.getMeSomeStuffFromDb(someArgument);
}
catch (EJBException e)
{
this.logger.logSystemInfo("Excected Exception in Workaround");
}
}
但这并不完全漂亮;)
有谁知道是什么导致了这种行为或我做错了什么?