Hi,

I use AndroMDA to generate a project with EJB3. It generates test classes with 
TestNG, which use Jboss EJB3 embedded container. 

But when I run the tests, they fail with the following exception :

java.lang.RuntimeException: java.net.MalformedURLException: no protocol: and

The full stack trace :

-------------------------------------------------------
  |  T E S T S
  | -------------------------------------------------------
  | WARN  20-07 10:19:43,713 (Ejb3Configuration.java:addXMLEntities:365)  
-Persistence provider caller does not implements the EJB3 spec correctly. 
PersistenceUnitInfo.getNewTempClassLoader() is null.
  | WARN  20-07 10:19:44,119 (AnnotationBinder.java:bindClass:543)  -Illegal 
use of @Table in a subclass of a SINGLE_TABLE hierarchy: 
fr.horoquartz.t4.core.absence.DemandeAbsence
  | WARN  20-07 10:19:47,230 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,324 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,371 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,464 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,527 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,589 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,652 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,902 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,965 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:47,980 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,027 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,074 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,105 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,136 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,168 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,230 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,262 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,340 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,387 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,418 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,449 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,496 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,543 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,715 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,762 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | WARN  20-07 10:19:48,777 
(JBossTimerServiceFactory.java:restoreTimerService:112)  -TIMER SERVICE IS NOT 
INSTALLED
  | lookup 
  |   CodeHoraireDao: org.jnp.interfaces.NamingContext
  |   I18nLibelleTraduitDao: org.jnp.interfaces.NamingContext
  |   I18nAttributDao: org.jnp.interfaces.NamingContext
  |   SectionHoraireDao: org.jnp.interfaces.NamingContext
  |   LigneDemandeAbsenceDao: org.jnp.interfaces.NamingContext
  |   RoleDao: org.jnp.interfaces.NamingContext
  |   JourneeEmployeDao: org.jnp.interfaces.NamingContext
  |   ServiceAbsenceBean: org.jnp.interfaces.NamingContext
  |   ServiceDemandeBean: org.jnp.interfaces.NamingContext
  |   ServiceEmployeBean: org.jnp.interfaces.NamingContext
  |   LigneProfilHoraireJournalierDao: org.jnp.interfaces.NamingContext
  |   ProfilHoraireJournalierDao: org.jnp.interfaces.NamingContext
  |   MotifAbsenceDao: org.jnp.interfaces.NamingContext
  |   AbsenceDao: org.jnp.interfaces.NamingContext
  |   UserTransaction: org.jboss.ejb3.embedded.UserTransactionImpl
  |   DemandeDao: org.jnp.interfaces.NamingContext
  |   EmployeDao: org.jnp.interfaces.NamingContext
  |   DemandeAbsenceDao: org.jnp.interfaces.NamingContext
  |   ServiceWorkflowBean: org.jnp.interfaces.NamingContext
  |   ServiceDeclarantBean: org.jnp.interfaces.NamingContext
  |   I18nLanguageDao: org.jnp.interfaces.NamingContext
  |   CompteUtilisateurDao: org.jnp.interfaces.NamingContext
  |   ServiceUtilisateurBean: org.jnp.interfaces.NamingContext
  |   LigneCodeHoraireDao: org.jnp.interfaces.NamingContext
  |   AttributionHoraireDao: org.jnp.interfaces.NamingContext
  |   I18nServiceBean: org.jnp.interfaces.NamingContext
  |   LigneAttributionHoraireDao: org.jnp.interfaces.NamingContext
  | Running t4Seam Services Test
  | WARN  20-07 10:19:48,918 (ServiceEmployeTest.java:testCreateEmploye:74)  
-Failed test testCreateEmploye()
  | java.lang.RuntimeException: java.net.MalformedURLException: no protocol: and
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.getArguments(MethodInvocation.java:281)
  |     at 
org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:258)
  |     at 
org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:58)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
  |     at $Proxy39.createEmploye(Unknown Source)
  |     at 
fr.horoquartz.t4.core.employe.test.ServiceEmployeTest.testCreateEmploye(ServiceEmployeTest.java:70)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:585)
  |     at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
  |     at org.testng.internal.Invoker.invokeMethod(Invoker.java:407)
  |     at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:778)
  |     at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
  |     at org.testng.TestRunner.privateRun(TestRunner.java:682)
  |     at org.testng.TestRunner.run(TestRunner.java:566)
  |     at org.testng.SuiteRunner.privateRun(SuiteRunner.java:220)
  |     at org.testng.SuiteRunner.run(SuiteRunner.java:146)
  |     at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:713)
  |     at org.testng.TestNG.runSuitesLocally(TestNG.java:676)
  |     at 
org.apache.maven.surefire.testng.TestNGExecutor.executeTestNG(TestNGExecutor.java:64)
  |     at 
