Gdzie mogę znaleźć kompletny przykład wtyczki Maven Cargo do testów EJB?

Do testów niektórych małych aplikacji korporacyjnych JBoss chciałbym używać JUnit iWtyczka Maven Cargo. (Wiem, że istnieje również JSFUnit, ale najpierw chciałbym przyjrzeć się bliżej Cargo.)

Czy dostępny jest prosty przykład online, który mógłbym wykorzystać jako odniesienie do uruchomienia testu JUnit, który wywołuje operację EJB przy użyciu JBoss (4.2 lub 5.1) przy użyciu wtyczki Maven Cargo? Znalazłem kilka dobrych wprowadzeń do konfiguracji, ale otrzymuję komunikaty o błędach w wyszukiwaniu EJB, więc pomocne byłoby sprawdzenie, jak powinno być używane.

Oto kod testowy przy użyciu InitialContext:

public void testEcho() {
   assertEquals("Echo Echo", lookupEchoBeanRemote().Echo("Echo"));
}

private EchoBeanRemote lookupEchoBeanRemote() {
    try {
        Context c = new InitialContext();
        return (EchoBeanRemote) c.lookup("EchoBean/remote");
    } catch (NamingException ne) {
        Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
        throw new RuntimeException(ne);
    }
}

Który daje ten błąd:

testEcho(de.betabeans.Echo2Test)  Time elapsed: 0.885 sec  <<< ERROR!
java.lang.reflect.UndeclaredThrowableException
    at $Proxy3.Echo(Unknown Source)
    at de.betabeans.Echo2Test.testEcho(Echo2Test.java:17)
Caused by: java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
    at java.security.AccessController.doPrivileged(Native Method)
    at org.jboss.ejb3.security.client.SecurityActions.createSecurityContext(SecurityActions.java:657)
    at org.jboss.ejb3.security.client.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:59)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
    at $Proxy4.invoke(Unknown Source)
    at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
    at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
    ... 28 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.jboss.security.SecurityContextFactory.createSecurityContext(SecurityContextFactory.java:117)
    at org.jboss.security.SecurityContextFactory.createSecurityContext(SecurityContextFactory.java:76)
    at org.jboss.ejb3.security.client.SecurityActions$1.run(SecurityActions.java:662)
    ... 38 more
Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/security/jacc/PolicyContextException
    at java.lang.ClassLoader.defineClass1(Native Method)

Jeśli korzystam z adnotacji EJB

@EJB(beanInterface=EchoBeanRemote.class,mappedName="EchoBean/remote")
private EchoBeanRemote newSessionBean;

public Echo3Test(String testName) {
    super(testName);
}

public void testEcho() {
   assertEquals("Echo Echo", newSessionBean.Echo("Echo"));
}

Wynik testu to

testEcho(de.betabeans.Echo3Test)  Time elapsed: 0.001 sec  <<< ERROR!
java.lang.NullPointerException
    at de.betabeans.Echo3Test.testEcho(Echo3Test.java:20)

jndi.properties znajduje się w folderze głównym jar EJB i zawiera następujące wiersze:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://localhost:1099
### The TimedSocketFactory connection timeout in milliseconds (0 == blocking) 
jnp.timeout=0
### The TimedSocketFactory read timeout in milliseconds (0 == blocking) 
jnp.sotimeout=0

Kod źródłowy fasoli to

package de.betabeans;

import javax.ejb.Remote;

@Remote
public interface EchoBeanRemote {
    String Echo(final String in);
}
package de.betabeans;

import javax.ejb.Stateless;

@Stateless
public class EchoBean implements EchoBeanRemote {
    public String Echo(final String in) {
        return in + " " + in;
    }
}

Przetestowałem również aplikację internetową, która może wywoływać EJB bez problemów - w obie strony, za pomocą InitialContext lub adnotacji. Ostrzeżeniem, które otrzymałem podczas wdrażania aplikacji internetowej, było

WARN [MappedReferenceMetaDataResolverDeployer] W JBossWebMetaData istnieją nierozwiązane odwołania: [# web-app: AnnotatedEJBReferenceMetaData {name = de.betabeans.Echo3Servlet / echoBean, ejb-ref-type = null, link = null, ignore-dependecy = false, mapped / jndi- name = EchoBean / remote, resolved-jndi-name = null, beanInterface = interfejs de.betabeans.EchoBeanRemote}, # web-app: AnnotatedEJBReferenceMetaData {name = NewServlet / newSessionBean, ejb-ref-type = null, link = null, ignore -dependecy = false, mapowane / jndi-name = NewSessionBean / remote, resolved-jndi-name = null, beanInterface = interfejs de.betabeans.NewSessionBeanRemote}] 12: 26: 11,770 INFO

Wszystkie testy przeprowadzono z JBoss 5.1.0.GA na dwóch różnych systemach kompilacji.

Przesłałem teraz cały projekt Mavenhttp://www.mikejustin.com/download/JBossSimpleEJBApp-ejb-test.zip

questionAnswers(1)

yourAnswerToTheQuestion