EJB 3.1 в пакете war в WEB-INF / classes - javax.ejb.CreateException: не удалось создать EJB без сохранения состояния - PullRequest
3 голосов
/ 02 июля 2010

Думаю, я неправильно понял правила упаковки bean-компонентов ejb в пакет war.

Цель: Я хочу использовать bean-компоненты ejb в пакете war.

Сценарий: У меня есть бин в моей войне:

@Stateless
public class RegistrationServiceBean {

    @PersistenceContext(unitName = "Utopia")
    EntityManager em;

    public RegistrationServiceBean() {}

    @Schedule(hour = "*", minute = "*", second = "*/15")
    public void baseRegistration() {
        System.out.println("call from ejb!!");
    }

    public void saveTempPartner(OasysPartnerTempEntity part) {
        em.persist(part);
        em.flush();
    }
}

Он успешно развернут на сервере Glassfish (ogs 3.0.1):

[# | 2010-07-02T16: 53: 59.728 + 0300 | INFO | oracle-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 36; _ThreadName = Thread-1; | Переносимые имена JNDI дляEJB RegistrationServiceBean: [java: global / oasys / hydra / RegistrationServiceBean! Ua.co.oasys.hydra.beans.RegistrationServiceBean, java: global / oasys / hydra / RegistrationServiceBean] | #]

но когдапланировщик запускается, я получаю:

[# | 2010-07-02T16: 54: 20.004 + 0300 | ПРЕДУПРЕЖДЕНИЕ | oracle-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 38; _ThreadName = Thread-1; | Системное исключение произошло во время вызова метода EJB RegistrationServiceBean public void ua.co.oasys.hydra.beans.RegistrationServiceBean.baseRegistration () javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: не удалось создать объект EJB без сохранения состояния в com.sun.ejb.containers_getContext (StatelessSessionContainer.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 $ TaskExpiredWork.run (EJBTimerService.java:2485) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:441) в javacutil..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.pooltainu.NonBlockingPool.getObject (NonBlockingPool.java:200) at com.sun.ejb.containers.StatelessSessionContainer._getContext (StatelessSessionContainer.java:443) ... еще 12 причин: javax.ejb.CreateException: не удалось создать в состоянии без состояний:.sun.ejb.containers.create (StatelessSessionContainer.java:718) ... еще 14 причин: java.lang.NullPointerException в java.util.concurrent.ConcurrentHashMap.get (ConcurrentHashMap.java:768) в org.jboss.weld.manager.BeanManagerImpl.getBean (BeanManagerImpl.java:jss.w.wg или в .g.BeanManagerImpl.getBean (BeanManagerImpl.java:132) в org.glassfish.weld.services.JCDIServiceImpl._createJCDIInjectionContext (JCDIServiceImpl.java:145) в org.glassfish.weld.serreIJIIISJI.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext (BaseContainer.java:1616) в com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (StatelessSessionContainer.java:469) ... 16 больше | 10 * 10 *

Все приложение, упакованное в ухо, с войной внутри, работает хорошо, если я развертываю ejb в ejb-jar, но это не то, что мне нужно.

После удаления зависимости от сварки во время развертывания я получил исключение:

com.sun.enterprise.admin.cli.CommandException: удаленный сбой: исключение при загрузке приложения: org.glassfish.deployment.common.DeploymentException: от java.lang.NoClassDefFoundError: ua /co / oasys / hydra / beans / RegistrationServiceBean

Похож на ошибка стеклянной рыбы , но я не уверен.


обновления: веб.xml:

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>CO UA Partners</display-name>
    <description>CO UA Partners Site</description>

    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>

    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>


    <!--Prime Faces-->
    <context-param>
        <param-name>primefaces.skin</param-name>
        <param-value>sam</param-value>
    </context-param>



    <!--Prime Faces end-->

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>


    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
        <param-value>true</param-value>
    </context-param>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>

    <security-role>
        <role-name>manager</role-name>
    </security-role>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Manager Pages</web-resource-name>
            <url-pattern>/faces/partner/manager/*</url-pattern>
            <url-pattern>/partner/manager/*</url-pattern>
            <url-pattern>/partner/*</url-pattern>
            <url-pattern>/faces/partner/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>manager</role-name>
        </auth-constraint>
    </security-constraint>

    <security-role>
        <role-name>admin</role-name>
    </security-role>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Admin Pages</web-resource-name>
            <url-pattern>/faces/partner/admin/*</url-pattern>
            <url-pattern>/partner/admin/*</url-pattern>
            <url-pattern>/partner/*</url-pattern>
            <url-pattern>/faces/partner/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

    <!--roots-->


    <security-role>
        <role-name>rmanager</role-name>
    </security-role>
    <security-role>
        <role-name>radmin</role-name>
    </security-role>
    <security-role>
        <role-name>bookkeper</role-name>
    </security-role>


    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>oasysRealm</realm-name>
        <form-login-config>
            <form-login-page>/faces/login.xhtml</form-login-page>
            <form-error-page>/faces/loginError.xhtml</form-error-page>
        </form-login-config>
    </login-config>



</web-app>

Исключение NoClassDefFoundError:

[# | 2010-07-04T16: 16: 26.401 + 0300 | SEVERE | oracle-glassfish3.0.1 | javax.enterprise.system.core.com.sun.enterprise.v3.server | _ThreadID = 25; _ThreadName = Thread-1; | Исключительная ситуация при загрузке приложения org.glassfish.deployment.common.DeploymentException: от java.lang.NoClassDefFoundError: ua / co/ oasys / hydra / RegistrationServiceBea at org.glassfish.weld.WeldDeployer.event (WeldDeployer.java:167) в org.glassfish.kernel.event.EventsImpl.send (EventsImpl.java:125) в org.glassfish.internal.data.ApplicationInfo.load (ApplicationInfo.java:224) в com.sun.enterprise.v3.server.ApplicationLifecycle.deploy (ApplicationLifecycle.java:338) в com.sun.enterprise.v3.server.ApplicationLifecycle.deploy (ApplicationLifecycle.java:183) в org.glassfish.deployment.admin.DeployCommand.execute (DeployCommand.java:272) в com.sun.enterprise.v3.admin.CommandRunnerImpl $ 1.execute (CommandRunnerImpl.java:305) в com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand (CommandRunnerImpl.jpg320) на com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand (CommandRunnerImpl.java:1176) на com.sun.enterprise.v3.admin.CommandRunnerImpl.access $ 900 (CommandRunnerImpl.java:83) на com.sun.enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext.execute (CommandRunnerImpl.java:1235) в com.sun.enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext.execute (CommandRunnerImpl.java:1224) в com.sun.enterprise.v3.admin.AdminAdapter.doCommand (AdminAdapter.java:365) на com.sun.enterprise.v3.admin.AdminAdapter.service (AdminAdapter.java:204) на com.sun.grizzly.tcp.http11..GrizzlyAdapter.service (GrizzlyAdapter.java:166) в com.sun.enterprise.v3.server.HK2Dispatcher.dispath (HK2Dispatcher.java:100) в com.sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMaa.java: 245) на com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java:791) на com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java:693) на com.sun.grizzly.http.ProcessorTask.process (ProcessorTask.java:954) на com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:170) на com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter (DefaultProtocolC1in atj)..sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:102) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:88) в com.sun.grizzly.http.HttpProtocolChain.execute (HttpP.rotocolChain.java:76) на com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java:53) на com.sun.grizzly.SelectionKeyContextTask.call (SelectionKeyContextTask.java:57T) con.un.un(ContextTask.java:69) в com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:330) в com.sun.grizzly.util.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:309) вjava.lang.Thread.run (Thread.java:619) Вызывается: java.lang.RuntimeException: by java.lang.NoClassDefFoundError: ua / co / oasys / hydra / RegistrationServiceBea в javassist.util.proxy.ProxyFactory3createCareate.createProxyFactory.java:344) в javassist.util.proxy.ProxyFactory.createClass2 (ProxyFactory.java:314) вjavassist.util.proxy.ProxyFactory.createClass (ProxyFactory.java:273) в org.jboss.weld.util.Proxies.createProxyClass (Proxies.java:187) в org.jboss.weld.util.Proxies.lass создать Proxy.Java: 168) в org.jboss.weld.bean.SessionBean.initProxyClass (SessionBean.java:221) в org.jboss.weld.bean.SessionBean.initialize (SessionBean.java:143) в org.jboss.weld.oots.AbstractBeanDeployer.deploy (AbstractBeanDeployer.java:110) в org.jboss.weld.bootstrap.BeanDeployment.deployBeans (BeanDeployment.java:151) в org.jboss.weld.bootstrap.woots.plborg.glassfish.weld.WeldDeployer.event (WeldDeployer.java:165) ... еще 30 причин: javassist.CannotCompileException: от java.lang.NoClassDefFoundError: ua / co / oasys / hydra / RegistrationServiceBea.FactoryHelper.toClass (FactoryHelper.java:169) на javassist.util.proxy.ProxyFactory.createClass3 (ProxyFactory.java:339) ... ... еще 40 причин: java.lang.NoClassDefFoundError: ua / co / oasys / hydraрegistrationServiceBea по адресу java.lang.ClassLoader.defineClass1 (собственный метод) по адресу java.lang.ClassLoader.defineClassCond (ClassLoader.java:632) по адресу java.lang.ClassLoader.defineClass (ClassLoader.java:6fhond.jpg).invoke (Неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в javassist.util.proxy.FactoryHelper (HelperHelper)Java: 181) на javassist.util.proxy.FactoryHelper.toClass (FactoryHelper.java:163) ... еще 41 Причина: java.lang.ClassNotFoundException: ua.co.oasys.hydra.RegistrationServiceBea на com.sun.enterprise.loader.ASURLClassLoader.findClassData (ASURLClassLoader.java:713) в com.sun.enterprise.loader.ASURLClassLoader.findClass (ASURLClassLoader.java:626) в java.lang.ClassLoader.loadClass (ClassLoader.java:30).lang.ClassLoader.loadClass (ClassLoader.java:248) ... еще 49 | #]


Обновление 2:

Если удалить /переименуйте файл ejbs beans.xml, успешно развернутый.


Обновление 3:

oasys.ear

jar xfv ~ / Sites / workspace / Intellij_IDEA_9 / Oasys/Oasys-ear/target/oasys.ear создано: META-INF / накачено: META-INF / MANIFEST.MF создано: lib / inflated: fenix.jar накачено: hydra.war накачено: javax.inject-1.jar накачено:jboss-interceptor-api-1.1-CR1.jar раздуто: jsr250-api-1.0.jar раздуто: lib / cdi-api-1.0-CR4.jar раздуто: lib / eclipselink-2.1.0-SNAPSHOT.jar раздуто: lib /javax.persistence-2.0.0.jar раздуто: lib / slf4j-api-1.6.0.jar раздуто: lib / slf4j-jdk14-1.6.0.jar раздуто: lib / utopia.jar раздуто: lib / weld-logger-1.0.0-CR2.jar раздуто: META-INF / application.xml
создано: META-INF / maven / создано: META-INF / maven / ua.co.oasys / создано: META-INF / maven / ua.co.oasys / oasys-ear / накачанный: META-INF / maven / ua.co.oasys / oasys-ear / pom.xml накачанный: META-INF / maven / ua.co.oasys / oasys-ear / pom.свойства

hydra.war

jar xfv ~ / Сайты / Рабочая область / Вtellij_IDEA_9 / Oasys / Hydra / target / hydra.war создано: META-INF / inflated: META-INF / MANIFEST.MF создано: партнер / создано: партнер / администратор /
создано: партнер / менеджер / создано: ресурсы / создано: resources / css /
созданный: ресурсы / css / sam / создан: ресурсы / css / sam / images / создан: ресурсы / макет / создан: ресурсы / безопасность / создан: root /
создан: root / admin/ создал: корень / бухгалтер / создан: корень / менеджер / создан: WEB-INF /
создан: WEB-INF / classes / создан: WEB-INF / classes / ua / создан: WEB-INF / classes / ua /co / создал: WEB-INF / classes / ua / co / oasys /
создал: WEB-INF / classes / ua / co / oasys / hydra /
создал:WEB-INF / classes / ua / co / oasys / hydra / common / созданный: WEB-INF / классы / иа / ш / OASYS / гидры / i18n / создано: WEB-INF / классы / иа / ш / OASYS / гидры / мб / создано: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / регистрация / создано: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / безопасность / создано: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / создано: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / ш / создано: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / ш / OASYS / создано: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / ш / OASYS / гидры / создано: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / ш / OASYS / гидры / i18n / создано: WEB-INF / lib / inflated: html5.html раздут: index.xhtml надутый: login.xhtml надутый: loginError.xhtml раздули: partner / admin / admin.xhtml завышены: партнер / менеджер / manager.xhtml надутый: partner / partner.xhtml надутый: register.xhtml надутый: resources / css / cssLayout.css завышены: resources / css / default.css завышены: resources / css / master.css завышены: ресурсы / CSS / сэм / изображения / sprite.png завышены: ресурсы / CSS / сэм / изображения / щ-bg_flat_0_aaaaaa_40x100.png завышены: ресурсы / CSS / сэм / изображения / щ-bg_flat_75_ffffff_40x100.png завышены: ресурсы / CSS / сэм / изображения / щ-bg_glass_55_fbf9ee_1x400.png завышены: ресурсы / CSS / сэм / изображения / щ-bg_glass_65_ffffff_1x400.png завышены: ресурсы / CSS / сэм / изображения / щ-bg_glass_75_dadada_1x400.png завышены: ресурсы / CSS / сэм / изображения / щ-bg_glass_75_e6e6e6_1x400.png завышены: ресурсы / CSS / сэм / изображения / щ-bg_glass_95_fef1ec_1x400.png завышены: resources / css / sam / images / ui-bg_highlight-soft_75_cccccc_1x100.png надуты: ресурсы / CSS / сэм / изображения / щ-icons_222222_256x240.png завышены: ресурсы / CSS / сэм / изображения / щ-icons_2e83ff_256x240.png завышены: ресурсы / CSS / сэм / изображения / щ-icons_454545_256x240.png завышены: ресурсы / CSS / сэм / изображения / щ-icons_888888_256x240.png завышены: ресурсы / CSS / сэм / изображения / щ-icons_cd0a0a_256x240.png надутый: resources / css / sam / skin.css завышены: Ресурсы / макет / doublevontent.xhtml завышены: Ресурсы / макет / header.xhtml завышены: Ресурсы / макет / masterLayout.xhtml завышены: ресурсы / премьер-тема / Вейдер / skin.css завышены: ресурсы / безопасность / loginPanel.xhtml надутый: root / admin / radmin.xhtml завышены: корень / бухгалтер / rbookkeeper.xhtml надутый: root / manager / rmanager.xhtml надутый: WEB-INF / beans.xml надутый: WEB-INF / классы / иа / ш / OASYS / гидры / общие / SkinBean.class завышены: WEB-INF / классы / иа / ш / Oasys / гидры / i18n / messages.properties завышены: WEB-INF / классы / иа / ш / Oasys / гидры / i18n / messages_en_US.properties завышены: WEB-INF / классы / иа / ш / Oasys / гидры / i18n / messages_ru_RU.properties завышены: WEB-INF / классы / иа / ш / Oasys / гидры / i18n / messages_uk_UA.properties завышены: WEB-INF / классы / иа / ш / OASYS / гидры / мб / CustomCharacterEncodingFilter.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / мб / Messenger.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / регистрация / TempReg.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / безопасность / LogOutActionListener.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / безопасность / LogoutServlet.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / безопасность / RulesBean.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / безопасность / SecurityBacking.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / безопасность / UserBean.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / Мб / безопасность / UserManager.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / ш / OASYS / гидры / i18n / Messages.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / ш / OASYS / гидры / i18n / Utf8ResourceBundle $ 1.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / ш / OASYS / гидры / i18n / Utf8ResourceBundle $ Utf8PropertyResourceBundle.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / мб / иа / ш / OASYS / гидры / i18n / Utf8ResourceBundle.class завышены: WEB-INF / классы / иа / ш / OASYS / гидры / RegistrationServiceBea.classнадутый: WEB-INF /face-config.xml

надутый: WEB-INF / lib / primefaces-2.1.RC1-SNAPSHOT.jar надут: WEB-INF / sun-web.xml надутый: WEB-INF/web.xml создал: META-INF / maven / создал: META-INF / maven / ua.co.oasys / создал: META-INF / maven / ua.co.oasys / hydra / раздутый: META-INF / maven /ua.co.oasys / hydra / pom.xml раздут: META-INF / maven / ua.co.oasys / hydra / pom.properties


  • Q1: это проходимоиспользовать компоненты EJB, упакованные в войне (спецификация печальна, что это правда)?
  • Q2: я должен описать некоторую конфигурацию с помощью ejb-jar.xml?
  • Q3: что может быть причинойпроблема?

Ответы [ 3 ]

1 голос
/ 03 июля 2010

Это похоже на ошибку Glassfish, но я не уверен.

Трудно сказать, тем более что вы не предоставили трассировку стека для NoClassDefFoundError, но в любом случае сценарий кажется другим.

В1: можно ли использовать бобы ejb, упакованные в войну (спецификация печальна, что это правда)?

Определенно. Вы можете поместить классы EJB в WEB-INF/classes или упаковать их как EJB-JAR и поместить их в WEB-INF/lib. У меня есть несколько демонстрационных приложений, делающих это.

Q2: я должен описать некоторую конфигурацию с помощью ejb-jar.xml?

Нет, ничто не заставляет вас делать это.

Q3: что может быть причиной проблемы?

Проблема в том, что я не могу воспроизвести проблему ... Я развернул ваш EJB в веб-приложении с включенными [ejb, jpa, web, webservices, weld] движками (я просто изменил его, чтобы вставить мою сущность в запланированный метод), и просто работает. Протестировано с современной версией GlassFish 3.0.1. Поэтому я подозреваю, что на вашей стороне ошибка или проблема конфигурации.

На всякий случай, можете ли вы предоставить вывод jar xfv yourapp.war (а также показать свой web.xml)?

1 голос
/ 04 июля 2010

См .: CDI с ejb 3.1, сварщик на glassfish v3.0.1 Там я опишу шаг для воспроизведения этой проблемы.

Как я понимаю - нет возможности использовать CDI& EJB в одном веб-модуле, упакованном в архив с ушами, и развернутом t glassfish 3.0.1.

В настоящее время предполагается разделить модуль ejb и war - по крайней мере, он работает для меня.

0 голосов
/ 03 июля 2010

EJB, упакованные в WAR, используют профиль web / lite EE6.Насколько я знаю, таймеры и некоторые другие функции не поддерживаются в этом профиле. Так что, если вы хотите использовать таймеры, вам нужно будет упаковать свои ejbs традиционным способом ejbjar + war + ear.

Я не смог найти ссылку на веб-профиль, этоближе всего к сравнению: http://www.theserverside.com/news/1321142/Part-Three-New-Features-in-EJB-31

Редактировать: Я исправлен, военная упаковка фактически описана в JSR 318, EJB 3.1.Поскольку я не смог найти никаких ограничений на доступные функции в этом разделе спецификации, таймеры также должны работать в ejb, упакованном в войну.

...