0

我在使用 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");
    }        
}

但这并不完全漂亮;)

有谁知道是什么导致了这种行为或我做错了什么?

4

0 回答 0