2012-11-30 74 views
0

我得到這個錯誤:EJB - 在實體管理器的依賴注入錯誤

... 32 more 
Caused by: java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManagerFactory. 

我想要做的就是創建一個實體類用戶和會話Bean來訪問用戶..

我當我執行出現錯誤:

User result = null; 
String q = "SELECT user FROM " + User.class.getName() + " user WHERE user.username LIKE :username"; 
Query query = entityManager.createQuery(q).setParameter("username", username); 
List<User> users = query.getResultList(); 
if (users.size() > 0) { 
    result = users.get(0); 
    System.out.println(result); 
} 

的persistence.xml看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.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_2_0.xsd"> 
    <persistence-unit name="DS3-ejbPU" transaction-type="JTA"> 
    <jta-data-source>db_ds_hw3</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties/> 
    </persistence-unit> 
</persistence> 

編輯1:

注入代碼:

@PersistenceContext(unitName = "DS3-ejbPU") 
    private EntityManager em; 
+0

添加註入EntityManager的代碼部分。 –

+0

看起來不錯。您可以嘗試ping(通過Glassfish)您的JDBC連接池「db_ds_hw3」。 –

回答

0

你最有可能運行到已被固定在4.0版本(尚未公佈)一GlassFish bug in redeployment

目前,正如上述鏈接所述,解決方法是取消部署 - 重新部署應用程序。


相關

java.lang.IllegalStateException: Attempting to execute an operation on a closed EntityManagerFactory

+0

我正在使用GlassFish。我試圖取消部署和重新部署,並得到同樣的問題。 –

+0

可能發生這種情況的原因是,當EMF關閉時,已經太晚了,您必須重新啓動GlassFish。當EMF還活着時,解決方法就可以工作。 – perissf

0

我碰到這樣的錯誤太多,重裝幫助了我。在控制檯中輸入:

asadmin restart-domain