سؤال

لدي بعض المشكلات في استخدام حقن لوجبر اللحام.

سيناريو: لدي أذن مع 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 ؛ _threadname = thread-1 ؛ حدث استثناء من النظام أثناء الاحتجاج على طريقة EJB PartnersService public void ua.co.oasys.fenix.persistence.partnersservice.print1partner () javax.ejb.ejbexception: javax.ejb.ejbexception: javax.ejb.ejb. EJB في com.sun.ejb.containers.StatelySessionContainer._getContext (SaturelessSessionContainer.java:448) في com.sun.ejb.containers.baseContainer.getContex preinvoke (basecontainer.java:1860) في com.sun.ejb.containers.baseContainer.callejbtimeout (baseContainer.java:3962) في com.sun.ejb.containers.ejbtimerservice.delivertimeout .ejb.containers.ejbtimerservice.access $ 100 (ejbtimerservice.java:98) في com.sun.ejb.containers.ejbtimerservice $ taskexpiredwork.run (ejbtimerservice.java:2485) على java.util.concurrent.executors $ runnableadapter.call (Executors.java:441) على java.util.concurrent.futureTask $ sync.innerrun (futuretask.java:303) في java.util.concurrent.futuretask.run (futuretask.java java: 138) في java.util.concurrent.threadpoolexecutor $ worker.runtask (threadpoolexecutor.java:886) في java.util.concurrent.threadpoolexecutor $ worker.run (threadpoolexecutor.java: (thread.java:619) سببها: javax.ejb.ejbexception: javax.ejb.createexception: لا يمكن إنشاء eJB عديمي الجنسية على com.sun.ejb.containers.statelesssessioncontain $ sessioncontextory.create .sun.ejb.containers.util.pool.nonblockingpool.getObject (nonblockingpool.java:200) في com.sun.ejb.containers.StatelySessionContainer._getContext (LatulssessionContainer.java:443) ... EJB.CreateException: لا يمكن إنشاء EJB عديمة الجنسية على com.sun.ejb.containers.statelesssessionContainer.createstatelessejb (LatelsessessionContainer.java:528) أ t com.sun.ejb.containers.StatelessSessionContainer.Access 000 دولار (chatelesssessionContainer.java:90) في com.sun.ejb.containers.statelesssessioncontainer $ sessionContextory.create (sturensessessaintainer.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 .getBean (BeanManagerImpl.Java:132) في org.glassfish.weld.services.jcdiserviceimpl._createjcdiinjectionContext (jcdiserviceimpl.java:145) في org.gavafish.weld.services.jcdiserviceimpl. sun.ejb.containers.baseContainer.createeJbinstanceAndContext (baseContainer.java:1616) في com.sun.ejb.containers.statelesssessionContainer.createstatelyejb (conversioncontainer.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 في meta-inf/

نفس التكوين الذي يعمل مع الحرب في الأذن بدون EJB (في الحرب ، ولكن إذا استخدمت EJB في الحرب واللحام - نفس الاستثناء)

س 1: ما هو الخطأ؟

س 2: ما هي قواعد استخدام اللحام و 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!");
    }
}

أنا أستخدم Weld-Logger بنفسي (مع تسجيل الدخول إلى الربط) واختبرت الكود الخاص بك تحت Glassfish 3.0.1 ، فهو يعمل فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top