2014-04-01 81 views
0

我正在嘗試更新最初用Java6編寫的企業應用程序的小型alpha版本。現在我想用:SSB中的EntityManager null

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

到目前爲止,我可以部署在Glassfish我EAR文件沒有問題。我的webapp可以加載,第一個JSF頁面導航很好。而且我的JSF支持bean似乎也可以加載我的無狀態會話bean。調試表明,我可以從一個SSB到另一個來自我的支持bean。我錯過的最後一步也是最後一步是我的實體管理器和持久性。

我的類annoated與@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模塊中,其中使用實體管理器的類位於其中。

+0

我通常有我的persistence.xml內使用它的模塊...還要確保它在這個路徑下 - > src \ main \ resources \ META-INF \ persistence.xml – Schokea

+0

謝謝,但多數民衆贊成在哪裏我的persistence.xml是。所以這似乎是有效的。我猜註釋是正確的,無狀態會話bean正在被加載罰款。還有什麼可能導致實體管理器爲空? – Arquillian

回答

0

好吧,最後我發現了這個問題。在glassfish日誌中滾動顯示,空指針異常後面跟着一個前面說的「沒有選定數據庫」的異常。問題不在代碼中,而是在我創建的Glassfish JDBC連接中。我的ping工作正常,我認爲連接是好的。但是你不需要添加mysql端口和用戶名和密碼。還必須更改默認的URL,(在連接池附加屬性)添加以下值:

的jdbc:mysql的://本地主機:3306/yourdatabase

之前它被默認爲: 的jdbc:mysql的: //:3306/

還要注意有兩個參數,Url和URL!之後,不僅ping成功,而且與實體管理器的數據庫連接工作正常。 :(