용접 로거 주입과 관련하여 몇 가지 문제가 있습니다.glassfish v3.0.1에 배포 된 귀에 CDI가 작동하지 않습니다.
시나리오 : 내부에 ejb-jar가있는 귀가 있습니다. 2010-07-02T19 |
: 25 : 35.003 + 0,300 | 경고 | 오라클 - glassfish3.0.1 print1Partner 내가 예외를 얻었다라고
@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); } }
:
이 내 EJB 빈입니다EJB 파트너 서비스 에서 호출 중에 시스템 예외가 발생했습니다. public void ua.co .oasys.fenix.persistence.PartnersServic e.print1Partner() 에 javax.ejb.EJBException : 에 javax.ejb.EJBException : javax.ejb.CreateException : com.sun.ejb.containers.StatelessSessionContainer._getContext (StatelessSessionContainer.java에서 무 EJB를 만들 수 없습니다 수 : 448 이 com.sun에서 com.sun.ejb.containers.BaseContainer.preInvoke (BaseContainer.java:1860에서) com.sun.ejb.containers.BaseContainer.getContext (BaseContainer.java:2467에서 ) ) .ejb.containers.BaseContainer.callEJBTimeout (BaseContainer.java:3962) at com.sun.ejb.containers.EJBTimerService.deliverTimeout (EJBTimerService.java:1667) at 있는 java.util에서 com.sun.ejb.containers.EJBTimerService $ TaskExpiredWork.run (EJBTimerService.java:2485) 에서 16,com.sun.ejb.containers.EJBTimerService.access $ 50 (EJBTimerService.java:98) . .Executors $ RunnableAdapter.call (Executors.java:441) at java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:303) at java.util.concurrent.FutureTask.run (FutureTask. 자바 : 138) java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) 에서 01,235,164에서 java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) 에서 에 javax.ejb.EJBException :에 의한java.lang.Thread.run (Thread.java:619) javax.ejb.CreateException가 : com.sun.ejb.containers.StatelessSessionContainer의 $에서 무 EJB를 만들 수 없습니다 수 com.sun.ejb.containers.StatelessSessionContainer._getContext에서 SessionContextFactory.create com.sun.ejb.containers.util.pool.NonBlockingPool.getObject (NonBlockingPool.java:200)에서 (StatelessSessionContainer.java:720) (StatelessSessionContainer.java:443) ... 12 자세한 내용 원인 : javax.ejb.CreateException : 에서 상태 비 저장 EJB를 만들 수 없습니다. com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (S tatelessSessionContainer.java:528) 에서 com.sun.ejb.containers.StatelessSessionContainer.access $ 000 com.sun.ejb.containers.StatelessSessionContainer $ SessionContextFactory.create에서 (StatelessSessionContainer.java:90) (StatelessSessionContainer.java:718) ... 14 기타 원인 : 의 java.lang.NullPointerException java.util.concurrent.ConcurrentHashMap.얻을 org.jboss.weld.manager.BeanManagerImpl.getBean에서 org.jboss.weld.manager.BeanManagerImpl.getBean (BeanManagerImpl.java:1171) 에서 (ConcurrentHashMap.java:768) (BeanManagerImpl.java:132) com.sun.ejb에서 org.glassfish.weld.services.JCDIServiceImpl.createJCDIInjectionContext (JCDIServiceImpl.java:122)에서 org.glassfish.weld.services.JCDIServiceImpl._createJCDIInjectionContext (JCDIServiceImpl.java:145) 에서 .containers.BaseContainer.createEjbInstanceAndContext (BaseContainer.java:1616) at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (StatelessSessionContainer.java:469) ... 16 개 | 사용 #]
:
<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>
: EJB 3.1, 글래스 피쉬 3.0.1
받는다는 의존성의 일부
bean.xml in META-INF/
동일한 구성 작업 전쟁 없이는 귀에 전쟁이 일어난다. (전쟁에서 나는 ejb를 사용하고 용접해도 - 같은 예외)
Q1 : 무엇이 잘못 되었나요?
Q2 : 용접 사용 규칙은 무엇입니까 & ejb 3.1?
이 [이전 질문]가 (http://stackoverflow.com/questions/3166596/ejb-3-1-in-war-package-in-web-inf -classes-javax-ejb-createexception-could-not) 해결 되었습니까? 그렇지 않다면 더 복잡한 것을 소개하기 전에 먼저 해결하려고 노력할 것입니다. –