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.

È stato utile?

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 dont 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top