我的项目运行在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>我试图在互联网上找到如何配置这个文件,但没有找到问题可能在哪里。也许有人有任何想法或教程,手册链接,可以帮助我更好地理解这个野兽是如何工作的=)
发布于 2013-07-04 14:11:55
资源注入不是在bean创建期间发生的,而是在bean被容器注入时发生的。换句话说,资源是在bean构造函数被调用之后注入的。
您需要在带有@PostConstruct注释的方法中执行测试
@PostConstruct
public void init() {
if (this.em == null) {
System.err.println("NULL");
}
}正如链接的JavaDoc中所写的:
在依赖项注入完成后需要执行的方法上使用PostConstruct注释
根据下面的评论编辑。
如果您碰巧试图通过bean的构造函数来实例化bean,注入将会失败。使用Enterprise Java bean(如JNDI bean)的方法是通过@EJB注释的方式注入它们,或者使用@Stateless查找。请注意,必须将bean注入另一个容器管理的对象(例如JSF bean或CDI bean )。
有关更多参考信息,请参阅this link。
发布于 2013-07-04 23:45:10
我最近也遇到了同样的问题。
我们需要创建对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>https://stackoverflow.com/questions/17461276
复制相似问题