CDI con EJB 3.1, registrador de soldar en GlassFish v3.0.1
-
02-10-2019 - |
Pregunta
Escenario: 1) crear el proyecto maven oído, crear dentro del proyecto de guerra 2) Añadir a la guerra beans.xml project`s WEB-INF / 3) bean creat sencilla @Steateless
Proyecto - http://drp.ly/1j5C3t
bean EJB:
@Stateless
@LocalBean
public class TestEjb {
@Inject
Logger log;
public TestEjb() {
}
@Schedule(hour = "*", minute = "*", second = "*/15")
public void print1Partner() {
log.info("Yrjaaaa");
System.out.println("This is test");
}
}
Maven POM-xml del proyecto de la guerra:
<?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">
<parent>
<artifactId>Testo</artifactId>
<groupId>ua.co.testo</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Testo-web</artifactId>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<project.reporting.outputEncoding>
UTF-8
</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>ua.eset.oasys</groupId>
<artifactId>utopia</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ua.eset.oasys</groupId>
<artifactId>fenix</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<!-- SL4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.0</version>
<scope>provided</scope>
</dependency>
<!-- SLF4J JDK14 Binding -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.6.0</version>
<scope>provided</scope>
</dependency>
<!-- Injectable Weld-Logger -->
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-logger</artifactId>
<version>1.0.0-CR2</version>
<scope>provided</scope>
</dependency>
<!--CDI-->
<!-- <dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<scope>provided</scope>
<version>1.0-CR4</version>
</dependency>-->
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.2-FCS</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.2-FCS</version>
<scope>provided</scope>
</dependency>
<!--J2EE-->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.ejb</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>testo-web</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<encoding>utf8</encoding>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
experta pom.xml del proyecto de la oreja:
<?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">
<parent>
<artifactId>Testo</artifactId>
<groupId>ua.co.testo</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Testo-ear</artifactId>
<packaging>ear</packaging>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<project.reporting.outputEncoding>
UTF-8
</project.reporting.outputEncoding>
</properties>
<dependencies>
<!--weld-->
<!-- SL4J API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.0</version>
</dependency>
<!-- SLF4J JDK14 Binding -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.6.0</version>
</dependency>
<!-- Injectable Weld-Logger -->
<dependency>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-logger</artifactId>
<version>1.0.0-CR2</version>
</dependency>
<!--
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.0-CR4</version>
</dependency>-->
<dependency>
<groupId>ua.co.testo</groupId>
<artifactId>Testo-web</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
</dependencies>
<build>
<finalName>testo</finalName>
<plugins>
<plugin>
<!--<groupId>org.apache.maven.plugins</groupId>-->
<artifactId>maven-ear-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<modules>
<webModule>
<bundleFileName>testo-web.war</bundleFileName>
<groupId>ua.co.testo</groupId>
<artifactId>Testo-web</artifactId>
</webModule>
<!--weld-->
<!-- SL4J API -->
<jarModule>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>
<!-- SLF4J JDK14 Binding -->
<jarModule>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>
<!-- Injectable Weld-Logger -->
<jarModule>
<groupId>org.jboss.weld</groupId>
<artifactId>weld-logger</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>
<!--<jarModule>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<bundleDir>lib</bundleDir>
</jarModule>-->
</modules>
</configuration>
</plugin>
</plugins>
</build>
</project>
Caso de prueba 1 ( Problema ): el despliegue de proyecto con excepción de dar beans.xml:
[# | 2010-07-04T19: 36: 50.003 + 0.300 | ADVERTENCIA | oráculo-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 33; _ThreadName = thread-1; | Una excepción del sistema se produjo durante una invocación de método EJB TestEjb TestEjb.print1Partner public void () javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: No se pudo crear EJB sin estado en com.sun.ejb.containers.StatelessSessionContainer._getContext (StatelessSessionContainer.java:448) a com.sun.ejb.containers.BaseContainer.getContext (BaseContainer.java:2467) a com.sun.ejb.containers.BaseContainer.preInvoke (BaseContainer.java:1860) a com.sun.ejb.containers.BaseContainer.callEJBTimeout (BaseContainer.java:3962) a com.sun.ejb.containers.EJBTimerService.deliverTimeout (EJBTimerService.java:1667) a com.sun.ejb.containers.EJBTimerService.access $ 100 (EJBTimerService.java:98) a com.sun.ejb.containers.EJBTimerService $ TaskExpiredWork.run (EJBTimerService.java:2485) a java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:441) a java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:303) a java.util.concurrent.FutureTask.run (FutureTask.java:138) a java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) a java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) a java.lang.Thread.run (Thread.java:619) Causado por: javax.ejb.EJBException: javax.ejb.CreateException: No se pudo crear EJB sin estado en com.sun.ejb.containers.StatelessSessionContainer $ SessionContextFactory.create (StatelessSessionContainer.java:720) a com.sun.ejb.containers.util.pool.NonBlockingPool.getObject (NonBlockingPool.java:200) a com.sun.ejb.containers.StatelessSessionContainer._getContext (StatelessSessionContainer.java:443) ... 12 más causada por: javax.ejb.CreateException: No se pudo crear EJB sin estado en com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (StatelessSessionContainer.java:528) a com.sun.ejb.containers.StatelessSessionContainer.access $ 000 (StatelessSessionContainer.java:90) a com.sun.ejb.containers.StatelessSessionContainer $ SessionContextFactory.create (StatelessSessionContainer.java:718) ... 14 más causada por: java.lang.NullPointerException en java.util.concurrent.ConcurrentHashMap.get (ConcurrentHashMap.java:768) a org.jboss.weld.manager.BeanManagerImpl.getBean (BeanManagerImpl.java:1171) a org.jboss.weld.manager.BeanManagerImpl.getBean (BeanManagerImpl.java:132) a org.glassfish.weld.services.JCDIServiceImpl._createJCDIInjectionContext (JCDIServiceImpl.java:145) a org.glassfish.weld.services.JCDIServiceImpl.createJCDIInjectionContext (JCDIServiceImpl.java:122) a com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext (BaseContainer.java:1616) a com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (StatelessSessionContainer.java:469) ... 16 más | #] [# | 2010-07-04T19: 36: 50.004 + 0.300 | INFO | oráculo-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 33; _ThreadName = Thread-1 ; | EJB5119: Expurgar Temporizador ['13 @@ @@ 1278255602087 servidor @@ oasys' 'TimedObject = TestEjb' '= Aplicación testo' 'BEING_DELIVERED' 'PERIÓDICO' 'Contenedor ID = 83771744647118848' 'Dom Jul 04 19:36:45 CEST 2010' '0' '* / * # 15 # * # * # * # * # * # # nula null # # nula verdadera # # print1Partner 0' ] a partir de [2] entregas fallidas | #]
[# | 2010-07-04T19: 37: 00.000 + 0.300 | INFO | oráculo-glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 33; _ThreadName = Thread-1; | Este es la prueba | #]
esperar resultados:
Yrjaaaa
Esta es la prueba
Resultados:
Excepción
Esta es la prueba
caso 2: eliminar beans.xml
esperar resultados:
Yrjaaaa
Esta es la prueba
resultados
Yrjaaaa
Esta es la prueba
Objetivo: Quiero utilizar EJB soldadura (CDI) en el proyecto de la tela dentro del archivo oreja que incluye algunos otros proyectos de guerra y EJB, pero yo `t Wond para separar mi proyecto web (guerra + EJB)
Herramientas y medio ambiente: maven y EJB 3.1 y soldadura y GlassFish 3.0.1
P1: es esto podría ser una especie de bichos glassfish específico? P2: ¿qué podría ser una causa de problema? P3: ¿hay algo de diseño para este caso
Gracias.
Solución 2
Parece que cant use Injection of weld logger in ejb in a case of glassfish ejb container because of it is ejb container managed bean and it don
t Ver productor
El diseño actual es el módulo EJB y la guerra por separado -. En la lista se bifurca para mí
Otros consejos
De cualquier paquete El EJB en un .war o empaquetarlo como ejb-jar dentro de un "tradicional" .ear . Considero que el .war de envases para su conveniencia para los proyectos sin necesidad de modularización fuertes. Pero esto no significa que las reglas cambiaron cuando se utiliza un .ear embalaje.
En otras palabras, creo que no se pueden mezclar ambos enfoques, y no se puede esperar un recipiente para apoyarlo.
Como nota al margen, me pregunto por qué estás envases cdi-api
dentro del oído, creo que el API es proporcionada por el recipiente.
En mi opinión, usted debe tratar de mantener las cosas simples.