Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee EntityManager注入->;空指针异常_Jakarta Ee_Jpa_Java Ee 6_Cdi - Fatal编程技术网

Jakarta ee EntityManager注入->;空指针异常

Jakarta ee EntityManager注入->;空指针异常,jakarta-ee,jpa,java-ee-6,cdi,Jakarta Ee,Jpa,Java Ee 6,Cdi,我的项目正在Glassfish 3.0.1上运行 我正在尝试使用@PersistenceContext注释注入EntityManager。这是我的密码: @Stateless public class UserBean implements UserBeanRemote { @PersistenceContext(unitName = "RHDManagementPlatformPU") private EntityManager em; public UserBea

我的项目正在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>

oracle.toplink.essentials.PersistenceProvider
开发博士实体
假的

我试图在internet上找到如何配置此文件,但没有找到问题所在。也许有人有什么想法或教程、手册链接可以帮助我更好地理解beast是如何工作的=)

资源注入不是在bean创建期间发生的,而是在容器注入bean时发生的。换句话说,资源是在bean构造函数被调用之后注入的

您需要在带有以下注释的方法中执行测试:

如链接的JavaDoc中所述:

PostConstruct注释用于依赖项注入完成后需要执行的方法


根据下面的评论进行编辑

如果您试图自己通过其构造函数实例化bean,那么注入将失败。使用企业Java bean(如
@Stateless
bean)的方法是通过
@EJB
注释注入它们,或者使用JNDI查找。请注意,必须将bean注入另一个容器管理的对象(例如JSFbean或CDIBean)


请参阅以获取进一步参考。

资源注入不会在bean创建期间发生,而是在容器注入bean时发生。换句话说,资源是在bean构造函数被调用之后注入的

您需要在带有以下注释的方法中执行测试:

如链接的JavaDoc中所述:

PostConstruct注释用于依赖项注入完成后需要执行的方法


根据下面的评论进行编辑

如果您试图自己通过其构造函数实例化bean,那么注入将失败。使用企业Java bean(如
@Stateless
bean)的方法是通过
@EJB
注释注入它们,或者使用JNDI查找。请注意,必须将bean注入另一个容器管理的对象(例如JSFbean或CDIBean)


请参阅以获取更多参考。

我最近也遇到了同样的问题

我们需要创建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>

java:app/env/mysql
java:jdbc/mysql
和my 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>

java:app/env/mysql
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
防扩散安全倡议
用户
通过

我最近也遇到了同样的问题

我们需要创建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>

java:app/env/mysql
java:jdbc/mysql
和my 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>

java:app/env/mysql
com.mysql.jdbc.jdbc2.optional.MysqlDataSource
防扩散安全倡议
用户
通过

我明白了。它可以工作,但我现在看不到注入EntityManager的好处,因为我不能在其他函数中使用它。我的类有几个函数,每个函数都使用EntityManager。也许整个类都有某种注释,或者我确实很好地使用了EntityManager注入?我明白了。它可以工作,但我现在看不到注入EntityManager的好处,因为我不能在其他函数中使用它。我的类有几个函数,每个函数都使用EntityManager。也许整个类都有某种注释,或者也许我确实很好地使用了EntityManager注入?对不起,我不知道在JBoss中该怎么做对不起,我不知道在JBoss中该怎么做