Jakarta ee EntityManager未注入MDB(尽管其他资源已被注入)
在下面的代码中,队列被正确注入,但实体管理器没有正确注入。我对JavaEE不是很有经验,我不知道为什么它不起作用。任何提示都将不胜感激 我使用OpenEJB作为应用程序容器。使用下面的代码,正确注入Jakarta ee EntityManager未注入MDB(尽管其他资源已被注入),jakarta-ee,entitymanager,Jakarta Ee,Entitymanager,在下面的代码中,队列被正确注入,但实体管理器没有正确注入。我对JavaEE不是很有经验,我不知道为什么它不起作用。任何提示都将不胜感激 我使用OpenEJB作为应用程序容器。使用下面的代码,正确注入队列和连接工厂;但是,EntityManager始终为null。据我所知,可以在托管实体(即Bean)中使用@PersistenceContext来获取它。还是需要在ejb-jar.xml文件中定义它 下面是我的代码的样子: MDB: public class ServerBean implemen
队列
和连接工厂
;但是,EntityManager
始终为null
。据我所知,可以在托管实体(即Bean)中使用@PersistenceContext
来获取它。还是需要在ejb-jar.xml文件中定义它
下面是我的代码的样子:
MDB:
public class ServerBean implements MessageListener {
@Resource
private ConnectionFactory factory;
@Resource(name = "queue")
private Queue queue;
@PersistenceContext
private EntityManager em;
//methods...
}
ejb-jar.xml:
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" metadata-complete="true">
<enterprise-beans>
<message-driven>
<ejb-name>ServerBean</ejb-name>
<ejb-class>foo.ServerBean</ejb-class>
<messaging-type>javax.jms.MessageListener</messaging-type>
<activation-config>
<activation-config-property>
<activation-config-property-name>destination</activation-config-property-name>
<activation-config-property-value>ServerBean</activation-config-property-value>
</activation-config-property>
<activation-config-property>
<activation-config-property-name>destinationType</activation-config-property-name>
<activation-config-property-value>javax.jms.Queue</activation-config-property-value>
</activation-config-property>
</activation-config>
<resource-ref>
<res-ref-name>java:comp/env/foo.ServerBean/factory</res-ref-name>
<res-type>javax.jms.ConnectionFactory</res-type>
<injection-target>
<injection-target-class>foo.ServerBean</injection-target-class>
<injection-target-name>factory</injection-target-name>
</injection-target>
</resource-ref>
<resource-env-ref>
<resource-env-ref-name>java:comp/env/queue</resource-env-ref-name>
<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
<mapped-name>queue</mapped-name>
<injection-target>
<injection-target-class>foo.ServerBean</injection-target-class>
<injection-target-name>queue</injection-target-name>
</injection-target>
</resource-env-ref>
</message-driven>
</enterprise-beans>
</ejb-jar>
服务器豆
foo.ServerBean
javax.jms.MessageListener
目的地
服务器豆
目的型
javax.jms.Queue
java:comp/env/foo.ServerBean/factory
javax.jms.ConnectionFactory
foo.ServerBean
工厂
java:comp/env/queue
javax.jms.Queue
队列
foo.ServerBean
队列
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="fooUnit" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>foo_ds</jta-data-source>
<class>foo.model.Bar</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.driver_class" value="org.h2.Driver" />
<property name="hibernate.connection.url" value="jdbc:h2:/tmp/database/dst;AUTO_SERVER=TRUE;MVCC=true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="javax.persistence.validation.mode" value="NONE"/>
<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory" />
</properties>
</persistence-unit>
</persistence>
org.hibernate.ejb.HibernatePersistence
食物
foo.model.Bar
假的
@PersistenceContext(unitName=“fooounit”)私有实体管理器em;(或删除persistence.xml文件中的name属性)