首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置在Jboss 7中使用EntityListeners?

如何配置在Jboss 7中使用EntityListeners?
EN

Stack Overflow用户
提问于 2014-02-17 11:14:09
回答 1查看 215关注 0票数 0

我已经在org.eclipse.persistence中添加了JBoss 7模块。我不能使用EntityListeners

如果我从实体中删除@EntityListeners(IDInterceptor.class),持久化操作就可以了。

在实体持久化之前,我必须做一些操作。

如果我用Junit**,** EntityListeners 测试DAO的插入方法,是工作的。

我使用:JBoss 7Spring 3.5JPA 2.0 (EcliplseLink 2.5.0)

请告诉我,如何在我的web应用程序中使用EntityListenersJBoss 7

InsuType.java

代码语言:javascript
复制
@Entity
@TableGenerator(name = "INSUTYPE_GEN", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", pkColumnValue = "INSUTYPE_GEN", allocationSize = 10)
@EntityListeners(IDInterceptor.class)
public class InsuType implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "INSUTYPE_GEN")
    private String id;
    private String name;
    //getter and setter
}

IDInterceptor.java

代码语言:javascript
复制
public class IDInterceptor {
    @PrePersist
    public void onPrePersist(Object obj) {

    }

    //other function
}

InsuTypeDAO.java

代码语言:javascript
复制
@Repository("InsuTypeDAO")
public class InsuTypeDAO implements IInsuTypeDAO {
    @PersistenceContext
    protected EntityManager em;

    @Transactional(propagation = Propagation.REQUIRED)
    public InsuType insert(InsuType insuType) throws DAOException {
        em.persist(insuType);
        return insuType;
    }
}   

如果使用@EntityListeners(IDInterceptor.class),则会得到以下错误

代码语言:javascript
复制
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496) [eclipselink-2.5.0.jar:2.5.0.v20130507-3faac2b]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_23]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_23]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_23]
    at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_23]
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) [spring-orm.jar:3.1.
1.RELEASE]
    at $Proxy57.persist(Unknown Source) at org.ace.insurance.system.common.insutype.persistence.InsuTypeDAO.insert(InsuTypeDAO.java:33) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_23]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_23]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_23]
    at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_23]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318) [spring-aop.jar:3.1.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) [spring-aop.jar:3.1.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) [spring-aop.jar:3.1.1.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) [spring-tx.jar:3.1.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) [spring-aop.jar:3.1.1.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) [spring-aop.jar:3.1.1.RELEASE]
    at $Proxy108.insert(Unknown Source) at org.ace.insurance.system.common.insutype.service.InsuTypeService.addNewInsuType(InsuTypeService.java:33) [classes:]
    at org.ace.insurance.web.manage.system.ManageInsuTypeActionBean.addNewInsuType(ManageInsuTypeActionBean.java:52) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_23]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_23]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_23]
    at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_23]
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262) [jbossweb-7.0.13.Final.jar:]
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) [jboss-jsf-api_2.1_spec-2.0.5.Final.jar:2.0.
5.Final]
    ... 33 more
Caused by: java.lang.ClassNotFoundException: javax.enterprise.inject.spi.BeanManager from [Module "org.eclipse.persistence:main" from local module loader @4c5e1
76f (roots: D:\java\JBoss-7.1.1\modules)]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-17 17:33:43

最后,我得到了一个EntityListener类必须扩展DescriptorEventAdapter的解决方案。即使是EntityListener也需要注入spring组件,只需尝试如下所示。确保对spring / setter property使用static属性和setter property

代码语言:javascript
复制
@Component
public class IDInterceptor extends DescriptorEventAdapter {
    private static SomeSpringBean someSpringBean;

    @Autowired(required = true)
    @Qualifier("SomeSpringBean")
    public void setSomeSpringBean(SomeSpringBean bean) {
        someSpringBean = bean;
    }   

    @Override
    public void preInsert(DescriptorEvent event) {

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21827538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档