2
我有一個包含這個bean如何解決JBOSS 6.0上ear文件之間的類加載問題?
@Stateless
public class ProjectServiceImpl implements ProjectServiceLocal, ProjectServiceRemote {
@Override
public List<Project> listProjects() {
Project project = new Project();
project.setId(0l);
project.setName("Foo");
return Arrays.asList(project);
}
}
第二耳文件有這個bean
@Stateless
public class EntryServiceImpl implements EntryServiceLocal, EntryServiceRemote {
@EJB(lookup="packagename/ProjectServiceImpl/local")
private ProjectServiceLocal projectService;
@Override
public List<Entry> listEntries() {
Project project = projectService.listProjects().get(0); // here happens the class cast exception
Entry entry = new Entry();
entry.setId(0l);
entry.setProject(project);
entry.setFrom(new Date());
entry.setTo(new Date());
return Arrays.asList(entry);
}
}
這是例外,我得到一個ear文件:
Exception in thread "main" javax.ejb.EJBException: java.lang.ClassCastException: packagename.dto.Project cannot be cast to packagename.dto.Project
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:183)
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:251)
at org.jboss.ejb3.tx2.impl.CMTTxInterceptor.required(CMTTxInterceptor.java:349)
我該如何解決這個?
我知道兩個ear文件都配置了不同的類加載器,但我不知道如何配置兩個類都具有相同的類加載器。
這是什麼rougly我在我的jboss-app.xml的
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE jboss-app
PUBLIC "-//JBoss//DTD J2EE Application 4.2//EN"
"http://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd\">
<jboss-app>
<loader-repository>
packagename:archive=ear1.ear
</loader-repository>
</jboss-app>
和
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE jboss-app
PUBLIC "-//JBoss//DTD J2EE Application 4.2//EN"
"http://www.jboss.org/j2ee/dtd/jboss-app_4_2.dtd\">
<jboss-app>
<loader-repository>
packagename:archive=ear2.ear
</loader-repository>
</jboss-app>
我還創建了一個的jboss-classloading.xml文件每隻耳朵:
<?xml version="1.0" encoding="UTF-8"?>
<classloading xmlns="urn:jboss:classloading:1.0" name="ear1.ear" domain="packagename">
</classloading>
and
<?xml version="1.0" encoding="UTF-8"?>
<classloading xmlns="urn:jboss:classloading:1.0" name="ear2.ear" domain="packagename">
</classloading>
但沒有任何工作。我找不到任何有用的文檔。
1.)我以這種方式認爲我定義所有具有相同域「packagename」的耳朵使用相同的類加載器? 2)把它放在通用庫文件中是不可能的問題 3)沒有隔離也是不可能的,還有其他耳朵依賴於它。 – Mauli 2011-04-02 19:59:51