EJB 3.1 no pacote war em WEB-INF / classs – javax.ejb.CreateException: Não foi possível criar o EJB sem estado

Eu acho que eu entendi errado as regras de empacotamento dos beans ejb no pacote war.

Objetivo: Eu quero usar ejb beans no pacote war.

Cenário: Eu tenho algum bean na minha guerra:

@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(); } } 

É implantado com sucesso no servidor 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 ; | Nomes JNDI portáveis ​​para EJB RegistrationServiceBean: [java: global / oasys / hydra / RegistrationServiceBean! Ua.co.oasys.hydra.beans.RegistrationServiceBean, java: global / oasys / hydra / RegistrationServiceBean] | #]

Mas quando o agendador está começando eu recebo:

[# | 2010-07-02T16: 54: 20.004 + 0300 | AVISO | oracle-glassfish3.0.1 | javax.enterprise.system.container.ejb.com.sun.ejb.containers | _ThreadID = 38; _ThreadName = Thread-1 Uma exceção do sistema ocorreu durante uma chamada no método EJB RegistrationServiceBean public void ua.co.oasys.hydra.beans.RegistrationServiceBean.baseRegistration () javax.ejb.EJBException: javax.ejb.EJBException: javax.ejb.CreateException: Não foi possível crie EJB sem estado em com.sun.ejb.containers.StatelessSessionContainer._getContext (StatelessSessionContainer.java:448) em com.sun.ejb.containers.BaseContainer.getContext (BaseContainer.java:2467) em com.sun.ejb.containers. BaseContainer.preInvoke (BaseContainer.java:1860) em com.sun.ejb.containers.BaseContainer.callEJBTimeout (BaseContainer.java:3962) em com.sun.ejb.containers.EJBTimerService.deliverTimeout (EJBTimerService.java:1667) at com .sun.ejb.containers.EJBTimerService.access $ 100 (EJBTimerService.java:98) em com.sun.ejb.containers.EJBTimerService $ TaskExpiredWork.run (EJBTimerService .java: 2485) em java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:441) em java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:303) em java.util.concurrent. FutureTask.run (FutureTask.java:138) em java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) em java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) em java .lang.Thread.run (Thread.java:619) Causado por: javax.ejb.EJBException: javax.ejb.CreateException: Não foi possível criar o EJB sem estado em com.sun.ejb.containers.StatelessSessionContainer $ SessionContextFactory.create (StatelessSessionContainer. java: 720) em com.sun.ejb.containers.util.pool.NonBlockingPool.getObject (NonBlockingPool.java:200) em com.sun.ejb.containers.StatelessSessionContainer._getContext (StatelessSessionContainer.java:443) … 12 mais Causado por: javax.ejb.CreateException: Não foi possível criar o EJB sem estado em com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (StatelessSessionContai ner.java:528) em com.sun.ejb.containers.StatelessSessionContainer.access $ 000 (StatelessSessionContainer.java:90) em com.sun.ejb.containers.StatelessSessionContainer $ SessionContextFactory.create (StatelessSessionContainer.java:718) … 14 mais Causado por: java.lang.NullPointerException em java.util.concurrent.ConcurrentHashMap.get (ConcurrentHashMap.java:768) em org.jboss.weld.manager.BeanManagerImpl.getBean (BeanManagerImpl.java:1171) em org.jboss .weld.manager.BeanManagerImpl.getBean (BeanManagerImpl.java:132) em org.glassfish.weld.services.JCDIServiceImpl._createJCDIInjectionContext (JCDIServiceImpl.java:145) em org.glassfish.weld.services.JCDIServiceImpl.createJCDIInjectionContext (JCDIServiceImpl.java : 122) em com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext (BaseContainer.java:1616) em com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB (StatelessSessionContainer.java:469) … 16 mais | #]

Todos os aplicativos empacotados no ouvido com war dentro, funciona bem se eu estiver implantando o ejb no ejb-jar, mas não é o que eu quero.

Depois que eu removi a dependência de solda, obtive exceção durante a implantação:

com.sun.enterprise.admin.cli.CommandException: falha remota: Exceção ao carregar o aplicativo: org.glassfish.deployment.common.DeploymentException: por java.lang.NoClassDefFoundError: ua / co / oasys / hydra / beans / RegistrationServiceBean

É semelhante ao bug glassfish , mas não tenho certeza.


atualizações: web.xml:

   CO UA Partners CO UA Partners Site  javax.faces.PROJECT_STAGE Development   javax.faces.DEFAULT_SUFFIX .xhtml   javax.faces.STATE_SAVING_METHOD server    primefaces.skin sam    Faces Servlet javax.faces.webapp.FacesServlet 1   Faces Servlet /faces/*   javax.faces.FACELETS_SKIP_COMMENTS true    30    faces/index.xhtml   manager    Manager Pages /faces/partner/manager/* /partner/manager/* /partner/* /faces/partner/*   manager    admin    Admin Pages /faces/partner/admin/* /partner/admin/* /partner/* /faces/partner/*   admin     rmanager   radmin   bookkeper   FORM oasysRealm  /faces/login.xhtml /faces/loginError.xhtml    

Exceção 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 | Exception ao carregar o aplicativo org.glassfish.deployment.common.DeploymentException: por java.lang.NoClassDefFoundError: ua / co / oasys / hydra / RegistrationServiceBea em org.glassfish.weld.WeldDeployer.event (WeldDeployer.java:167) em org.glassfish.kernel.event.EventsImpl.send (EventsImpl.java:125) em org.glassfish.internal.data.ApplicationInfo.load (ApplicationInfo.java:224) em com.sun.enterprise.v3.server.ApplicationLifecycle .deploy (ApplicationLifecycle.java:338) em com.sun.enterprise.v3.server.ApplicationLifecycle.deploy (ApplicationLifecycle.java:183) em org.glassfish.deployment.admin.DeployCommand.execute (DeployCommand.java:272) em com.sun.enterprise.v3.admin.CommandRunnerImpl $ 1.execute (CommandRunnerImpl.java:305) em com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand (CommandRunnerImpl.java:320) em com.sun.enterprise.v3 .admin.CommandRu nnerImpl.doCommand (CommandRunnerImpl.java:1176) em com.sun.enterprise.v3.admin.CommandRunnerImpl.access $ 900 (CommandRunnerImpl.java:83) em com.sun.enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext.execute (CommandRunnerImpl .java: 1235) em com.sun.enterprise.v3.admin.CommandRunnerImpl $ ExecutionContext.execute (CommandRunnerImpl.java:1224) em com.sun.enterprise.v3.admin.AdminAdapter.doCommand (AdminAdapter.java:365) em com.sun.enterprise.v3.admin.AdminAdapter.service (AdminAdapter.java:204) em com.sun.grizzly.tcp.http11.GrizzlyAdapter.service (GrizzlyAdapter.java:166) em com.sun.enterprise.v3. server.HK2Dispatcher.dispath (HK2Dispatcher.java:100) em com.sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java:245) em com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask. java: 791) em com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java:693) em com.sun.grizzly.http.ProcessorTask.process (ProcessorTask.java:954) em com.sun.grizzly.http .DefaultProtocolFilte r.execute (DefaultProtocolFilter.java:170) em com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter (DefaultProtocolChain.java:135) em com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:102) em com.sun.grizzly .DefaultProtocolChain.execute (DefaultProtocolChain.java:88) em com.sun.grizzly.http.HttpProtocolChain.execute (HttpProtocolChain.java:76) em com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java:53) at com. sun.grizzly.SelectionKeyContextTask.call (SelectionKeyContextTask.java:57) em com.sun.grizzly.ContextTask.run (ContextTask.java:69) em com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java: 330) em com.sun.grizzly.util.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:309) em java.lang.Thread.run (Thread.java:619) Causado por: java.lang.RuntimeException: por java. lang.NoClassDefFoundError: ua / co / oasys / hydra / RegistrationServiceBea em javassist.util.proxy.ProxyFactory.createClass3 (ProxyFactory.java:344) em javassis t.util.proxy.ProxyFactory.createClass2 (ProxyFactory.java:314) em javassist.util.proxy.ProxyFactory.createClass (ProxyFactory.java:273) em org.jboss.weld.util.Proxies.createProxyClass (Proxies.java: 187) em org.jboss.weld.util.Proxies.createProxyClass (Proxies.java:168) em org.jboss.weld.bean.SessionBean.initProxyClass (SessionBean.java:221) em org.jboss.weld.bean.SessionBean .initialize (SessionBean.java:143) em org.jboss.weld.bootstrap.AbstractBeanDeployer.deploy (AbstractBeanDeployer.java:110) em org.jboss.weld.bootstrap.BeanDeployment.deployBeans (BeanDeployment.java:151) na org. jboss.weld.bootstrap.WeldBootstrap.deployBeans (WeldBootstrap.java:377) at org.glassfish.weld.WeldDeployer.event (WeldDeployer.java:165) … 30 mais Causado por: javassist.CannotCompileException: por java.lang. NoClassDefFoundError: ua / co / oasys / hydra / RegistrationServiceBea em javassist.util.proxy.FactoryHelper.toClass (FactoryHelper.java:169) em javassist.util.proxy.ProxyFactory.createClass3 (ProxyFactory.java:339) … 40 meses re Causado por: java.lang.NoClassDefFoundError: ua / co / oasys / hydra / RegistrationServiceBea em java.lang.ClassLoader.defineClass1 (Native Method) em java.lang.ClassLoader.defineClassCond (ClassLoader.java:632) em java.lang .ClassLoader.defineClass (ClassLoader.java:616) em sun.reflect.GeneratedMethodAccessor196.invoke (Unknown Source) em sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) em java.lang.reflect.Method.invoke (Method .java: 597) em javassist.util.proxy.FactoryHelper.toClass2 (FactoryHelper.java:181) em javassist.util.proxy.FactoryHelper.toClass (FactoryHelper.java:163) … 41 mais Causado por: java.lang .ClassNotFoundException: ua.co.oasys.hydra.RegistrationServiceBea em com.sun.enterprise.loader.ASURLClassLoader.findClassData (ASURLClassLoader.java:713) em com.sun.enterprise.loader.ASURLClassLoader.findClass (ASURLClassLoader.java:626) em java.lang.ClassLoader.loadClass (ClassLoader.java:307) em java.lang.ClassLoader.loadClass (ClassLoader.java:248) … 49 meses re | #]


Atualização 2:

Se remover / renomear o arquivo beans.xml ejbs implantado com sucesso.


Atualização 3:

oasys.ear

jar xfv ~ / Sites / espaço de trabalho / Intellij_IDEA_9 / Oasys / Oasys-ear / target / oasys.ear criado: META-INF / inflado: META-INF / MANIFEST.MF criado: lib / inflated: fenix.jar inflado: hydra.war inflado: javax.inject-1.jar inflacionado: jboss-interceptor-api-1.1-CR1.jar inflacionado: jsr250-api-1.0.jar inflacionado: lib / cdi-api-1.0-CR4.jar inflacionado: lib / eclipselink- 2.1.0-SNAPSHOT.jar inflado: lib / javax.persistence-2.0.0.jar inflacionado: lib / slf4j-api-1.6.0.jar inflacionado: lib / slf4j-jdk14-1.6.0.jar inflado: lib / utopia.jar inflado: lib / weld-logger-1.0.0-CR2.jar inflado: META-INF / application.xml
criado: META-INF / maven / criado: META-INF / maven / ua.co.oasys / criado: META-INF / maven / ua.co.oasys / oasys-ouvido / inflado: META-INF / maven / ua. co.oasys / oasys-ear / pom.xml inflado: META-INF / maven / ua.co.oasys / oasys-ear / pom.properties

hydra.war

jar xfv ~ / Sites / espaço de trabalho / Intellij_IDEA_9 / Oasys / Hydra / target / hydra.war criado: META-INF / inflated: META-INF / MANIFEST.MF criado por: partner / created: partner / admin /
criado: partner / manager / created: resources / created: resources / css /
criado: resources / css / sam / created: resources / css / sam / images / created: resources / layout / criado: resources / security / created: root /
criado: root / admin / created: root / bookkeeper / criado: root / manager / created: WEB-INF /
criado: WEB-INF / classs / criado: WEB-INF / classs / ua / criado: WEB-INF / classs / ua / co / criado: WEB-INF / classs / ua / co / oasys /
criado: WEB-INF / classs / ua / co / oasys / hydra /
criado: WEB-INF / classs / ua / co / oasys / hydra / comum / criado: WEB-INF / classs / ua / co / oasys / hydra / i18n / criado: WEB-INF / classs / ua / co / oasys / hydra / mb / created: WEB-INF / classs / pt / co / oasys / hydra / mb / registration / criada: WEB-INF / classs / pt / co / oasys / hydra / mb / security / criada: WEB-INF / / ua / co / oasys / hydra / mb / ua / criado: WEB-INF / classs / ua / co / oasys / hydra / mb / ua / co / criado: WEB-INF / classs / ua / co / oasys / Hydra / mb / ua / co / oasys / criada: WEB-INF / classs / ua / co / oasys / hydra / mb / ua / co / oasys / hydra / criada: WEB-INF / classs / ua / co / oasys / Hydra / mb / ua / co / oasys / hydra / i18n / criado: WEB-INF / lib / inflado: html5.html inflado: index.xhtml inflado: login.xhtml inflado: loginError.xhtml inflado: parceiro / admin / admin. xhtml inflado: parceiro / gerente / gerente.xhtml inflado: parceiro / parceiro.xhtml inflado: register.xhtml inflado: resources / css / cssLayout.css inflacionados: resources / css / default.css inflacionados: resources / css / master.css inflacionados : resources / css / sam / images / sprite.png inflacionados: resources / css / sam / images / ui- inflado: resources / css / sam / images / ui-bg_flat_75_ffffff_40x100.png inflado: resources / css / sam / images / ui-bg_glass_55_fbf9ee_1x400.png inflado: resources / css / sam / images / ui-bg_glass_65_ffffff_1x400.png inflado: resources / css / sam / images / ui-bg_glass_75_dadada_1x400.png inflacionados: resources / css / sam / images / ui-bg_glass_75_e6e6e6_1x400.png inflacionados: resources / css / sam / images / ui-bg_glass_95_fef1ec_1x400.png inflacionados: resources / css / sam /images/ui-bg_highlight-soft_75_cccccc_1x100.png inflado: resources / css / sam / images / ui-icons_222222_256x240.png inflacionados: resources / css / sam / images / ui-icons_2e83ff_256x240.png inflacionados: resources / css / sam / images / Inflacionados: resources / css / sam / images / ui-icons_cd0a0a_256x240.png inflacionados: resources / css / sam / skin.css inflacionados: resources / ui-icons_454545_256x240.png insuflado: resources / css / sam / images / ui-icons_cd0a0a_256x240.png layout / doublevontent.xhtml inflado: resources / layout / header.xhtml inflado: resources / layout / masterLayout.xhtml inflacionados: resources / prime-themes / vader / skin.css inflacionados: resources / segurança / loginPanel.xhtml inflacionados: raiz / admin / radmin.xhtml inflacionados: raiz / contador / rbookkeeper.xhtml insuflado: raiz / gerente / rmanager.xhtml inflado: WEB -INF / beans.xml inflado: WEB-INF / classs / ua / co / oasys / hydra / comum / SkinBean.class inflado: WEB-INF / classs / ua / co / oasys / hydra / i18n / messages.properties inflado: WEB-INF / classs / ua / co / oasys / hydra / i18n / messages_pt_US.properties inflacionadas: WEB-INF / classs / ua / co / oasys / hydra / i18n / messages_ru_RU.properties inflacionadas: WEB-INF / classs / ua / co / oasys / hydra / i18n / messages_uk_UA.properties inflacionado: WEB-INF / classs / ua / co / oasys / hydra / mb / CustomCharacterEncodingFilter.class inflacionado: WEB-INF / classs / ua / co / oasys / hydra / mb / Messenger.class inflado: WEB-INF / classs / ua / co / oasys / hydra / mb / registro / TempReg.class inflado: WEB-INF / classs / ua / co / oasys / hydra / mb / segurança / LogOutActionListener.class inflado : WEB-INF / classs / ua / co / oasys / hydra / mb / segurança / LogoutServlet.class inflacionado: WEB-INF / classs / ua / co / oasys / hydra / mb / segurança / RulesBean.class inflado: WEB-INF / classs / ua / co / oasys / hydra / mb / segurança / SecurityBacking.class inflado: WEB-INF / classs / ua / co / oasys / hydra / mb / security / UserBean.class insuflado: WEB-INF / classs / ua / co / oasys / hydra / mb / segurança / UserManager.class inflacionado: WEB-INF / classs / ua / co / oasys / hydra / mb / ua / co / oasys / hydra / i18n / Messages.class inflado: WEB-INF / classs / ua / co / oasys / hydra / mb / ua / co / oasys / hydra / i18n / Utf8ResourceBundle $ 1.class inflada: WEB-INF / classs /ua/co/oasys/hydra/mb/ua/co/oasys/hydra/i18n/Utf8ResourceBundle$Utf8PropertyResourceBundle.class inflacionado: WEB-INF / classs / ua / co / oasys / hydra / mb / ua / co / oasys / hydra / i18n / Utf8ResourceBundle.class inflacionado: WEB-INF / classs / ua / co / oasys / hydra / RegistrationServiceBea.class inflacionado: WEB-INF / faces-config.xml

inflado: WEB-INF / lib / primefaces-2.1.RC1-SNAPSHOT.jar inflado: WEB-INF / sun-web.xml inflado: WEB-INF / web.xml criado: META-INF / maven / created: META-INF /maven/ua.co.oasys/ criada: META-INF / maven / ua.co.oasys / hydra / inflada: META-INF / maven / ua.co.oasys / hydra / pom.xml inflada: META-INF / maven / ua.co.oasys / hydra / pom.properties


  • Q1: é aceitável usar ejb beans empacotados em guerra (especificação triste que é verdade)?
  • Q2: devo descrever algumas configurações pelo ejb-jar.xml?
  • Q3: o que poderia ser uma causa de um problema?

É semelhante ao bug glassfish, mas não tenho certeza.

Difícil dizer, especialmente desde que você não forneceu o stacktrace para o NoClassDefFoundError , mas o cenário parece diferente de qualquer maneira.

Q1: é aceitável usar ejb beans empacotados em guerra (especificação triste que é verdade)?

Definitivamente. Você pode colocar classs EJB em WEB-INF/classs ou empacotá-las como EJB-JAR e colocá-las em WEB-INF/lib . Eu tenho vários aplicativos de demonstração fazendo isso.

Q2: devo descrever algumas configurações pelo ejb-jar.xml?

Não, nada te obriga a fazer isso.

Q3: o que poderia ser uma causa de um problema?

O problema é que eu não consegui reproduzir o problema … Eu implantei o seu EJB em um webapp com motores [ejb, jpa, web, webservices, weld] habilitados (acabei de modificá-lo para inserir uma Entidade minha no método programado) e apenas funciona. Testado com uma versão atualizada do GlassFish 3.0.1. Então eu suspeito de um erro ou problema de configuração do seu lado.

Apenas no caso, você pode fornecer a saída do jar xfv yourapp.war (e também mostrar o seu web.xml )?

Veja: CDI com ejb 3.1, weld-logger no glassfish v3.0.1 Lá eu descrevo passo para reproduzir esses problemas.

Pelo que entendi – não há possibilidade de usar CDI & EJB em um módulo web empacotado no arquivo ear juntos e implantado t glassfish 3.0.1.

O design atual é separar o módulo ejb e war – pelo menos funciona para mim.

Os EJBs empacotados em um WAR estão usando o perfil web / lite do EE6. Tanto quanto eu sei, timeres e alguns outros resources não são suportados neste perfil. Então, se você quiser usar timers, você terá que empacotar seus ejbs no modo tradicional ejbjar + war + ear.

Não consegui encontrar uma referência para o perfil da web, esta é a mais próxima de uma comparação: http://www.theserverside.com/news/1321142/Part-Three-New-Features-in-EJB-31

Edit: Eu estou corrigido, embalagem de guerra é realmente descrito em jsr 318, EJB 3.1. Como não consegui encontrar nenhuma restrição nos resources disponíveis nessa seção da especificação, os timers também devem funcionar em um ejb empacotado em uma guerra.