捆绑更新需要重新启动karaf

时间:2015-09-08 06:54:55

标签: java hibernate osgi apache-karaf

当更新使用Hibernate的特定bundle时,会发生持久异常:

java.lang.reflect.UndeclaredThrowableException
        at com.sun.proxy.$Proxy71.persist(Unknown Source)
        at com.aurimas.edi.persistence.service.impl.Hl7StagingAreaServiceImpl.persistHl7Message(Hl7StagingAreaServiceImpl.java:37)[249:com.aurimas.edi.osgi-adapter-bi-sa-db:1.0.0.SNAPSHOT]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_60]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_60]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_60]
        at java.lang.reflect.Method.invoke(Method.java:497)[:1.8.0_60]
        at org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)
        at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)
        at com.aurimas.edi.persistence.service.impl.$Hl7StagingAreaServiceImpl1100807931.persistHl7Message(Unknown Source)[249:com.aurimas.edi.osgi-adapter-bi-sa-db:1.0.0.SNAPSHOT]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_60]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_60]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_60]
        at java.lang.reflect.Method.invoke(Method.java:497)[:1.8.0_60]
        at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:167)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.directvm.DirectVmProcessor.process(DirectVmProcessor.java:55)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.directvm.DirectVmProducer.process(DirectVmProducer.java:55)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:120)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.directvm.DirectVmProcessor.process(DirectVmProcessor.java:55)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.directvm.DirectVmProducer.process(DirectVmProducer.java:55)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:120)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:423)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:211)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:175)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187)[76:org.apache.camel.camel-core:2.14.0]
        at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:114)[76:org.apache.camel.camel-core:2.14.0]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_60]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)[:1.8.0_60]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)[:1.8.0_60]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)[:1.8.0_60]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_60]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_60]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_60]
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_60]
        at java.lang.reflect.Method.invoke(Method.java:497)[:1.8.0_60]
        at org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManagerHandler.invoke(JTAEntityManagerHandler.java:185)
        ... 53 more
Caused by: java.lang.reflect.UndeclaredThrowableException
        at com.sun.proxy.$Proxy75.persist(Unknown Source)
        ... 57 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_60]
        at java.lang.reflect.Method.invoke(Method.java:497)[:1.8.0_60]
        at org.apache.aries.jpa.container.impl.EntityManagerProxyFactory$EMHandler.invoke(EntityManagerProxyFactory.java:31)
        ... 58 more
Caused by: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.aurimas.edi.entity.message.HL7Message.id
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)[142:org.hibernate.entitymanager:4.3.6.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)[142:org.hibernate.entitymanager:4.3.6.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)[142:org.hibernate.entitymanager:4.3.6.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1187)[142:org.hibernate.entitymanager:4.3.6.Final]
        ... 62 more
Caused by: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.aurimas.edi.entity.message.HL7Message.id
        at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:60)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:346)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:4746)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:4465)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:243)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.event.internal.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:511)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:116)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:811)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:784)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789)[141:org.hibernate.core:4.3.6.Final]
        at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181)[142:org.hibernate.entitymanager:4.3.6.Final]
        ... 62 more
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.aurimas.edi.entity.message.HL7Message.id to com.aurimas.edi.entity.message.HL7Message
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)[:1.8.0_60]
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)[:1.8.0_60]
        at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)[:1.8.0_60]
        at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)[:1.8.0_60]
        at java.lang.reflect.Field.get(Field.java:393)[:1.8.0_60]
        at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get(DirectPropertyAccessor.java:57)[141:org.hibernate.core:4.3.6.Final]
        ... 73 more

重新启动Karaf后,这个问题就消失了,并且仍然存在。

我不想每次都重启karaf。

我发现在我的捆绑更新后,我需要执行以下步骤:

  1. 刷新hibernate-osgi bundle
  2. 重启我的包
  3. 然后一切都开始工作了,但我不想每次刷新hibernate-osgi并重启我的包。

    我使用的是Apache Karaf 3.0.3,Hibernate 4.3.6,Java 1.8.0_60。

2 个答案:

答案 0 :(得分:1)

请注意,这在Hibernate ORM OSGi 4.x和5.0.x中是绝对可以预料到的。重新启动应用程序包对hibernate-osgi和hibernate-core造成了灾难性的后果。在https://hibernate.atlassian.net/browse/HHH-9818得到纠正之前(我们将尽快处理),Hibernate ORM OSGi应该被视为静态,而不是动态地对OSGi捆绑事件做出反应。

答案 1 :(得分:0)

你需要对hibernate-bundle进行刷新,因为它不知道对更新的bundle的更改,它仍然保留对旧bundle的引用。因此,更新始终还需要刷新其他包。 这是设计为更新只是更新Bundle本身,但不会触发解析所有其他依赖项的“更新”。因此,您必须使用refresh命令自行触发解决捆绑包的“更新”。这可以使用hibernate-bundle的ID或仅使用“refresh”来完成。第二个将更新您已安装的所有软件包的解析。