代码之家  ›  专栏  ›  技术社区  ›  kislo_metal

CDI不在部署到Glassfish v3.0.1的EAR中工作

  •  2
  • kislo_metal  · 技术社区  · 15 年前

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

    脚本: 我耳朵里有EJB罐。

    这是我的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 u threaddid=48;u threadname=thread-1;a 系统异常发生在 对EJB合作伙伴服务的调用 方法公共无效 ua.co.oasys.fenix.persistence.partnersseservice.print1partner()。 javax.ejb.ejb异常: javax.ejb.ejb异常: javax.ejb.createException:无法 在处创建无状态EJB COM.Sun.EJB.Pask.StaselEsSeStudioCult.O.GETFILATION(StestelsSeStudioCult.java:448) 在 COM.Sun.EJB.Base.BaseCuffer-.GETEnrime:(BaseCeNeRel.java:2467) 在 COM.Sun.EJB.Pask.BaseCeNeReal.PrimeCukes(BaseCeNeRel.java:1860) 在 COM.Sun.EJB.Pask.BaseCeNeReal.CaleJBTimeOUT(BaseCeaNeRel.java:3962) 在 COM.Sun.EJB.容器.EJBTimeService . Deliver TimeOut.(EJBTimeService . Java:1667) 在 COM.Sun.EJB.Base.EJBTimeService .Access 100美元(EJBTimeService,Java:98) 在 COM.Sun.EJB.容器.EJBTimeService $TaskExpReWork.Run(EJBTimeService . Java:2485) 在 Java.U.L.U.L.执行器$ RunnabLeAdPult.调用(执行器.java:441) 在 Java.UTI.Out.FuturWorks$Sun.InErrun(FuturTestJava:JAVA:303) 在 Java.UTI.Actudio.FuturTask.Run(FuturTestJava:Java 138) 在 Java.UTI.Orth.TycRePoLeExtor的$Works.RunTube(TythPoLeExcel)。Java:886) 在 Java.UTI.Orth.TycRePoLeExtor的$Works.Run(TythPoLeExcel)。Java:908) 在 Java.Lang.Tr.Run(线程.java:619) 原因:javax.ejb.ejb异常: javax.ejb.createException:无法 在处创建无状态EJB COM.Sun.EJB.Pask.StaselEsSeSeCaseCults$StutsCutExtCutto.Cuto(StalelEsSeStudioCult.java:720) 在 COM.Sun.EJB.容器. UTI.PoC.NoBultCuangPoC.GETObjor(非阻塞池.java:200) 在 COM.Sun.EJB.Pask.StaselEsSeStudioCult.O.GETFILATION(StestelsSeStudioCult.java:443) …12个以上原因: javax.ejb.createException:无法 在处创建无状态EJB COM.Sun.EJB.Pask.StaselEsSeStudioCult.CurATestAtELSESEJB(StestelsSeStudioCult.java:528) 在 CONS.EJB.Case.StaselEsScript容器. Access 000美元(StalelEsSeStudioCult.java:90) 在 COM.Sun.EJB.Pask.StaselEsSeSeCaseCults$StutsCutExtCutto.Cuto(StalelEsSeStudioCult.java:718) …14个以上原因: java.lang.NullPointerException位于 Java.U.I.L.CONTURNEASHMAP.GET(CONCURNESTASMAP,Java:768) 在 Obj.BBOSS.Curn.Manager。BeanManager Err.GETBean.(BananManager IMP.java:1171) 在 Obj.BBOSS.Curn.Manager。BeanManager Err.GETBean.(BananManager IMP.java:132) 在 Org.gassFiels.Curror.Services .jcDeServieIMP..CytCyjjdiDebug上下文(JcDeServieIMP.java:145) 在 Org.gassFiels.Curror.Services .jcDeServieIMP.CurATE JCdIjEngulink上下文(JCdServEIIMP.java:122) 在 COM.Sun.EJB.Pask.BaseCeNeRel.CealEdjBistStand和上下文(BaseCeaNeRel.java:1616) 在 COM.Sun.EJB.Pask.StaselEsSeStudioCult.CurATestAtELSESEJB(StestelsSeStudioCult.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>
    

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

    META-INF中的bean.xml/

    在EAR中使用相同的配置而不使用EJB(在战争中,但是如果我在战争和焊接中使用EJB,则是相同的例外)

    问题1:怎么了?

    问题2:使用weld&ejb 3.1的规则是什么?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Pascal Thivent    15 年前

    焊接记录器和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记录器(使用logback作为绑定),并在glassfish 3.0.1下测试了您的代码,它只是起作用。

    推荐文章