2011-04-23 58 views
0

我目前遇到的問題是我的entityManager在執行部署在耳朵中的web應用程序執行期間未能注入。Weblogic Ear部署未能注入實體管理器

耳的設置如下:

/META-INF -application.xml(EJBJar + WAR)
-MANIFEST.MF
-weblogic-application.xml中(目前只是默認一個蝕 生成)
/APP-INF
-lib
-EJBClientJar(接口+的POJO)

-other jars 
-classes 

EJBJar
/META-INF
-persistence.xml
/SRC
-Annotated類
WAR
- 服務類

類如下:
DAO inside EJBJar

@Stateless(mappedName="AwesomeBean") 
public class Awesome implements AwesomeRemote //AwesomeRemote in EJBClientJar 
{  
    @PersistenceContext 
    EntityManager em; 
} 


public class AwesomeService //Inside WAR 
{ 
    AwesomeRemote = context.lookup (Awesome.path.to.AwesomeRemote) //Is found 
} 

調用堆棧如下:
戰爭 - > EJBClientJar - > EJBJar
在EJB jar上實體管理器爲空。問題是如何確保PersistenceContext被注入? AwesomeRemote接口上的JNDI查找成功。界面上沒有註釋。

+0

請嘗試在PersistenceContext註釋中指定unitName? – 2011-04-29 22:47:59

+0

也失敗了,謝謝你的建議 – Woot4Moo 2011-04-30 14:31:12

+0

你怎麼知道它是空的?例外?你可以發佈嗎? – 2011-05-02 19:13:38

回答

0

這可能是由於您嘗試注入POJO類而不是託管組件。你可以嘗試將它標記爲@Stateless和public並檢查它是否有效? 對於簡單測試,您還可以添加@WebService註釋並使用SoapUI調用您的bean。

+0

仍然是同樣的問題,用@Stateless – Woot4Moo 2011-04-28 02:27:59

+0

你有沒有修改它爲public?它是否在JNDI樹中註冊? – jgrabowski 2011-04-28 06:47:27

+0

它在JNDI樹中,它是公共的。原始帖子的變化。謝謝grabowski – Woot4Moo 2011-04-28 15:25:00

0

您應該閱讀有關「包裝」ejb規範的一部分。

這個結構應該是足夠的工作:

/ 
    /lib 
     EJBClientJar (interfaces + pojos) 
    /META-INF 
     persistence.xml 
     application.xml 
    EJBJar.jar 
    WAR.war 

由於一些格式丟了,我不知道什麼是不是在你的右邊。

如果這仍然不起作用,請嘗試刪除上面唯一棘手的部分:將EJBClientJar中的所有類放入根目錄中。您只需擁有最簡單的EAR包裝,它就可以工作。另外,如果您不在Web應用程序外使用會話bean,則可以使用@Local而不是@Remote。