我是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
:依赖注入失败:找不到关于类接口javax.persistence.EntityManager
的bean定义;嵌套异常是com.bea.core.repackaged.springframework.beans.factory.NoSuchBeanDefinitionException
:没有定义类型为[javax.persistence.EntityManager
]的唯一bean:没有类型javax.persistence.EntityManager
的bean; owner =com.bea.core.repackaged.springframework.context.support.GenericApplicationContext
:显示名称
任何人都可以提供帮助,我应该如何重构代码。或者这里缺少什么?这样我的代码在不使用@EjbRef
的情况下与10.3和10.3.1兼容答案 0 :(得分: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文件对代码的依赖。