Cheesus が提供する方法を使用できます。既存の EAR を扱うときは、テストを実行する WAR を、他のテスト EJB と一緒に特別な JAR に入れた実際のテストから分離することを好みます。私の展開は次のようになります。
@Deployment
public static EnterpriseArchive createDeployment() {
String path = System.getProperty(EAR_PATH);
File f = new File(path);
EnterpriseArchive ear = ShrinkWrap.createFromZipFile(EnterpriseArchive.class, f);
final JavaArchive foobarEjb = ShrinkWrap.create(JavaArchive.class, "foobarEjb.jar");
foobarEjb.addClasses(
MyTest1.class,
MyTest2.class);
ear.addAsModule(foobarEjb);
final WebArchive war = ShrinkWrap.create(WebArchive.class, "test.war")
.addAsWebInfResource("WEB-INF/web.xml")
.addAsWebResource("index.xhtml");
ear.addAsModule(Testable.archiveToTest(war));
modifyApplicationXML(ear);
modifyJBossDeploymentStructure(ear);
return ear;
}
application.xml
およびを変更するメソッドに注意してくださいjboss-deployment-structure.xml
。JAR を EAR 内の EjbModule として適切に初期化するには、これらが必要です。
変更方法の例application.xml
:
private static void modifyApplicationXML(EnterpriseArchive ear) {
Node node = ear.get("META-INF/application.xml");
DescriptorImporter<ApplicationDescriptor> importer = Descriptors.importAs(ApplicationDescriptor.class, "test");
ApplicationDescriptor desc = importer.fromStream(node.getAsset().openStream());
String xml = desc.exportAsString();
// remove lib definition
xml = xml.replaceAll("<library-directory>.*<\\/library-directory>", "");
desc = (ApplicationDescriptor) importer.fromString(xml);
// append foobar test ejbs
desc.ejbModule("foobarEjb.jar");
// append test war
desc.webModule("test.war", "/test");
// append lib definition
desc.libraryDirectory("lib/");
Asset asset = new StringAsset(desc.exportAsString());
ear.delete(node.getPath());
ear.setApplicationXML(asset);
}