SSB中的EntityManager为null

时间:2014-04-01 08:17:53

标签: java nullpointerexception entitymanager ejb-3.2

我正在尝试更新最初用Java6编写的企业应用程序的小型alpha版本。现在我想用:

  • Java 7
  • JSF最新
  • 的Maven
  • 使用Glassfish的EJB 3.2

到目前为止,我可以毫无问题地在Glassfish上部署我的EAR文件。我的webapp可以加载,第一个JSF页面导航很好。而我的JSF支持bean似乎也加载了我的无状态会话bean。调试显示我,我可以从一个SSB到另一个来自我的支持bean。我遗漏的最后一步也是最后一步是我的实体经理和持久性。

我的课程已被@Stateless取消,我正在使用:

@PersistenceContext(unitName = "myProjectPU")
    protected EntityManager entityManager;

但实体经理是空的:(

我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
  xmlns="http://xmlns.jcp.org/xml/ns/persistence"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
  http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="myProjectPU" transaction-type="JTA">
  <jta-data-source>jdbc/myProject</jta-data-source>
    <properties>
      <property name="javax.persistence.schema-generation.create-database-schemas" value="true" />
    </properties>
    </persistence-unit>
  </persistence>

有什么想法吗? persistence.xml是否必须在ear maven模块中?现在它在ejb maven模块中,我的类使用实体管理器。

1 个答案:

答案 0 :(得分:0)

最后我发现了问题。在glassfish日志中向上滚动显示,nullpointer异常后跟一个先前的异常,该异常表示“未选择数据库”。问题不在代码中,而是在我制作的Glassfish JDBC Connection中。我的ping运行正常,我认为连接正常。但你不必只添加mysql端口和用户名和密码。您还必须更改默认URL并添加(连接池中的其他属性)以下值:

JDBC:MySQL的://本地主机:3306 / yourdatabase

在默认为: JDBC:MySQL的://:3306 /

还要注意有两个参数,Url和URL!之后不仅ping成功,而且与实体管理器的数据库连接也正常。 :(