質問

シナリオ:1)Maven Ear Projectを作成し、内部で戦争プロジェクトを作成する2)Beans.xmlを戦争プロジェクトに追加するWeb-INF/ 3)シンプルな@Steateless Beanを作成する

事業 - 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:

<?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 | _threadid = 33; _threadname = thread-1-1 ; | eJB testejbメソッドの呼び出し中にシステムの例外が発生しましたpublic void testejb.print1partner()javax.ejb.ejbexception:javax.ejb.ejbexception:javax.ejb.createexception:com.sun.ejbで統計を作成できませんでした。 containers.StatelessSessionContainer._getContext(statelesssessionContainer.java:448)at com.sun.ejb.containers.basecontainer.getContext(basecontainer.java:2467)at com.sun.ejb.containers.basecontainer.preintainer.preintainer.preintainer. com.sun.ejb.containers.basecontainer.callejbtimeout(basecontainer.java:3962)でcom.sun.ejb.containers.ejbtimerservice.delivertimeout(ejbtimerservice.java:1667) com.sun.ejb.containers.ejbtimerservice $ taskexpiredwork.run(ejbtimerservice.java:2485)でcom.sun.ejb.containers.ejbtimerserviceで100ドル(ejbtimerservice.java:98) er.call(executors.java:441)at java.util.concurrent.futuretask $ sync.innerrun(futuretask.java:303)at java.util.concurrent.futuretask.run(futuretask.java:138) .concurrent.threadpoolexecutor $ worker.runtask(threadpoolexecutor.java:886)at java.util.concurrent.threadpoolexecutor $ worker.run(shoodpoolexecutor.java:908)at java.lang.thread.run by:javax.ejb.ejbexception:javax.ejb.createexception:com.sun.ejb.containers.statelesssessioncontainer $ sessioncontextfactory.create(statelesssessesscontainer.java:720)でcom.sun.ejb.containers.tilの在庫を作成できませんでした。 com.sun.ejb.containers.statelesssessioncontainer._getContext(statelesssessesscontainer.java:443)のcom.sun.ejb.containers.statelesssessioncontainer.java:443)のcom.sun.ejb.containers.statelesssessioncontainer.java:443)のcom.sun.ejb.containers.statelesssessionspul.java:200)のgetobject(nonblockingpool.java:200)... 12原因:javax.ejb.createexception:statelelessを作成できませんでした。 com.sun.ejb.containers.statelesssessioncontainer.createstateNesseejb(statelesssessionContainer.java:528)のejb at com.sun.ejb.containers.statelesssessioncon com.sun.ejb.containers.statelesssessioncontainer $ sessioncontextfactory.create(statelesssessioncontainer.java:718)でcom.sun.ejb.containers.statelesssessioncontainer at com.sun.ejb.containers.statelesssessioncontainer.java:718)... concurrent.concurrenthashmap.get(concurrenthashmap.java:768)at org.jboss.weld.manager.beanmanagerimpl.getbean(beanmanagerimpl.java:1171)at org.jboss.weld.manager.beanmanimpl.getbean(beanmpl.javean) atorg.glassfish.weld.services.jcdiserviceimpl._createjcdiinjectontext(jcdiserviceimpl.java:145)at org.glassfish.weld.services.jcdiserviceimpl.createjcdiinjectext(jcdiserviceimpr.cencympl.javicempr.cencentext(crait)at jcdiserviceimpr.cencympr.cencympr.pr.cencympr.cencympr.pr.pr.pr.pr.pr.pr.pr.pr.pr.cencympr. (basecontainer.java:1616)at com.sun.ejb.containers.statelesssessioncontainer.createstatatedelessejb(statelesssessioncontainer.java:469)... | Oracle-Glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _threadid = 33 ; _threadname = thread-1; | ejb5119:expungingタイマー['13 @@ 127825602087 @@ server @@ oasys '' Timedobject = testejb '' Application = testo '' being_delivered '' container id = 837174471188488 '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' 04 19:36:45 Eest 2010 '' '' ' */15# *# *# *# *# *# *#NULL#NULL#NULL#true#print1Partner#0']

#| 2010-07-04T19:37:00.000+0300 |情報| Oracle-Glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _threadid = 33; _threadname =スレッド-1; |これはテストです|#

結果を期待する:

yrjaaaa

これはテストです

結果 :

例外

これはテストです


ケース2:Beans.xmlを削除します

結果を期待する:

yrjaaaa

これはテストです

結果

yrjaaaa

これはテストです

目標:他のWar&EJBプロジェクトを含む耳アーカイブ内のWebプロジェクトでEJB溶接(CDI)を使用したいのですが、Webプロジェクト(WAR + EJB)を分離する必要はありません。

ツールと環境:Maven&EJB 3.1&Weld&Glassfish 3.0.1

Q1:これはある種の特定のグラスフィッシュのバグかもしれませんか? Q2:問題の原因は何ですか? Q3:そのようなケースのデザインはありますか?

ありがとうございました。

役に立ちましたか?

解決 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 donTプロデューサーを参照してください

現在の設計は、EJBとWARモジュールを分離することです。

他のヒント

どちらかをaに包みます 。戦争 また パッケージ化してください ejb-jar 「伝統」の中 。耳. 。私は考えます 。戦争 強力なモジュール化のニーズのないプロジェクトの利便性としてのパッケージング。しかし、これは、使用するときにルールが変更されたという意味ではありません 。耳 パッケージング。

言い換えれば、私はあなたが両方のアプローチを混ぜることができるとは思わず、コンテナがそれをサポートすることを期待しないだろう。

サイドノートとして、なぜあなたがパッケージを詰めているのだろうか cdi-api 耳の中で、APIはコンテナによって提供されていると思います。

私の意見では、物事をシンプルに保つようにしてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top