CDI con ejb 3.1, saldare-logger su v3.0.1 glassfish
-
02-10-2019 - |
Domanda
Scenario: 1) creare il progetto orecchio Maven, creare la guerra all'interno del progetto 2) Aggiungere beans.xml alla guerra project`s WEB-INF / 3) di fagioli creat semplici @Steateless
progetto - http://drp.ly/1j5C3t
EJB bean:
@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 progetto di 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>
Maven pom.xml del progetto orecchio:
<?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>
Test case 1 ( problema ): la distribuzione del progetto con l'eccezione beans.xml dare:
[# | 2010-07-04T19: 36: 50,003 + 0300 | ATTENZIONE | oracle-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 33; _ThreadName = thread-1; | A eccezione sistema durante un invocazione metodo bean TestEjb TestEjb.print1Partner public void () javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Impossibile creare EJB stateless a 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) Causato da: javax.ejb.EJBException: javax.ejb.CreateException: Impossibile creare EJB stateless a 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 maggiori causati da: javax.ejb.CreateException: Impossibile creare EJB stateless a com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (StatelessSessionContainer.java:528) a com.sun.ejb.containers.StatelessSessionContainer.access $ 000 euro (StatelessSessionContainer.java:90) a com.sun.ejb.containers.StatelessSessionContainer $ SessionContextFactory.create (StatelessSessionContainer.java:718) ... 14 maggiori causati da: java.lang.NullPointerException a 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) ... altri 16 | #] [# | 2010-07-04T19: 36: 50,004 + 0300 | INFO | oracle-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 33; _ThreadName = Thread-1 ; | EJB5119: expunging Timer ['13 @@ @@ 1.278.255,602087 millions di server @@ OASYS' 'TimedObject = TestEjb' '= Application testo' 'BEING_DELIVERED' 'PERIODICA' 'Contenitore ID = 83771744647118848' 'Sun 4 luglio 19:36:45 EEST 2010' '0' '* / 15 # * # * # * # * # * # * # # nullo null # null # # vero print1Partner # 0' ] dopo [2] mancata consegna | #]
[# | 2010-07-04T19: 37: 00.000 + 0300 | INFO | oracle-glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 33; _ThreadName = thread-1; | Questa è prova | #]
in attesa di risultati:
Yrjaaaa
Si tratta di test
Risultati:
eccezione
Si tratta di test
Caso 2: rimuovere beans.xml
in attesa di risultati:
Yrjaaaa
Si tratta di test
Risultati
Yrjaaaa
Si tratta di test
Obiettivo: voglio usare EJB di saldatura (CDI) in Project Web all'interno dell'archivio orecchio che includono alcuni altri progetti di guerra e EJB, ma I don `t WonD per separare il mio progetto web (guerra + EJB)
Strumenti e ambiente: Maven e EJB 3.1 e saldatura e GlassFish 3.0.1
Q1: è questo potrebbe essere un qualche tipo di bug specifico GlassFish? Q2: quello che potrebbe essere una causa di problema? Q3:? È che c'è un po 'di progettazione per questo caso
Grazie.
Soluzione 2
Sembra che 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 vediamo produttore
il design attuale è quello di modulo EJB e la guerra separato -. A lista si forche per me
Altri suggerimenti
In entrambi i confezionare il vostro EJB in un .war o pacchetto come ejb-jar all'interno di un "tradizionale" .ear . Ritengo che il .war imballaggio come vantaggio per i progetti senza forti esigenze di modularizzazione. Ma questo non significa che le regole sono cambiate quando si utilizza un .ear imballaggio.
In altre parole, non credo che si può mescolare entrambi gli approcci e non ci si aspetta un contenitore per sostenerlo.
Come nota a margine, mi chiedo perché si sta imballaggio cdi-api
dentro l'orecchio, credo che l'API è fornito dal contenitore.
A mio parere, si dovrebbe cercare di mantenere le cose semplici.