我在使用焊接记录器注入时有一些问题。

设想: 我的耳朵里有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.container.ejb.com.sun.ejb.containers | _threadId = 48; _threadname = threadName = thread-thead-thead = thread-1; | | | | | | | | | |在EJB PartnersService方法的调用期间,发生了一个系统异常,public void ua.co.oasys.fenix.persistence.persistence.partnersservice.print1partner() EJB at 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. preinvoke(basecontainer.java:1860)com.sun.ejb.containers.basecontainer.basecontainer.callejbtimeout(basecontainer.java:3962)com.ejb.containers.ejbtimerservice.ejbtimerservice.deliverivertimertimertimertimertimertimeres.66 。 java.util.concurrent.executors $ runnableDapter.call(executors.java:441)at Java.util.util.concurrent.futuretask $ sync.innerrun(futuretask.java:303)at Java.util.concurrent.futask.futask.run(futeutask.run(futeutustask.fututun) Java:138)at Java.util.concurrent.threadpoolexecutor $ worker.runtask(threadpoolexecutor.java:886)at Java.util.util.concurrent.threadpoolexecutor $ worker.run.run(threadpoolexecutor.java:908)在java:908) (thread.java:619)引起: 。 ejb.createexception:无法在com.sun.ejb.containers.statatelessessessionContainer.createstatelessejb(SteclessessessionContainer.java.java:528)上创建无状态的EJB EJB t com.sun.ejb.containers.statelesssessioncontainer.access $ 000(SteclessessessionContainer.java:90)at Com.sun.ejb.containers.statelesssessionsessioncontainer $ sessigncontextextory.create.create.create.create.create.create.cotcotcontainer.java:718)。 .lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768) at org.jboss.weld.manager.BeanManagerImpl.getBean(BeanManagerImpl.java:1171) at org.jboss.weld.manager.BeanManagerImpl 。 sun.ejb.containers.basecontainer.createejbinstanceandcontext(basecontainer.java:1616)atcom.sun.ejb.containers.statelesssessisioncontainer.createstestestectestestelessejb(STECESSESSENTSESSIONCONTESSIONCONTESSIONCONTESSIONCONTESSIONCONTESSIONCONTESSIONCONTESSIONCONTESSIONCONTESSINTCONTAINER.JAVA.JAVA:469)

使用:EJB 3.1,玻璃鱼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在meta-inf/

相同的配置与没有EJB的EAR中的战争一起工作(在战争中,但如果我在战争和焊接中使用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