簡體   English   中英

Glassfish嵌入式無法部署EJB模塊

[英]Glassfish embedded Fails to deploy EJB modules

有人可以幫助我解決JUnit4.12和glassfish4.1的錯誤嗎?

我正在嘗試使用JUnit測試EJB,但是我從JUnit跟蹤中得到了以下消息:

javax.ejb.EJBException: Failed to deploy EJB modules - see log for details
at org.glassfish.ejb.embedded.EJBContainerImpl.deploy(EJBContainerImpl.java:149)

使用maven我的pom.xml是:

<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>com.leorm.sga</groupId>
<artifactId>sga-jee-last</artifactId>
<version>1.0</version>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <glassfish.embedded-static-shell.jar>
        /opt/servers/glassfish4/glassfish/lib/embedded/glassfish-embedded-static-shell.jar
    </glassfish.embedded-static-shell.jar>
</properties>
<dependencies>
    <dependency>
        <groupId>org.glassfish.main.extras</groupId>
        <artifactId>glassfish-embedded-static-shell</artifactId>
        <version>4.1</version>
        <scope>system</scope>
        <systemPath>${glassfish.embedded-static-shell.jar}</systemPath>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

我的JUnit測試案例是:

...
public class PersonaServiceTest {

private PersonaService personaService;

@Before
public void setUp() throws NamingException{
    EJBContainer contenedor = EJBContainer.createEJBContainer();
    personaService = (PersonaService) contenedor.getContext().lookup("ejb/Persona");

}

@Test
public void test() {
    System.out.println("Starting test EJB PersonaService");
    assertTrue(personaService != null);

    assertEquals(2, personaService.listarPersonas().size());

    System.out.println("Count personas is:" + personaService.listarPersonas().size());

    this.desplegarPersonas(personaService.listarPersonas());
    System.out.println("End test EJB PersonaService");
}

private void desplegarPersonas(List<Persona> personas) {
    for(Persona persona: personas){
        System.out.println(persona);
    }

}

}

控制台說:

INFO: [EJBContainerImpl] GlassFish status: STARTED
Oct 18, 2015 11:33:56 AM org.glassfish.ejb.embedded.EJBContainerImpl deploy
INFO: [EJBContainerImpl] Deploying as a ScatteredArchive
Oct 18, 2015 11:33:57 AM    org.glassfish.deployment.common.GenericAnnotationDetector scanArchive
WARNING: NCLS-DEPLOYMENT-00009
Oct 18, 2015 11:33:57 AM org.glassfish.api.ActionReport failure
SEVERE: Archive type of /tmp/classes.jar was not recognized
Oct 18, 2015 11:33:57 AM org.glassfish.ejb.embedded.EJBContainerProviderImpl createEJBContainer
INFO: [EJBContainerProviderImpl] Cleaning up on failure ...
JdbcRuntimeExtension,  getAllSystemRAResourcesAndPools = [GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcResource, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool]
Oct 18, 2015 11:33:57 AM org.glassfish.admin.mbeanserver.JMXStartupService shutdown
INFO: JMXStartupService and JMXConnectors have been shut down.
Oct 18, 2015 11:33:57 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.JdbcConnectionPool, GlassFishConfigBean.org.glassfish.jdbc.config.JdbcConnectionPool]
Oct 18, 2015 11:33:57 AM com.sun.enterprise.v3.server.AppServerStartup stop
INFO: Shutdown procedure finished

我在eclipse中作為獨立JUnit運行此類測試的個人經驗(不是通過maven測試)是使用createEJBContainer的重載版本,在該版本中,開發人員必須指定在哪里可以找到編譯的Bean類。 假設EJB類位於{currentProject} / target / classes中,並且使用EJB批注,則以下內容為我解決了相同的問題:

    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put(EJBContainer.MODULES, new File("target/classes"));
    ec = EJBContainer.createEJBContainer(properties);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM