سؤال

السيناريو: 1) إنشاء مشروع أذن Maven ، إنشاء مشروع حرب داخل 2) إضافة Beans.xml

مشروع - 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 of War:

<?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 من مشروع الأذن:

<?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>

حالة الاختبار 1 ( مشكلة ): نشر مشروع مع Beans.xml إعطاء استثناء:

#| 2010-07-04T19: 36: 50.003+0300 | تحذير | Oracle-Glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | ؛ | حدث استثناء من النظام أثناء استدعاء على طريقة EJB testejb public void testejb.print1partner () javax.ejb.ejbexception: javax.ejb.ejbexception: javax.ejb.createexception: حاويات. في com.sun.ejb.containers.basecontainer.callejbtimeout (basecontainer.java:3962) في com.sun.ejb.containers.ejbtimerservice.delivertimeout (ejbtimerservice.java:1667) at 100 دولار (ejbtimerservice.java:98) في com.sun.ejb.containers.ejbtimerservice $ taskexpired er.call (Executors.java:441) at java.util.concurrent.futureTask $ sync.innerrun (futuretask.java:303) java.util.concurrent.futuretask.run (futuretask.java:138) at java.util .concurrent.threadpoolexecutor $ worker.runtask (threadpoolexecutor.java:886) في java.util.concurrent.threadpoolexecutor $ worker.run (threadpoolexecutor.java:908) على java.lang.run.run بقلم: javax.ejb.ejbexception: javax.ejb.createexception: لا يمكن إنشاء eJB عديمي الجنسية في com.sun.ejb.containers.statelesssessionContainer $ sessionContextFactory.create .pool.nonblockingpool.getObject (nonblockingpool.java:200) في com.sun.ejb.containers.StatelySessionContainer._getContext (لا يمكن أن يخلق الإرهان. EJB في com.sun.ejb.containers.StatelessSessionContainer.createstatelessejb (statessionsessioncontainer.java:528) في com.sun.ejb.containers.StatelessSessionCon tainer.Access $ 000 (statelssessionContainer.java:90) في com.sun.ejb.containers.StatelySessionContainer $ sessionContextFactory.create (SaturelessSessionContainer.java:718) ... concurrent.concurrenthashmap.get (concurrenthashmap.java:768) at org.jboss.weld.manager.beanmanagerimpl.getbean (beanmanagerimpl.java:1171) في org.jboss.weld.manager.beanageRimple. في org.glassfish.weld.services.jcdiserviceimpl._createjcdiinjectionContext (jcdiserviceimpl.java:145) في org.glassfish.weld.service (baseContainer.java:1616) في com.sun.ejb.containers.StatelessSessionContainer.createstatelessejb (SathelessSessionContainer.java:469) ... 16 آخر |#] | oracle-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _threadid = 33 ؛ _ThreadName = thread-1 ؛ | ejb5119: توقيت التوضيح ['13 127825560202087 server. 04 19:36:45 eest 2010 '' 0 '' */15 # * # * # * # * # * # * # # null # null # null # true # print1partner # 0 '] بعد [2] فاشلة التسليم | # #

#| 2010-07-04T19: 37: 00.000+0300 | info | oracle-glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3 -1 ؛ | هذا اختبار |#

توقع النتائج:

yrjaaaa

هذا اختبار

النتائج :

استثناء

هذا اختبار


الحالة 2: إزالة beans.xml

توقع النتائج:

yrjaaaa

هذا اختبار

النتائج

yrjaaaa

هذا اختبار

الهدف: أريد استخدام EJB Weld (CDI) في مشروع الويب داخل أرشيف الأذن الذي يتضمن بعض مشاريع War & EJB الأخرى ، لكنني لا أتذمر لفصل مشروع الويب الخاص بي (War + EJB)

الأدوات والبيئة: Maven & EJB 3.1 & Weld & Glassfish 3.0.1

س 1: هل يمكن أن يكون هذا نوعًا من علة الأسماك الزجاجية المحددة؟ س 2: ماذا يمكن أن يكون سبب المشكلة؟ س 3: هل هناك بعض التصميم لمثل هذه الحالة؟

شكرًا لك.

هل كانت مفيدة؟

المحلول 2

يبدو أننا نستطيعt 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ر انظر المنتج

التصميم الحالي هو فصل وحدة EJB و WAR - عند قائمة Forks بالنسبة لي.

نصائح أخرى

إما حزمة EJB الخاص بك في .حرب أو حزمها على أنها EJB-JAR داخل "التقليدية" .أذن. أنا أعتبر .حرب التغليف كملاحة للمشاريع دون احتياجات تعليدية قوية. ولكن هذا لا يعني أن القواعد تغيرت عند استخدام .أذن التغليف.

بمعنى آخر ، لا أعتقد أنه يمكنك مزج كلا النهجين ولا تتوقع حاوية لدعمها.

كملاحظة جانبية ، أتساءل لماذا تغليفك cdi-api داخل الأذن ، أعتقد أن واجهة برمجة التطبيقات توفر الحاوية.

في رأيي ، يجب أن تحاول الحفاظ على الأمور بسيطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top