-
1. Re: ejb test never gets executed
dan.j.allen Oct 28, 2010 12:57 AM (in response to iapazmino)Where is your @Test method? Do you have one? The @Test method is the actual test code.
The purpose of the @Deployment method is to create a deployable archive, in your case an EJB-JAR. That contains the code you want to test. Unlike a regular JUnit test, Arquillian doesn't just look at the whole classpath for code to test. It looks in the deployment.
See this example to help you get started: Testing an EJB
-
2. Re: ejb test never gets executed
iapazmino Oct 28, 2010 1:19 AM (in response to dan.j.allen)that's actually the example I used as a guide. Sure, I have a @Test method:
@Test
public void createEmployee() throws SQLException {
assertNotNull("Service wasn't injected. ", employeeService);...
employeeService.save(employee);
assertNotNull("Employee id wasn't assigned. ", employee.getEmployeeId());
log.info("employee id = " + employee.getEmployeeId());
} -
3. Re: ejb test never gets executed
dan.j.allen Oct 28, 2010 1:24 AM (in response to iapazmino)Got it. Then likely your Maven configuration is the culprit. Perhaps you have the tests skipped or not matched properly. You should be able to force the test to be executed using -Dtest=TestClassName
-
4. Re: ejb test never gets executed
iapazmino Oct 28, 2010 1:46 AM (in response to dan.j.allen)nice, now it did execute the test, but it failed
initializationError(ec.pazmino.example.ejb.lunch.test.CreateEmployeeTest) Time elapsed: 0.012 sec <<< ERROR!
org.jboss.arquillian.impl.event.FiredEventException: org.jboss.arquillian.spi.LifecycleException: Could not connect to container -
5. Re: ejb test never gets executed
dan.j.allen Oct 28, 2010 2:06 AM (in response to iapazmino)Is JBoss AS running? The remote containers expect the container to be started. If you want the container to start automatically, use the jbossas-managed-5.1 container.
Also, the test outpul will be written to a file in target/surefire-reports. If you run the test in Eclipse, you can see the output directly.
-
6. Re: ejb test never gets executed
iapazmino Oct 28, 2010 12:54 PM (in response to dan.j.allen)Yes, jbossas was running. I chechked some more for a while and saw java.naming.provider.url is never set anywhere and port 1090 is alredy user for smx service. Anyway, I changed to managed container, so I deleted the jndi.properties file and instead I created an arquillian.xml file with the following content just to set the server instance I want to use
<jboss:container>
<jboss:profileName>test-field</jboss:profileName>
</jboss:container>when running the mvn test -Dtest=CreateEmployeeTest -Pjbossas-managed-5.1 command, the configuration builds just fine but then stariting the server fails with the following error:
Results :
Tests in error:
ec.pazmino.example.ejb.lunch.test.CreateEmployeeTestTests run: 1, Failures: 0, Errors: 1, Skipped: 0
Testsuite shutdown hook found server "test-field" still running; stopping it.
Shutting down server: test-field
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/transaction/SystemExceptionthen fails to stop the server
Failed to shutdown server "test-field". Destroying the process.
Testsuite shutdown hook failed to stop server(s) on shutdown.
org.jboss.jbossas.servermanager.ServerShutdownException: Failed to shutdown server.Process was destroyed.
at org.jboss.jbossas.servermanager.ServerController.stopServer(ServerController.java:501)
at org.jboss.jbossas.servermanager.ServerManager$1.run(ServerManager.java:80)
Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/transaction/SystemExceptionthe report made by surefire reads
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.592 sec <<< FAILURE!
ec.pazmino.example.ejb.lunch.test.CreateEmployeeTest Time elapsed: 0 sec <<< ERROR!
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/http/HttpServlet...
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at org.jboss.arquillian.protocol.servlet_2_5.ProtocolDeploymentAppender.createAuxiliaryArchive(ProtocolDeploymentAppender.java:38)
at org.jboss.arquillian.protocol.servlet_2_5.ServletProtocolDeploymentPackager.generateDeployment(ServletProtocolDeploymentPackager.java:42)
at org.jboss.arquillian.impl.ClientDeploymentGenerator.generate(ClientDeploymentGenerator.java:68)
at org.jboss.arquillian.impl.handler.ArchiveGenerator.callback(ArchiveGenerator.java:52)
at org.jboss.arquillian.impl.handler.ArchiveGenerator.callback(ArchiveGenerator.java:42)
at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)
at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)
at org.jboss.arquillian.impl.EventTestRunnerAdaptor.beforeClass(EventTestRunnerAdaptor.java:96)
at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:162)
at org.jboss.arquillian.junit.Arquillian$3$1.evaluate(Arquillian.java:186)
at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)
at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:182)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)...
-
7. Re: ejb test never gets executed
dan.j.allen Oct 28, 2010 3:58 PM (in response to iapazmino)You've been bitten by What's the cause of this exception: java.lang.ClassFormatError: Absent Code?
I'm surprised you weren't able to get the remote container working. The JBoss AS client looks for those values in jndi.properties, so it should be able to connect to the server if you provide it and JBoss AS is running on standard ports.
-
8. Re: ejb test never gets executed
iapazmino Oct 28, 2010 5:30 PM (in response to dan.j.allen)thanks, it did start the server. But, I didn't deploy the archive.
In the pom the packaging for the project is jar and at the deployment annotated field the return is a java archive, but the exception thrown complains an inexistent ear
1 ERROR Server - MbeanException
org.jboss.deployment.DeploymentException: Failed to deploy: file:/home/iapazmino/workspace/sandbox/lunch-ejb/test.ear
...
Caused by: org.jboss.deployers.client.spi.IncompleteDeploymentException: Summary of incomplete deployments (SEE PREVIOUS ERRORS FOR DETAILS):
*** DEPLOYMENTS IN ERROR: Name -> Error
vfszip:/home/iapazmino/workspace/sandbox/lunch-ejb/test.ear/ -> org.jboss.deployers.spi.DeploymentException: Error deploying test.jar: failed to initialize bean container
DEPLOYMENTS IN ERROR:
Deployment "vfszip:/home/iapazmino/workspace/sandbox/lunch-ejb/test.ear/" is in error due to the following reason(s): java.lang.NullPointerException -
9. Re: ejb test never gets executed
dan.j.allen Oct 28, 2010 6:54 PM (in response to iapazmino)Just to clarify, the packaging in your Maven pom is completely unrelated to the packaging of the ShrinkWrap (@Deployment) archive. The whole idea of Arquillian is that you can separate your test deployments from the deployment that your build creates.
Hmm, it's hard to tell from your output what the source of the problem is. I'd need the stacktraces. Rather than post the stacktraces directly in the forum, it's best to link them from pastebin.com.
-
10. Re: ejb test never gets executed
iapazmino Oct 28, 2010 7:41 PM (in response to dan.j.allen)Clear as water, thanks.
here is the exception thrown http://arquillian.pastebin.com/5ssUqQDZ
and here is the surefire report http://arquillian.pastebin.com/udiSV1Dg
-
11. Re: ejb test never gets executed
iapazmino Oct 29, 2010 7:08 PM (in response to iapazmino)I have changed the java archive creation line to JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "target/test.jar");
and the error report changed to http://arquillian.pastebin.com/LJbCj1La
I'm not sure if it's an step backward or fordward...
-
12. Re: ejb test never gets executed
dan.j.allen Oct 30, 2010 1:08 AM (in response to iapazmino)The name of the ShrinkWrap archive is the name that goes in the EAR. So by changing it to "target/test.jar" it's going to try to put that in the EAR that way...and that will likely fail.
If you want to see the final archive that's produced, read how to dump it to disk in the container configuration section of the refguide.
Based on the exception report, it looks like you are getting a plain old deployment exception, which means the cause is what you have in the archive, not necessarily anything that Arquillian/ShrinkWrap is doing.
Dump the archive to disk and see if you can attach the file. Also, show your entire test file in pastebin. To debug, I probably have to reproduce on my end.
-
13. Re: ejb test never gets executed
iapazmino Oct 30, 2010 10:54 PM (in response to dan.j.allen)Thanks a lot.
I tried something I don't think it was clear to me in the example but I thought it might help. The service injected to the test needs indirectly of three or four classes classes more, so I added all of them to the java archive. Then it started complaining it couldn't find the service, so, it felt to me it's necessary to point out you have to include all of the classes involved in the test.
changed from
archive.addClasses(EmployeeService.class, EmployeeServiceBean.class);
to
archive.addClasses(EmployeeService.class, EmployeeServiceBean.class, CommonDao.class, EmployeeDao.class, Employee.class);
next, the ejb couldn't be found. I had named mi service
@Stateless(name = "EmployeeService")
public class EmployeeServiceBean implements EmployeeServiceso my test class was looking for the service by its name
@EJB(name = "EmployeeService")
private EmployeeService employeeService;but this caused the test enrichment to fail
Caused by: javax.naming.NamingException: No EJB found in JNDI, tried the following names: java:global/test.ear/test/EmployeeServiceBean, java:global/test.ear/test/EmployeeService, java:global/test/EmployeeService, java:global/test/EmployeeServiceBean, java:global/test/EmployeeService/no-interface, test/EmployeeServiceBean/local, test/EmployeeServiceBean/remote, test/EmployeeService/no-interface, EmployeeServiceBean/local, EmployeeServiceBean/remote, EmployeeService/no-interface
this felt to me like a bug maybe. I deleted both naming parameters from the annotations and worked just fine. I mean it found the the ejb resource. Now, the new jar archive carries the datadource but can't be bound http://arquillian.pastebin.com/wAs9Crtg
-
14. Re: ejb test never gets executed
iapazmino Oct 31, 2010 1:24 AM (in response to iapazmino)Noticed too that it needs both parameters set to make a closer-to-correct injection of resources.
the surefire report above is injecting the resource only with the mapped name but whe using also name attribute reads as follows
-------------------------------------------------------------------------------
Test set: ec.pazmino.example.ejb.lunch.test.CreateEmployeeTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 6.983 sec <<< FAILURE!
createEmployee(ec.pazmino.example.ejb.lunch.test.CreateEmployeeTest) Time elapsed: 1.058 sec <<< ERROR!
javax.ejb.EJBException: java.lang.RuntimeException: Unable to inject jndi dependency: env/lunchDS into property ec.pazmino.example.ejb.lunch.facade.EmployeeServiceBean.dataSource: lunchDS not bounddeploying the ear directly into the server doesn't have any problem