Weblogic 无法在静态字段中注入@PersistenceContext

Weblogic cannot inject @PersistenceContext in static field

我对 Weblogic 不是很熟练,这可能是一个愚蠢的问题,但我无法理解如果将持久化上下文注入到静态字段中,为什么部署会失败。

@PersistenceContext(unitName = "name")
private static EntityManager em;
java.lang.IllegalArgumentException: Field "em" in class "class_name" is defined as injection target with annotation @PersistenceContext, but "em" cannot be declared as static field.
    at weblogic.j2ee.dd.xml.validator.injectiontarget.BaseValidator.error(BaseValidator.java:132)
    at weblogic.j2ee.dd.xml.validator.injectiontarget.BaseValidator.error(BaseValidator.java:149)
    at weblogic.j2ee.dd.xml.validator.injectiontarget.J2EEValidator.checkModifier(J2EEValidator.java:28)
    at weblogic.j2ee.dd.xml.validator.AbstractAnnotationValidator.checkField(AbstractAnnotationValidator.java:57)
    at weblogic.j2ee.dd.xml.validator.AbstractAnnotationValidator.validate(AbstractAnnotationValidator.java:26)
    at weblogic.j2ee.dd.xml.validator.AnnotationValidatorVisitor.visitInjectionTargetBean(AnnotationValidatorVisitor.java:48)
    at weblogic.j2ee.dd.xml.validator.AnnotationValidatorVisitor.visit(AnnotationValidatorVisitor.java:25)
    at weblogic.descriptor.internal.AbstractDescriptorBean.accept(AbstractDescriptorBean.java:1448)
    at weblogic.descriptor.internal.AbstractDescriptorBean.accept(AbstractDescriptorBean.java:1452)
    at weblogic.descriptor.internal.AbstractDescriptorBean.accept(AbstractDescriptorBean.java:1452)
    at weblogic.descriptor.internal.AbstractDescriptorBean.accept(AbstractDescriptorBean.java:1452)
    at weblogic.descriptor.internal.AbstractDescriptorBean.accept(AbstractDescriptorBean.java:1452)
    at weblogic.j2ee.dd.xml.BaseJ2eeAnnotationProcessor.validate(BaseJ2eeAnnotationProcessor.java:205)
    at weblogic.j2ee.dd.xml.BaseJ2eeAnnotationProcessor.validate(BaseJ2eeAnnotationProcessor.java:197)
    at weblogic.ejb.container.metadata.EjbAnnotationProcessor.processAnnotations(EjbAnnotationProcessor.java:260)
    at weblogic.ejb.container.metadata.EjbDescriptorReaderImpl.processAnnotations(EjbDescriptorReaderImpl.java:364)
    at weblogic.ejb.container.deployer.EJBMetadataHandler.processAnnotations(EJBMetadataHandler.java:164)
    at weblogic.ejb.container.deployer.EJBMetadataHandler.processAnnotations(EJBMetadataHandler.java:157)
    at weblogic.ejb.container.deployer.EJBModule.processAnnotations(EJBModule.java:175)
    at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:370)
    at weblogic.application.internal.ExtensibleModuleWrapper$PrepareStateChange.next(ExtensibleModuleWrapper.java:295)
    at weblogic.application.internal.ExtensibleModuleWrapper$PrepareStateChange.next(ExtensibleModuleWrapper.java:285)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.ExtensibleModuleWrapper.prepare(ExtensibleModuleWrapper.java:109)
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:100)
    at weblogic.application.internal.flow.ModuleStateDriver.next(ModuleStateDriver.java:192)
    at weblogic.application.internal.flow.ModuleStateDriver.next(ModuleStateDriver.java:187)
    at weblogic.application.utils.StateMachineDriver$ParallelChange.run(StateMachineDriver.java:83)
    at weblogic.work.ContextWrap.run(ContextWrap.java:46)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:670)
    at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)
    at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)
    at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)
    at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
    at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:644)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:415)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:355)

不应该static修饰符,使用non-static变量

@Vincenzo 和我是同事,所以我们会通知您他通过在 生产模式.

中配置 Weblogic 解决了这个问题

原因尚不清楚,但暂时无所谓,因为...它有效!