Сценарий: 1) создать проект maven ear, создать военный проект внутри 2) добавить bean.xml в WEB-INF / 3 военного проекта) create simple @Steateless bean
project - http://drp.ly/1j5C3t
ejb bean:
@Stateless
@LocalBean
public class TestEjb {
@Inject
Logger log;
public TestEjb() {
}
@Schedule(hour = "*", minute = "*", second = "*/15")
public void print1Partner() {
log.info("Yrjaaaa");
System.out.println("This is test");
}
}
Maven POM-XML-проект войны:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Testo</artifactId>
<groupId>ua.co.testo</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Testo-web</artifactId>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<project.reporting.outputEncoding>
UTF-8
</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>ua.eset.oasys</groupId>
<artifactId>utopia</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ua.eset.oasys</groupId>
<artifactId>fenix</artifactId>
<version>1.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>-->
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.0.2-FCS</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.0.2-FCS</version>
<scope>provided</scope>
</dependency>
<!--J2EE-->
<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>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>testo-web</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<encoding>utf8</encoding>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Maven Pom.xml проекта ушей:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Testo</artifactId>
<groupId>ua.co.testo</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Testo-ear</artifactId>
<packaging>ear</packaging>
<properties>
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
<project.reporting.outputEncoding>
UTF-8
</project.reporting.outputEncoding>
</properties>
<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>-->
<dependency>
<groupId>ua.co.testo</groupId>
<artifactId>Testo-web</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
</dependencies>
<build>
<finalName>testo</finalName>
<plugins>
<plugin>
<!--<groupId>org.apache.maven.plugins</groupId>-->
<artifactId>maven-ear-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<modules>
<webModule>
<bundleFileName>testo-web.war</bundleFileName>
<groupId>ua.co.testo</groupId>
<artifactId>Testo-web</artifactId>
</webModule>
<!--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>
</project>
Контрольный пример 1 ( Проблема ): при развертывании проекта с beans.xml выдается исключение:
[# | 2010-07-04T19: 36: 50.003 + 0300 | ПРЕДУПРЕЖДЕНИЕ | оракул-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 33; _ThreadName = Thread-1; | Системное исключение произошло во время вызова метода EJB TestEjb public void TestEjb.print1Partner() javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: не удалось создать EJB без сохранения состояния в com.sun.ejb.containers.StatelessSessionContainer._getContext (StatelessSessionContainer.java:4b для com.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 (EJBTjava com: 16).sun.ejb.containers.вызов (Executors.java:441) на java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:303) на java.util.concurrent.FutureTask.run (FutureTask.java:138) на java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) в java.lang.Thread.run (Thread.java:619)javax.ejb.EJBException: javax.ejb.CreateException: не удалось создать EJB без сохранения состояния в com.sun.ejb.containers.StatelessSessionContainer $ SessionContextFactory.create (StatelessSessionContainer.java:720) на com.sun.ejb.containers.util.pool.NonBlockingPool.getObject (NonBlockingPool.java:200) на com.sun.ejb.containers.StatelessSessionContainer._getContext (StatelessSessionContainer.java:443) ... еще 12 причинby: javax.ejb.CreateException: Не удалось создать EJB без сохранения состояния в com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (StatelessSessionContainer.java:528) в com.sun.ejb.containers.StatelessSessionContainer.jession $:90) at com.sun.ejb.containers.StatelessSessionContainer $ SessionContextFactory.create (StatelessSessionContainer.java:718) ... еще 14 причин: java.lang.NullPointerException в java.util.concurrent.ConcurrentHashMap.get (Concurj.jpg: 768) в org.jboss.weld.manager.BeanManagerImpl.getBean (BeanManagerImpl.java:1171) в org.jboss.weld.manager.BeanManagerImpl.getBean (BeanManagerImpl.java:132viceswel.serg.serg.serg.JCDIServiceImpl._createJCDIInjectionContext (JCDIServiceImpl.java:145) в org.glassfish.weld.services.JCDIServiceImpl.createJCDIInjectionContext (JCDIServiceImpl.java:122) в com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext (BaseContainer.java:1616) в com.sun.ejbless_ContainStateStateState... еще 16 | #] [# | 2010-07-04T19: 36: 50.004 + 0300 | ИНФОРМАЦИЯ | oracle-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID= 33; _ThreadName = Thread-1; | EJB5119: Таймер удаления ['13 @@ 1278255602087 @@ server @@ oasys '' TimedObject = TestEjb '' Приложение = testo '' BEING_DELIVERED '' PERIODIC '' ID контейнера = 83771744647118848 'Вс июл 04 19:36:45 EEST 2010 '' 0 '' * / 15 # * # * # * # * # * # * # null # null # null # true # print1Partner #0 '] после [2] неудачных доставок | #]
[# | 2010-07-04T19: 37: 00.000 + 0300 | INFO | oracle-glassfish3.0.1 | javax.enterprise.system.std.com.sun.enterprise.v3.services.impl | _ThreadID = 33; _ThreadName = Thread-1; | Это тест | #]
ожидаемые результаты:
Yrjaaaa
Это тест
Результаты:
Исключение
Это тест
вариант 2: удалить бобы.xml
ожидаемые результаты:
Yrjaaaa
Это тест
Результаты
Yrjaaaa
Это тест
Цель: я хочу использовать ejb weld (CDI) в веб-проекте внутри архива ушей, включающем некоторые другие проекты war & ejb, но я не хочу отделять свой веб-проект (war + ejb)
инструменты и окружение: maven & ejb 3.1 & weld & glassfish 3.0.1
Q1: это может быть какая-то конкретная ошибка стеклянной рыбы?Q2: что может быть причиной проблемы?Q3: есть ли дизайн для такого случая?
Спасибо.