2011-04-23 85 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。