2

我是 EJB3 的新手,正在处理现有代码。

我们正在使用 weblogic10.3,下面的代码工作正常

@Stateless(mappedName="ProcessIssacIncomingMessage")
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
@EjbRef(name="Database" jnod-name="Database")

public class IncomingMessageBean implements IncomingMessageRemote, IncomingMessageLocal {
...
@Ejb
private Database<Object> databaseBean;

在 10.3 weblogic.jar 中有包 weblogic.ejbgen.EjbRef

我们现在切换到 weblogic10.3.1 并且 weblogic.jar 不再附带 weblogic.ejbgen 包。

所以,我把代码改成了这个(尚未在 10.3.1 中测试)

@Stateless(mappedName="ProcessIssacIncomingMessage")
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=TransactionAttributeType.REQUIRED)
@EjbRef(name="Database" jnod-name="Database")  --- removed this line


public class IncomingMessageBean implements IncomingMessageRemote, IncomingMessageLocal {
...
@Ejb(mappedName="Database") -- added the mapped name here.
private Database<Object> databaseBean;

为了向后兼容。在 wl10.3 中运行代码后,出现错误

错误是- javax.ejb.EJBTransactionRolledbackException:EJB异常com.bea.core.repackaged.springframework.beans.factory.BeanCreationException:::依赖注入失败:找不到关于类接口的bean定义javax.persistence.EntityManager;嵌套异常是:没有定义类型 [] 的com.bea.core.repackaged.springframework.beans.factory.NoSuchBeanDefinitionException唯一 bean :没有类型的 bean ;所有者= :显示名称javax.persistence.EntityManagerjavax.persistence.EntityManagercom.bea.core.repackaged.springframework.context.support.GenericApplicationContext

谁能帮忙,我应该如何/如何重构代码。或者这里缺少什么?这样我的代码在不使用 @EjbRef 的情况下与 10.3 和 10.3.1 兼容

4

1 回答 1

0

我认为源代码不是 10.3,而是一些早期版本的 weblogic,其中 EjbRef 是由 weblogic.jar 中的 weblogic 提供的。但似乎在某些版本之后可能 10.3.x 起 weblogic.ejbgen.EjbRef 被重构为 weblogic.jar 以外的不同 jar

我对 server/lib 文件夹中的所有 jar 进行了分解,发现 wls-api.jar 中提供了相同的包

我的问题现在解决了。在我找到这个之前,我已经从使用任何 weblogic 特定的 jar 文件中删除了对代码的依赖。

于 2010-10-29T14:06:23.873 回答