java - 添加自定义事件监听器(Hibernate)会引发 org.hibernate.MappingException : Unable to instantiate specified event (save-update) listener class

标签 java hibernate jboss5.x

我正在尝试在我的项目中添加(更新,插入)的自定义事件监听器。以下是我的代码片段。

hibernate.cfg.xml 文件条目:

<event type="post-insert">
    <listener class="sample.org.app.MyProjectAdaptorHibEventListener"/>
</event>
<event type="save-update">
    <listener class="sample.org.app.MyProjectAdaptorHibEventListener"/>
</event>

和MyProjectAdaptorHibEventListener实现代码片段:

public class MyProjectAdaptorHibEventListener implements PostInsertEventListener,
    PostUpdateEventListener, PostDeleteEventListener,
    SaveOrUpdateEventListener {

private static final long serialVersionUID = 400000L;
private MyProjectAdaptorHibEventListenerUtil util;

public MyProjectAdaptorHibEventListener() {
    util = new MyProjectAdaptorHibEventListenerUtil();
    System.out.println("*************   MyProjectAdaptorHibEventListener loaded **************");
}

@Override
public void onPostDelete(PostDeleteEvent event) {
    util.objectChanged("DELETE", event.getEntity());

}

@Override
public void onPostUpdate(PostUpdateEvent event) {

    util.objectChanged("UPDATE", event.getEntity());

}

@Override
public void onPostInsert(PostInsertEvent event) {
    util.objectChanged("INSERT", event.getEntity());

}

@Override
public void onSaveOrUpdate(SaveOrUpdateEvent event)
        throws HibernateException {
    util.objectChanged("SAVEORUPDATE", event.getObject());

  }
}

和我的 MyProjectAdaptorHibEventListenerUtil 代码:

public class MyProjectAdaptorHibEventListenerUtil {

MyProjectAdaptorHibEventListenerUtil(){        
}

public void objectChanged(String event, Object object) {

    if (object instanceof AbstractDomainObject && ! object.getClass().getName().startsWith("edu.wustl.common.domain.Audit")) {
        long objId = ((AbstractDomainObject) object).getId();
        System.out.println("*********** " + event + " : " + object.getClass().getName()+ ":" + objId + " , value= " + object.toString());
        insertIntoDB(event,object.getClass().getName(),objId);
    }else{
       // System.out.println("*********** " + event + " : " + object.getClass().getName());
    }
  }
}

我不确定我的代码有什么问题。请建议我进行更改。我收到以下错误。

我正在使用 hibernate 3 Jboss- 5.1.0 GA Java - 1.6

错误日志:

