質問

溶接ロガーインジェクションの使用に問題があります。

シナリオ: 私は内側にejb-jarの耳を持っています。

これは私のEJB Beanです:

@Stateless
@LocalBean
public class PartnersService {
    @Inject
    Logger log;

    @PersistenceContext(unitName = "Utopia")
    EntityManager em;

    public PartnersService() {
    }

    public OasysPartnerEntity getPartner(long id){
        return em.find(OasysPartnerEntity.class, id);
    }

    @Schedule( hour = "*", minute = "*", second = "*/15")
    public void print1Partner(){
        System.out.println("This is test");
        log.info("This is partner`s email under id 1 = ");
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
    public void saveTempPartnerTemp(OasysPartnerTempEntity part){
        em.persist(part);
    }

}

print1partnerが電話をかけたとき、私は例外を得ました:

| 2010-07-02T19:25:35.003+0300 |警告| Oracle-Glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _threadid = 48; _threadname = thread-1; | EJB PartnersServiceメソッドパブリックvoid Ua.co.co.oasys.fenix.partnerservice.partnerservice.print1partner()javax.ejb.ejbexception:javax.ejb.ejbexception:javax.ejb.createexception:stateleliestelesselessewellingを作成できませんでした。 com.sun.ejb.containers.statelesssessioncontainer._getContext(statelesssessionContainer.java:448)at com.sun.ejb.containers.basecontainer.getContext(basecontainer.java:2467)at com.sun.ejb.containers..sun.ejb.containers..containers..getcontext(basecontainer.java:2467) com.sun.ejb.containers.basecontainer.callejbtimeout(basecontainer.java:3962)でcom.sun.ejb.containers.basecontainer.callejbtimeoutでpreinvoke(basecontainer.java:1860)com.sun.ejb.containers.ejbtimerservice.delivertimout(ejbtimice:167 .ejb.containers.ejbtimerservice.access $ 100(ejbtimerservice.java:98)at com.sun.ejb.containers.ejbtimerservice $ taskexpiredwork.run(ejbtimerervice.java:2485) java.util.concurrent.executors $ runnableadapter.call(executors.java:441)at java.util.concurrent.futuretask $ sync.innerrun(futuretask.java:303)at java.util.current.futuretask.run(futuretask。 Java:138)at java.util.concurrent.threadpoolexecutor $ worker.runtask(threadpoolexecutor.java:886)at java.util.concurrent.threadpoolexecutor $ worker.run(threadpoolexecutor.java:908) (thread.java:619)原因:javax.ejb.ejbexception:javax.ejb.createexception:com.sun.ejb.containers.statelessessessioncontainer $ sessionscestextfactory.create(statelessessessionscontainer.java:720)com ait com .sun.ejb.containers.util.pool.nonblockingpool.getobject(nonblockingpool.java:200)at com.sun.ejb.containers.statelesssessionContainer._getContext(statelesssessionContainer.java:443)... ejb.createexception:com.sun.ejb.containers.statelesssessioncontainer.createstatatedelessejb(statelesssessesscontainer.java:528)でcom.sun.ejb.containers.statelesssessioncontainer.statelesssessioncontainerでステートレスejbを作成できませんでした。 t com.sun.ejb.containers.statelesssessioncontainer.access $ 000(statelesssessioncontainer.java:90)at com.sun.ejb.containers.statelesssessioncontainer $ sessioncestextfactory.create(statelessessessioncontainer.java:718) .lang.nullpointerexception at java.util.concurrent.concurrenthashmap.get(concurrenthashmap.java:768)at org.jboss.weld.manager.beanmanagerimpl.getbean(beanmanagerimpl.java:1171) .getBean(beanmanagerimpl.java:132)at org.glassfish.weld.services.jcdiserviceimpl._createjcdiinjectionContext(jcdiserviceimpl.java:145)at org.glassfish.weld.services.jcdierviceimpl.chcdimpl.crepcr.chcdimpl。 sun.ejb.containers.basecontainer.createejbinstanceandcontext(basecontainer.java:1616)at com.sun.ejb.containers.statelesssessioncontainer.createstateNesselessejb(StatelessSessionContainer.Java:469)...

使用:EJB 3.1、Glassfish 3.0.1

Maven依存関係の一部:

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

耳pom.xml

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


    </dependencies>
<build>
...
<configuration>
                    <modules>
...
                       <!--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>

bean.xml in meta-inf/

EJBなしで耳で戦争で動作する同じ構成(戦争中ですが、EJBを戦争と溶接で使用する場合 - 同じ例外)

Q1:何が問題なのですか?

Q2:Weld&EJB 3.1を使用するルールは何ですか?

役に立ちましたか?

他のヒント

溶接ロガーとsflf4jアーティファクトはそうです いいえ 使用する場合は、それらを使用する場合は、アプリケーションに追加する必要があります。

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

それで

import javax.inject.Inject;
import org.slf4j.Logger;

public class Foo {
    @Inject
    private Logger logger;

    public void bar() {
        logger.info("Look ma, I'm using an injected Logger!");
    }
}

私は溶接ロガーを自分で使用しています(バインディングとしてログバックを使用して)Glassfish 3.0.1でコードをテストしましたが、機能します。

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