2

我正在尝试在我的项目中为 (UPDATE,INSERT) 添加自定义事件侦听器。以下是我的代码片段。

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
4

1 回答 1

3

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

"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

所以我认为你应该使用“post-insert”,因为这种类型要求你的监听器实现 PostInsertEventListener(你实现的那个)

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

抛出以指示已尝试将错误类型的对象存储到对象数组中。例如,以下代码生成 ArrayStoreException:

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

请提供 MyProjectAdaptorHibEventListener 的来源

于 2012-07-25T09:05:39.687 回答