14:02:43,092 INFO  [STDOUT] *************   MyProjectAdaptorHibEventListener loaded **************
    14:02:43,104 INFO  [STDOUT] ERROR 14:02:43,097 (DAOFactory) - Unable to instantiate specified event (save-update) listener class: edu.wustl.bms.MyProjectAdaptorHibEventListener
    org.hibernate.MappingException: Unable to instantiate specified event (save-update) listener class: edu.wustl.bms.MyProjectAdaptorHibEventListener
        at org.hibernate.cfg.Configuration.setListeners(Configuration.java:1539)
        at org.hibernate.cfg.Configuration.parseEvent(Configuration.java:1521)
        at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1452)
        at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
        at org.hibernate.cfg.Configuration.configure(Configuration.java:1405)
        at edu.wustl.dao.daofactory.DAOFactory.setConfiguration(DAOFactory.java:278)
        at edu.wustl.dao.daofactory.DAOFactory.buildSessionFactory(DAOFactory.java:195)
        at edu.wustl.dao.daofactory.ApplicationDAOPropertiesParser.parseDocument(ApplicationDAOPropertiesParser.java:143)
        at edu.wustl.dao.daofactory.ApplicationDAOPropertiesParser.getDaoFactoryMap(ApplicationDAOPropertiesParser.java:67)
        at edu.wustl.dao.daofactory.DAOConfigFactory.populateDaoFactoryMap(DAOConfigFactory.java:102)
        at edu.wustl.dao.daofactory.DAOConfigFactory.<init>(DAOConfigFactory.java:59)
        at edu.wustl.dao.daofactory.DAOConfigFactory.<clinit>(DAOConfigFactory.java:49)
        at edu.wustl.simplequery.bizlogic.QueryBizLogic.getQueryObjectNameTableNameMap(QueryBizLogic.java:129)
        at edu.wustl.simplequery.bizlogic.QueryBizLogic.initializeQueryData(QueryBizLogic.java:307)
        at edu.wustl.catissuecore.util.listener.CatissueCoreServletContextListener.initCatissueParams(CatissueCoreServletContextListener.java:127)
        at edu.wustl.catissuecore.util.listener.CatissueCoreServletContextListener.contextInitialized(CatissueCoreServletContextListener.java:97)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4393)
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
        at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
        at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
        at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
        at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
        at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
        at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
        at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
        at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
        at $Proxy38.start(Unknown Source)
        at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42)
        at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37)
        at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
        at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
        at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
        at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286)
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
        at org.jboss.system.ServiceController.doChange(ServiceController.java:688)
        at org.jboss.system.ServiceController.start(ServiceController.java:460)
        at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163)
        at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99)
        at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46)
        at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
        at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
        at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
        at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
        at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
        at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70)
        at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53)
        at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:361)
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
        at org.jboss.system.server.profileservice.repository.AbstractProfileService.activateProfile(AbstractProfileService.java:306)
        at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:271)
        at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461)
        at org.jboss.Main.boot(Main.java:221)
        at org.jboss.Main$1.run(Main.java:556)
        at java.lang.Thread.run(Thread.java:662)
    Caused by: java.lang.ArrayStoreException: edu.wustl.bms.MyProjectAdaptorHibEventListener
        at org.hibernate.cfg.Configuration.setListeners(Configuration.java:1536)
        ... 84 more
    14:02:43,108 INFO  [STDOUT] ERROR 14:02:43,107 (DAOFactory) - Problem while parsing hibernate configuration file.
    edu.wustl.dao.exception.DAOException: Problem while parsing hibernate configuration file.
        at edu.wustl.dao.util.DAOUtility.getDAOException(DAOUtility.java:348)
        at edu.wustl.dao.daofactory.DAOFactory.setConfiguration(DAOFactory.java:284)
        at edu.wustl.dao.daofactory.DAOFactory.buildSessionFactory(DAOFactory.java:195)
        at edu.wustl.dao.daofactory.ApplicationDAOPropertiesParser.parseDocument(ApplicationDAOPropertiesParser.java:143)
        at edu.wustl.dao.daofactory.ApplicationDAOPropertiesParser.getDaoFactoryMap(ApplicationDAOPropertiesParser.java:67)
        at edu.wustl.dao.daofactory.DAOConfigFactory.populateDaoFactoryMap(DAOConfigFactory.java:102)
        at edu.wustl.dao.daofactory.DAOConfigFactory.<init>(DAOConfigFactory.java:59)
        at edu.wustl.dao.daofactory.DAOConfigFactory.<clinit>(DAOConfigFactory.java:49)
        at edu.wustl.simplequery.bizlogic.QueryBizLogic.getQueryObjectNameTableNameMap(QueryBizLogic.java:129)
        at edu.wustl.simplequery.bizlogic.QueryBizLogic.initializeQueryData(QueryBizLogic.java:307)
        at edu.wustl.catissuecore.util.listener.CatissueCoreServletContextListener.initCatissueParams(CatissueCoreServletContextListener.java:127)
        at edu.wustl.catissuecore.util.listener.CatissueCoreServletContextListener.contextInitialized(CatissueCoreServletContextListener.java:97)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4393)
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)
        at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
        at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
        at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
        at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
        at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
        at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
        at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
        at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
        at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
        at $Proxy38.start(Unknown Source)
        at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42)
        at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37)
        at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
        at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
        at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
        at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286)
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
        at org.jboss.system.ServiceController.doChange(ServiceController.java:688)
        at org.jboss.system.ServiceController.start(ServiceController.java:460)
        at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163)
        at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99)
        at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46)
        at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
        at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
        at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
        at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
        at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
        at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
        at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70)
        at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53)
        at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:361)
        at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
        at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
        at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
        at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
        at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
        at org.jboss.system.server.profileservice.repository.AbstractProfileService.activateProfile(AbstractProfileService.java:306)
        at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:271)
        at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461)
        at org.jboss.Main.boot(Main.java:221)
        at org.jboss.Main$1.run(Main.java:556)
        at java.lang.Thread.run(Thread.java:662)
    Caused by: org.hibernate.MappingException: Unable to instantiate specified event (save-update) listener class: edu.wustl.bms.MyProjectAdaptorHibEventListener
        at org.hibernate.cfg.Configuration.setListeners(Configuration.java:1539)
        at org.hibernate.cfg.Configuration.parseEvent(Configuration.java:1521)
        at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1452)
        at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
        at org.hibernate.cfg.Configuration.configure(Configuration.java:1405)
        at edu.wustl.dao.daofactory.DAOFactory.setConfiguration(DAOFactory.java:278)
        ... 79 more
    Caused by: java.lang.ArraySt
    14:02:43,108 INFO  [STDOUT] oreException: edu.wustl.bms.MyProjectAdaptorHibEventListener
        at org.hibernate.cfg.Configuration.setListeners(Configuration.java:1536)
        ... 84 more