org.apache.maven.surefire.testng.TestNGXmlTestSuite.execute(TestNGXmlTestSuite.java:75)
  |     at org.apache.maven.surefire.Surefire.run(Surefire.java:129)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:585)
  |     at 
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:225)
  |     at 
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:747)
  | Caused by: java.net.MalformedURLException: no protocol: and
  |     at java.net.URL.<init>(URL.java:567)
  |     at java.net.URL.<init>(URL.java:464)
  |     at java.net.URL.<init>(URL.java:413)
  |     at sun.rmi.server.LoaderHandler.pathToURLs(LoaderHandler.java:747)
  |     at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:147)
  |     at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
  |     at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
  |     at 
sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
  |     at 
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1544)
  |     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  |     at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1634)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
  |     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
  |     at java.rmi.MarshalledObject.get(MarshalledObject.java:135)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.getArguments(MethodInvocation.java:276)
  |     ... 29 more
  | 

My test method :

    @org.testng.annotations.Test
  |     public void testCreateEmploye() 
  |     {
  |         try
  |         {
  |             fr.horoquartz.t4.core.employe.ServiceEmployeRemote 
serviceEmploye = 
(fr.horoquartz.t4.core.employe.ServiceEmployeRemote)EJB3Container.getInitialContext().lookup("ServiceEmployeBean/remote");
  |             
  |             VOEmploye employe = new VOEmploye();
  |             employe.setAdresse("adresse");
  |             employe.setDateNaissance((new GregorianCalendar(1974, 
Calendar.SEPTEMBER, 7)).getTime());
  |             employe.setMail("mail");
  |             employe.setMatricule("000000");
  |             employe.setNom("nom");
  |             employe.setPays("FRANCE");
  |             employe.setPrenom("prenom");
  |             employe.setTelephone("00 00 00 00 00");
  |             employe.setVille("VILLE");
  |             
  |             serviceEmploye.createEmploye(employe);
  |         }
  |         catch (Exception ex)
  |         {
  |             logger.warn("Failed test testCreateEmploye()", ex);
  |         }
  |     }
  | 

There is no error when I don't call the serviceEmploye.createEmploye() method, 
so I think there is no problem while finding the ServiceEmployeBean session 
bean in JNDI context. But it crashes when I call methods on this session bean.

A piece of the ejb-jar.xml file :

        <session>
  |             <description>
  |                 <![CDATA[
  |                 
  |                 ]]>
  |             </description>
  |             <ejb-name>ServiceEmployeBean</ejb-name>
  |             
<remote>fr.horoquartz.t4.core.employe.ServiceEmployeRemote</remote>
  |             
<ejb-class>fr.horoquartz.t4.core.employe.ServiceEmployeBean</ejb-class>
  |             <session-type>Stateless</session-type>
  |             <transaction-type>Container</transaction-type>
  |         </session>
  | 

For what I understood, the EJB3 embedded container is started with this class :

