我正在尝试在我的项目中为(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
答案 0 :(得分:2)
<强> EDITED 强>
我认为你的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
所以我认为你应该使用&#34; post-insert&#34;因为这种类型会使你的监听器重新实现PostInsertEventListener(你实现的那个)
<强> OLD 强>
我看到你收到的这个异常的根本原因是java.lang.ArrayStoreException,而作为javadoc状态,它是
抛出表示已尝试存储错误 对象类型为对象数组。例如,以下内容 代码生成一个ArrayStoreException:
Object x[] = new String[3]; x[0] = new Integer(0);
请提供MyProjectAdaptorHibEventListener
的来源