最佳答案

已编辑
我认为你的xml有问题。据我所知,没有事件类型: insert (至少在 hibernate v3.3 中没有),但有以下类型(以及需要实现的接口(interface)):

"auto-flush"- AutoFlushEventListener
"merge", MergeEventListener
"create", PersistEventListener
"create-onflush", PersistEventListener
"delete", DeleteEventListener
"dirty-check", DirtyCheckEventListener
"evict", EvictEventListener
"flush", FlushEventListener
"flush-entity", FlushEntityEventListener
"load", LoadEventListener
"load-collection", InitializeCollectionEventListener
"lock", LockEventListener
"refresh", RefreshEventListener
"replicate", ReplicateEventListener
"save-update", SaveOrUpdateEventListener
"save", SaveOrUpdateEventListener
"update", SaveOrUpdateEventListener
"pre-load", PreLoadEventListener
"pre-update", PreUpdateEventListener
"pre-delete", PreDeleteEventListener
"pre-insert", PreInsertEventListener
"pre-collection-recreate", PreCollectionRecreateEventListener
"pre-collection-remove", PreCollectionRemoveEventListener
"pre-collection-update", PreCollectionUpdateEventListener
"post-load", PostLoadEventListener
"post-update", PostUpdateEventListener
"post-delete", PostDeleteEventListener
"post-insert", PostInsertEventListener
"post-commit-update", PostUpdateEventListener
"post-commit-delete", PostDeleteEventListener
"post-commit-insert", PostInsertEventListener
"post-collection-recreate", PostCollectionRecreateEventListener
"post-collection-remove", PostCollectionRemoveEventListener
"post-collection-update", PostCollectionUpdateEventListener

所以我认为你应该使用“插入后”,因为这种类型要求你的监听器实现 PostInsertEventListener(你实现的)


我发现您收到的此异常的根本原因是 java.lang.ArrayStoreException,正如 javadoc 所述,它是

thrown to indicate that an attempt has been made to store the wrong type of object into an array of objects. For example, the following code generates an ArrayStoreException:

    Object x[] = new String[3];
    x[0] = new Integer(0);

请提供MyProjectAdaptorHibEventListener的来源

关于java - 添加自定义事件监听器(Hibernate)会引发 org.hibernate.MappingException : Unable to instantiate specified event (save-update) listener class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646111/

相关文章:

java - 将复杂的 SQL 转换为 HQL?

java - JBoss任务调度: pass argument to method

java - 删除Java中的临时文件

java - 如何合并单个sql表中两条记录的相同字段

android - Android Studio-添加.jar库

java - properties.getProperty ("queryLocation")返回 null

java - 出现异常 : java. util.ServiceConfigurationError

java - 获取非servlet中的图像路径

java - 秒表取消暂停不起作用

java - 使用 web.xml 在 Tomcat 8 上设置自定义过滤器