我想在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的典型用例,難道不應該有一個簡單的解決方案嗎?