Espoir Murhabazi
Espoir Murhabazi

Reputation: 6376

javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB junit

i'm learning EJB , when trying to test it with junit i get the following error

cd.espoirmur.Ejb.InterfaceEjbLocal_80488159
Jun 03, 2016 10:33:58 AM com.sun.ejb.containers.StatelessSessionContainer createStatelessEJB
SEVERE: ejb.stateless_ejbcreate_exception
Jun 03, 2016 10:33:58 AM com.sun.ejb.containers.BaseContainer postInvoke
WARNING: A system exception occurred during an invocation on EJB BookEjb, method: public java.lang.Object cd.espoirmur.Ejb.BookEjb.enregistrer(java.lang.Object)
Jun 03, 2016 10:33:58 AM com.sun.ejb.containers.BaseContainer postInvoke
WARNING: 
javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:435)
    at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2579)
    at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1971)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:210)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
    at com.sun.proxy.$Proxy161.enregistrer(Unknown Source)
    at cd.espoirmur.test.BookEjbTest.createBook(BookEjbTest.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
Caused by: javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:700)
    at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:246)
    at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:430)
    ... 37 more
Caused by: javax.ejb.CreateException: Could not create stateless EJB
    at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:514)
    at com.sun.ejb.containers.StatelessSessionContainer.access$000(StatelessSessionContainer.java:97)
    at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:698)
    ... 39 more
Caused by: java.lang.reflect.InvocationTargetException
    at com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1706)
    at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:456)
    ... 41 more
Caused by: java.lang.NullPointerException
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
    at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:1273)
    at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:178)
    at org.glassfish.weld.services.JCDIServiceImpl._createJCDIInjectionContext(JCDIServiceImpl.java:198)
    at org.glassfish.weld.services.JCDIServiceImpl.createJCDIInjectionContext(JCDIServiceImpl.java:179)
    at com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext(BaseContainer.java:1696)
    ... 42 more

PlainTextActionReporterSUCCESSNo monitoring data to report.
JdbcRuntimeExtension,  getAllSystemRAResourcesAndPools = [GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource]
Jun 03, 2016 10:33:59 AM org.glassfish.admin.mbeanserver.JMXStartupService shutdown
INFO: JMXStartupService and JMXConnectors have been shut down.
Jun 03, 2016 10:33:59 AM org.glassfish.admin.mbeanserver.JMXStartupService shutdown
INFO: JMXStartupService and JMXConnectors have been shut down.
JdbcRuntimeExtension,  getAllSystemRAResourcesAndPools = [GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource]

here is my code for test:

public class BookEjbTest {
private static EJBContainer ec;
private static Context ctx;
@BeforeClass
public static void initcontainer() throws Exception {
    File module = new File("target/classes/cd/espoirmur/ejb");
    Map<String, Object> properties = new HashMap<>();
    properties.put(EJBContainer.MODULES, module);
    ec = EJBContainer.createEJBContainer(properties);
    System.out.println("--------------ejb container sucessfully created----------" + Arrays.toString(module.listFiles()) + "---------liste des moduless");
    ctx = ec.getContext();
    System.out.println("--------------ejb context successfull  sucessfully created----------");
}

@AfterClass
public static void closeContainer() throws Exception {
    ec.close();
}

@Test
public void createBook() throws Exception {
    Book book = new Book();
    long id = 12309;
    book.setId(id);
    book.setDescription("mon premier livre sur les EJB");
    book.setIllustrations(Short.MIN_VALUE);
    book.setIsbn("ISBN-129-OK");
    book.setNbofpage(123);
    book.setBookTitle("Debutez avec les EJB");
    book.setPrice(12.5);
    System.out.println("-----------begin checking--------");
    InterfaceEjbLocal bookejb = (InterfaceEjbLocal ) ctx.lookup("java:global/ejb/BookEjb");
    if (bookejb != null) {
        System.out.println(bookejb.toString());
        bookejb.enregistrer(book);
        assertNotNull("ID should not be null", book.getId());
        List<Book> books = bookejb.find();
        assertNotNull(books);
    } else {
        System.out.println("-----------null object return--------");
    }

}

}

the ejb code :

    @Local(InterfaceEjbLocal.class)
@Stateless
public class BookEjb implements Serializable,InterfaceEjbLocal<Book>{
    @PersistenceContext(unitName = "BookStorePU")
    private EntityManager em;
    @Override
    public List<Book> find() {
        List<Book> Books = em.createNamedQuery("Book.findAll", Book.class).getResultList();
        return Books;
    }
    @Override
    public Book findById(Long id) {
        return em.find(Book.class, id);
    }
    @Override
    public Book enregistrer(Book entity) {
        em.persist(entity);
        return entity;
    }
    @Override
    public void delete(Book entity) {
        em.remove(em.merge(entity));
    }
    @Override
    public Book update(Book entity) {
        return em.merge(entity);
    }
    @Override
    public String getReason() {
        return "why je ne fonctionnne pas?????";
    }
    public void setEm(EntityManager em) {
        this.em = em;
    }   
}

the local interface :

    package cd.espoirmur.Ejb;

import java.util.List;
import javax.ejb.Local;
import javax.persistence.EntityManager;

@Local
public interface InterfaceEjbLocal<T> {

    public List<T> find();

    public T findById(Long id);

    public T enregistrer(T entity);

    public void delete(T entity);

    public T update(T entity);

    public String getReason();

}

my persistance.xml is here:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="BookStorePU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>java:global/jdbc/BookStorePool</jta-data-source>
    <class>cd.espoirmur.Entity.Book</class>
    <properties>
      <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
      <property name="eclipselink.logging.level" value="INFO"/>
    </properties>
  </persistence-unit>
</persistence>

and the pom.xml file is:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cd.espoirmur</groupId>
    <artifactId>TestEjbContainer</artifactId>
    <version>alpha</version>
    <packaging>war</packaging>

    <name>TestEjbContainer</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <glassfish.embedded-static-shell.jar>C:\Program Files\glassfish-4.1.1\glassfish\lib\embedded\glassfish-embedded-static-shell.jar</glassfish.embedded-static-shell.jar>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.5.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId>
            <version>2.5.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
            <version>1.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
         <dependency>
            <groupId>org.glassfish.main.extras</groupId>
            <artifactId>glassfish-embedded-static-shell</artifactId>
            <version>4.1.1</version>
            <scope>system</scope>
            <systemPath>${glassfish.embedded-static-shell.jar}</systemPath>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

can someone help me??

i think the error is in my ejb lifecycle when i try to inject the persistance unit but i don't know how to solve it, i get the same error rven if i don't implement the local interface.. please help me!!!!!

Upvotes: 1

Views: 3117

Answers (1)

hugh
hugh

Reputation: 2280

I could be wrong, but it looks like the problem is that the container isn't managing to set up the persistence unit, and this is because you haven't provided all of the vendor-specific required properties the Eclipse persistence provider needs (specifically, connection credentials).

These go in the "properties" section, and are vendor-specific (JBoss docs link), but here's the example Eclipse Link provides, and here's their docs on the subject. So, I'd suggest adding this to your persistance.xml (with appropriate values for your DB):

<properties>
    <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
    <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
    <property name="javax.persistence.jdbc.user" value="scott"/>
    <property name="javax.persistence.jdbc.password" value="tiger"/>
</properties>

Upvotes: 1

Related Questions