Вопрос

У меня есть некоторые проблемы с использованием инъекции регистратора сварного шва.

Сценарий: У меня есть ухо с ejb-jar внутри.

Это моя бобина EJB:

@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; _ththreadname = нить-1; | Исключение системы произошло во время вызова на PartnerSservice Service EJB PartnersService Public Void UA.coAsys.fenix.persistence.partnerssservice.print1partner () javax.ejb.ejbexception: javax.ejb.ejbexception: javax.ejb.createexception: Не удалось создать без гражданства EJB на com.sun.ejb.containers.statuzedssiceContainer._getcontextext (startelesssonscontcontainer.java:448) на com.sun.ejb.containers.basecontainer.getcontext (baseContainer.java:2467) на com.sun.ejb.containers.baseContainer. Preinvoke (BaseContainer.java:1860) на com.sun.ejb.containers.basecontainer.callejbtimeout (basecontainer.java:3962) на com.sun.ejb.containers.ejbtimerservice.delivertimeout (ejbtimerservice.java:1667) в Com.sun .ejb.containers.ejbtimerservice.access $ 100 (ejbtimerservice.java:98) на com.sun.ejb.containers.ejbtimerservice $ taskexpiredworkwork.run (ejbtimerservice.java:2485) в java.util.concurrent.executors $ runnableadapter.call (executors.java:441) на java.util.concurrent.futuretask $ sync.innerrrun (futuretask.java:303) в java.util.concurrent.futuretask.run (futuretask. Java: 138) на java.util.concurrent.threadpoolexecutors $ worker.runtask (threadpoolexecutors.java:886) на java.util.concurrent.threadpoolexecutors $ worker.run (threadpoolexecuTor.java:908) в java.lang.thread.run (Thread.java:619), вызванные: javax.ejb.ejbexception: javax.ejb.createeException: не мог создать нестандартный EJB на com.sun.ejb.containers.statuzedSessionContainer $ SessionContextFactory.java :720) в COM .sun.ejb.containers.util.pool.nonblockingpool.getobject (nonblockingpool.java:200) на com.sun.ejb.containers.statuzedSesssonsionContainer._getcontextextscondsonsionContainer._getcontext (startelSSesssonsioncontainer.java:443) ... 12 более вызвано: javax. ejb.createeException: не мог создать EJB без гражданства на com.sun.ejb.containers.statuzeSesssonsioncontainer.createstatuzedejb (startedssicecontainer.java:528) t com.sun.ejb.containers.statuzeSsessionContainer.Access $ 000 (startelSsesssondcontainer.java:90) на com.sun.ejb.containers.statuzedSesssonsionContainer $ sessioncontextfactory.Create (startedSesssonscontainer.java:718) ... 14 Более подробнее: Java .lang.nullpointerexception в java.util.concurrent.concurrenthamap.get (concurrenthashmap.java:768) на org.jboss.weld.manager.beanmanagerimpl.getbean (beanmanagerimpl.java:1171) на org.jboss.weld.manager.beanmanagerimpl .getBean (BeanManagerImpl.java:132) на org.glassfish.weld.services.jcdiserviceImpl._createjcdiinectionContext (jcdiserviceimpl.java:145) на org.glassfish.weld.services.jcdiserviceImpl.CreatejcdiiniveConcontext (jcdiserviceimpl.java:122) в ком. sun.ejb.containers.basecontainer.coneeeeejbinstanceandcontext (baseContainer.java:1616) на com.sun.ejb.containers.statuzedSesssonsionContainer.containers.statuzedejb (startedssesssonscontainer.java:469) ... 16 больше | #

Использование: 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 в мета-инф /

Та же конфигурация, работающая с войной в ухе без EJB (в войне, но если я использую EJB на войне и сварке - же исключение)

Q1: Что не так?

Q2: Каковы правила использования Weld & EJB 3.1?

Это было полезно?

Решение 2

Другие советы

Журнал сварки и артефакты 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!");
    }
}

Я использую WELD-Logger SAY (с помощью ogerback в качестве привязки) и проверил свой код под Glassfish 3.0.1, он просто работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top