// license-header java merge-point
  | //
  | // Generated by: EJB3Container.vsl in andromda-ejb3-cartridge.
  | //
  | package fr.horoquartz.t4.seam.test;
  | 
  | import java.util.Hashtable;
  | 
  | import javax.naming.Context;
  | import javax.naming.InitialContext;
  | 
  | import org.apache.commons.logging.Log;
  | import org.apache.commons.logging.LogFactory;
  | import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;
  | import org.jboss.ejb3.embedded.EJB3StandaloneDeployer;
  | 
  | import org.testng.annotations.Configuration;
  | 
  | /**
  |  * Boots the JBoss Microcontainer with an EJB3 configuration.
  |  *
  |  * You can also use this class to lookup managed beans from JNDI.
  |  *
  |  * @author vancek
  |  * <p><b>Note</b>. code was copied from [EMAIL PROTECTED]
  |  * example on Hibernate's CaveatEmptor application
  |  * </p>
  |  */
  | public class EJB3Container 
  | {
  |     private final static Log logger = 
LogFactory.getLog(EJB3Container.class);
  |     
  |     private EJB3StandaloneDeployer deployer;
  | 
  |     @Configuration(beforeTest = true)
  |     public void startup() 
  |     {
  |         try 
  |         {
  |                 logger.info("==>Bootstrapping EJB3 container...");
  |     
  |             // Boot the JBoss Microcontainer with EJB3 settings, loads 
ejb3-interceptors-aop.xml
  |             EJB3StandaloneBootstrap.boot(null);
  | 
  | //            Uncomment the following to enable security
  | //            logger.info("==>Deploying security-beans");
  | //            
EJB3StandaloneBootstrap.deployXmlResource("security-beans.xml");
  | //            logger.info("==>Deployed security-beans");
  |              
  | //            logger.info("==>Deploying jboss-jms-beans - init JBoss MQ 
core services");
  | //            
EJB3StandaloneBootstrap.deployXmlResource("jboss-jms-beans.xml");
  | //            logger.info("==>Deployed jboss-jms-beans");
  |             
  | //            logger.info("==>Configure test queue and topic");
  | //            EJB3StandaloneBootstrap.deployXmlResource("testjms.xml");
  | //            logger.info("==>Configured test queues and topics");
  | 
  |             logger.info("==>Deploying ejb3");
  |             EJB3StandaloneBootstrap.scanClasspath();
  | 
  |             // Add all EJBs found in the archive that has this file
  |             deployer = new EJB3StandaloneDeployer();
  |     
  |             // Deploy everything we got
  |             deployer.setKernel(EJB3StandaloneBootstrap.getKernel());        
  |             deployer.create();
  |             logger.info("==>Deployer created");
  |             deployer.start();
  |             logger.info("==>Deployer started");
  |             logger.info("==>End of bootstrapping EJB3 container");
  |         } 
  |         catch (Exception ex) 
  |         {
  |             logger.error(ex.getMessage(), ex);
  |             throw new RuntimeException(ex);
  |         }
  |     }
  | 
  |     @Configuration(afterTest = true)
  |     public void shutdown() 
  |     {
  |         try 
  |         {
  |             logger.info("==>Invoking EJB3.shutdown...");
  |             deployer.stop();
  |             deployer.destroy();
  |             EJB3StandaloneBootstrap.shutdown();
  |         } 
  |         catch (Exception ex)
  |         {
  |             throw new RuntimeException(ex);
  |         }
  |     }
  |     
  |     private static InitialContext initialContext = null;
  |     private static InitialContext securedInitialContext = null;
  | 
  |     /**
  |      * Return a new InitialContext based on 
org.jnp.interfaces.LocalOnlyContextFactory,
  |      * setting the the default context.
  |      * 
  |      * @return InitialContext
  |      * @throws Exception
  |      */
  |     public static InitialContext newInitialContext()
  |         throws Exception
  |     {
  |         Hashtable props = getInitialContextProperties();
  |         initialContext = new InitialContext(props);
  |         return initialContext;
  |     }
  |     
  |     /**
  |      * Return a new InitialContext based on 
org.jboss.security.jndi.JndiLoginInitialContextFactory,
  |      * setting the default context. Use the specified username and password 
to set the security context.
  |      * 
  |      * @param principal
  |      * @param credential
  |      * @return InitialContext
  |      * @throws Exception
  |      */
  |     public static InitialContext newInitialContext(String principal, String 
credential)
  |         throws Exception
  |     {
  |         Hashtable props = getInitialContextProperties(principal, 
credential);
  |         securedInitialContext = new InitialContext(props);
  |         return securedInitialContext;
  |     }
  |     
  |     /**
  |      * Return the default InitialContext based on 
org.jnp.interfaces.LocalOnlyContextFactory
  |      * if one is already instantiated, otherwise create a new 
InitialContext and set as the default.
  |      * 
  |      * @return InitialContext
  |      * @throws Exception
  |      */
  |     public static InitialContext getInitialContext() 
  |         throws Exception
  |     {
  |         if (initialContext == null)
  |         {
  |            Hashtable props = getInitialContextProperties();
  |            initialContext = new InitialContext(props);
  |         }
  |         return initialContext;
  |     }
  |     
  |     /**
  |      * Return the default InitialContext based on 
org.jboss.security.jndi.JndiLoginInitialContextFactory
  |      * if one is already instantiated, otherwise create a new 
InitialContext and set as the default.
  |      * Use the specified username and password to set the security context.
  |      * 
  |      * @param principal
  |      * @param credential
  |      * @return
  |      * @throws Exception
  |      */
  |     public static InitialContext getInitialContext(String principal, String 
credential)
  |         throws Exception
  |     {
  |         if (securedInitialContext == null)
  |         {
  |            Hashtable props = getInitialContextProperties(principal, 
credential);
  |            securedInitialContext = new InitialContext(props);
  |         }
  |         return securedInitialContext;
  |     }
  |     
  |     private static Hashtable getInitialContextProperties()
  |     {
  |         Hashtable<String, String> props = new Hashtable<String, String>();
  |         props.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.jnp.interfaces.LocalOnlyContextFactory");
  |         props.put(Context.URL_PKG_PREFIXES, 
"org.jboss.naming:org.jnp.interfaces");
  |         return props;
  |     }
  |     
  |     private static Hashtable getInitialContextProperties(String principal, 
String credential)
  |     {
  |         Hashtable<String, String> props = new Hashtable<String, String>();
  |         props.put(Context.INITIAL_CONTEXT_FACTORY, 
"org.jboss.security.jndi.JndiLoginInitialContextFactory");
  |         props.put(Context.SECURITY_PRINCIPAL, principal);
  |         props.put(Context.SECURITY_CREDENTIALS, credential);
  |         return props;
  |     }
  | }
  | 

I am new to EJB3 and TestNG, so it looks like chinese to me. Any idea ?

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4066082#4066082

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4066082
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to