我的项目在Glassfish 3.0.1上运行 我试图使用@PersistenceContext注释来注入EntityManager。这是我的代码:
@Stateless
public class UserBean implements UserBeanRemote {
@PersistenceContext(unitName = "RHDManagementPlatformPU")
private EntityManager em;
public UserBean() {
if (this.em == null) {
System.err.println("NULL");
}
}
...
}
在控制台中我收到错误消息" NULL"。我已经看过5-6个与我相似的主题。但我唯一理解的可能是问题在于我的persistence.xml。这是它:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="RHDManagementPlatformPU" transaction-type="JTA">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<jta-data-source>dev_magi_entities</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
我试图在互联网上找到如何配置此文件,但未找到问题所在。也许有人有任何想法或教程,手动链接可以帮助我更好地理解这种野兽如何工作=)
答案 0 :(得分:4)
在bean创建过程中不会发生资源注入,但是当容器注入bean时。换句话说,在调用bean构造函数之后注入资源。
您需要在使用@PostConstruct
注释的方法中执行测试:
@PostConstruct
public void init() {
if (this.em == null) {
System.err.println("NULL");
}
}
在链接的JavaDoc中写道:
PostConstruct注释用于需要在依赖注入完成后执行的方法
编辑基于以下评论。
如果您有任何机会尝试自己实例化bean,通过其构造函数,注入将失败。使用Enterprise Java Bean(如@Stateless
bean)的方法是通过@EJB
注释注入它们,或者使用JNDI查找。请注意,必须将bean注入另一个容器管理对象(例如JSF bean或CDI bean)。
有关详细信息,请参阅this link。
答案 1 :(得分:0)
我最近遇到了同样的问题。
我们需要为jdbc资源创建JNDI引用。
这是我的附加配置。
的glassfish-web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD
GlassFish Application Server 3.1 Servlet 3.0//EN"
"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
<session-config>
<session-manager />
</session-config>
<resource-ref>
<res-ref-name>java:app/env/mysql</res-ref-name>
<jndi-name>java:jdbc/mysql</jndi-name>
<!-- My JDBC Resource -->
</resource-ref>
<jsp-config />
</glassfish-web-app>
我的web.xml:
<data-source>
<name>java:app/env/mysql</name>
<class-name>com.mysql.jdbc.jdbc2.optional.MysqlDataSource</class-name>
<database-name>psi</database-name>
<user>user</user>
<password>pass</password>
</data-source>