Mit Arquillian kann man elegant und einfach Teile von Java-EE-Anwendungen einem Integrationstest unterziehen. Der zu testende Anwendungsteil wird dabei mit Hilfe von ShrinkWrap paketiert:
@RunWith(Arquillian.class)
public class EjbRemoteTest {
@Deployment(testable = false)
public static JavaArchive createDeployment() {
JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "baselibs-jboss-test.jar");
archive.addClasses(UserInfoBean.class, UserInfo.class);
archive.addClasses(RemoteStringBean.class, RemoteString.class);
archive.addClasses(SystemStateBean.class, SystemState.class);
archive.addAsResource("META-INF/jboss-ejb3.xml");
return archive;
}
Dabei ist es wichtig, die zum Deployment passende Endung im Dateinamen zu verwenden – im Beispiel also .jar, da es ein EJB-Deployment ist. Tut man das nicht, wird ggf. nur ein Teil des paketierten Anwendungteils deployt. Würde man im Beispiel das Deployment nur “baselibs-jboss-test” nennen, wird ein JBoss 7.1.1 zwar die enthaltenen EJBs deployen, ignoriert aber den zusätzlichen Deskriptor “META-INF/jboss-ejb3.xml”, der u. a. Security-Einstellungen enthält. In der Folge würde z. B. ein angemeldeter User die EJBs als anonymer User aufrufen, was sicher nicht gewollt war und auch nicht der Situatuation in der späteren Anwendung entspricht.