2011-04-12 92 views
0

我想在Glassfish 3.1上使用EJB 3.1嵌入式EJBContainer進行集成 測試我的EJB。有一個課堂加載問題我無法弄清楚。如何爲Glassfish嵌入式EJBContainer + EclipseLink JPA設置JUnit測試?

我的ejbs被構建到dum-ejb.jar中。他們使用EclipseLink JPA。我還創建EJB客戶端jar dum-ejb-client.jar,同時嘗試解決類加載問題。客戶機jar包含EJB接口和實體類(通常是參數或返回值)。客戶端jar還包含很多不需要的類,可以放棄(但我不明白它是如何解決問題的)。

的問題是,既然做的EclipseLink編織字節碼的實體類,實體類不能在類路徑的時候了JUnit測試運行:http://www.java.net/forum/topic/glassfish/glassfish/embedded-glassfish-and-weaving

我能做到這一點,並配置類路徑,以便dum-不包括ejb.jar。如果我使用EJBContainer,以便將我的服務查找爲java.lang.Object,並通過反射調用它的方法,則測試將起作用。但當然,這不是我想寫我的測試。

典型的測試將是這樣的:

@Test 
    public void testInEJBContainer() throws Exception { 

     File ejbJarFile = new File("target/dum/dum-ejb.jar"); 

     Map props = new HashMap(); 
     props.put("org.glassfish.ejb.embedded.glassfish.instance.root", 
       "target/classes/instance-root"); 
     props.put(EJBContainer.MODULES, new File[]{ejbJarFile}); 
     EJBContainer container = EJBContainer.createEJBContainer(props); 

     CompanyService = (CompanyService) 
container.getContext().lookup("java:global/dum/CompanyServiceImpl"); 
     log.info("result of findAll() " + service.findAll(false)); 
    } 

我怎麼可能,如果CompanyService界面運行測試,並返回公司實體類不能在類路徑?

即使dum-ejb.jar不在類路徑中,並且dum-ejb-client.jar是,EclipseLink編織也會中斷。

這不正是EJBContainer的典型用例,難道不應該有一個簡單的解決方案嗎?

回答

0

原來我從Maven Ear項目運行EJBContainer以來遇到了類加載問題。

當我從Maven ejb項目本身運行它時,沒有這樣的問題,並且EJBContainer很容易使用。

相關問題