0

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

  • 爪哇 7
  • JSF 最新
  • 马文
  • 带有 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 模块中,我使用实体管理器的类所在的位置。

4

1 回答 1

0

好吧,最后我发现了问题。在 glassfish 日志中向上滚动显示 nullpointer 异常是在较早的异常之后出现的,即“未选择数据库”。问题不在于代码,而在于我创建的 Glassfish JDBC 连接。我的 ping 工作正常,我认为连接正常。但您不仅需要添加 mysql 端口和用户名和密码。您还必须更改默认 URL 并添加(连接池中的其他属性)以下值:

jdbc:mysql://localhost:3306/yourdatabase

之前默认为:jdbc:mysql://:3306/

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

于 2014-04-13T12:28:48.340 回答