Seam 3 in EAR
jagin Jan 25, 2012 3:48 PMHello,
For a couple of days I'm trying to run Seam 3.1 project as an EAR.
I simplify the project as much as I can and put the sources here sandbox-starter
It's a maven project (I'm using maven 3.0.3 but should work on maven 2 too). It's enough to run 'mvn install' on parent pom to create all artefacts.
The structure of the project is as follow:
sandbox-starter
-- core-ejb
-- sandbox-web
-- sandbox-ear
core-ejb contains one simple HelloService EJB bean. It is standard EJB 3 module.
sandbox-web is the WAR web application. Right now core-ejb is included in the WAR in the way that sandbox-web.war can be deployed alone on Jboss 6.1 or JBoss 7.0.2 it should run (it was running for me :) )
sandbox-ear is the EAR application with core-ejb and sandbox-war packed together. It's not working. First of all seam jars a duplicated across EAR lib and WEB-INF/lib of sandbox-web. So right now we have to modify the EAR by hand and remove:
1.
solder-logging-3.1.0.Final.jar
solder-impl-3.1.0.Final.jar
solder-api-3.1.0.Final.jar
commons-lang3-3.1.jar
this file are already in EAR lib folder (and as I know they should be there)
2.
sandbox-core-ejb-1.0-SNAPSHOT.jar
it's our EJB module wich is already in EAR
I have deployed the modified EAR on JBoss 6.1 and got an exception during deployment starting with:
20:53:12,544 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Start: name=vfs:// /D:/sdk/jboss-6.1.0.Final/server/default/deploy/sandbox-ear.ear_WeldBootstrapBean state=Create: org.jboss.weld.exception s.DeploymentException: WELD-001408 Unsatisfied dependencies for type [FormValidationTypeOverrideExtension] with qualifie rs [@Default] at injection point [[field] @Inject private org.jboss.seam.faces.util.BeanManagerUtils.classExtension] at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:270) [:6.1.0.Final] at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:106) [:6.1.0.Final] at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:129) [:6.1.0.Final] at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:351) [:6.1.0.Final] at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:336) [:6.1.0.Final] at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:404) [:6.1.0.Final] at org.jboss.weld.integration.deployer.env.helpers.BootstrapBean.boot(BootstrapBean.java:92) [:6.1.0.Final] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_29] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_29] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_29] ...
Next i have deployed the same EAR on JBoss 7. There is no exception and the application is fully deployed
but if you hit the main page http://localhost:8080/sandbox an exception is throwing like:
20:57:02,496 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/sandbox].[FacesServlet]] (http-- 127.0.0.1-8080-1) Servlet.service() for servlet FacesServlet threw exception: java.lang.IllegalStateException: Could not wrap ExternalContext at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.jav a:47) [seam-faces-3.1.0.Final.jar:] at com.sun.faces.context.FacesContextFactoryImpl.getFacesContext(FacesContextFactoryImpl.java:93) [jsf-impl-2.1. 3-b02-jbossorg-2.jar:2.1.3-SNAPSHOT] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:583) [jboss-jsf-api_2.1_spec-2.0.0.Beta1.jar:2.0.0. Beta1] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7 .0.1.Final.jar:7.0.2.Final] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Fin al.jar:7.0.2.Final] at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:126) [prettyfaces-jsf2-3.3.2.jar:] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7 .0.1.Final.jar:7.0.2.Final] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Fin al.jar:7.0.2.Final] at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [jbossweb-7.0.1.Final.j ar:7.0.2.Final] at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:543) [jbossweb-7.0.1 .Final.jar:7.0.2.Final] at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [jbossweb-7.0.1.Fina l.jar:7.0.2.Final] at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [jbossweb-7.0.1.Final. jar:7.0.2.Final] at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:528) [jbossweb-7.0.1.Final.jar:7.0.2 .Final] at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:454) [jbossweb-7.0.1.Final.jar:7.0.2 .Final] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [jbossweb-7.0.1.Final.jar:7.0.2 .Final] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.1.Final.jar:7.0.2 .Final] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.1.Final.jar:7 .0.2.Final] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.1.Final.jar:7.0.2.F inal] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.1.Final.jar:7.0.2.Fi nal] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7. 0.1.Final.jar:7.0.2.Final] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952) [jbossweb-7.0.1.Final.jar:7.0.2.Final ] at java.lang.Thread.run(Thread.java:662) [:1.6.0_29] Caused by: org.jboss.solder.beanManager.BeanManagerUnavailableException: Failed to locate BeanManager using any of these providers: org.jboss.solder.servlet.beanManager.ServletContextAttributeProvider(20), org.jboss.solder.beanManager.Defau ltJndiBeanManagerProvider(11), org.jboss.solder.beanManager.ServletContainerJndiBeanManagerProvider(10) at org.jboss.solder.beanManager.BeanManagerLocator.getBeanManager(BeanManagerLocator.java:88) [solder-api-3.1.0. Final.jar:] at org.jboss.seam.faces.environment.SeamExternalContextFactory.getExternalContext(SeamExternalContextFactory.jav a:39) [seam-faces-3.1.0.Final.jar:] ... 21 more
and on the browser I got
HTTP Status 404 - /sandbox/home.jsp
hmm, why jsp?
Is there any body willing to help me to prepare the EAR in the way it will work on Jboss 6.1 or/and Jboss 7.0.2 ??
For me it's very strange that there is no known way or examples for Seam 3 in EAR environment.
Is Seam 3 ready for EAR? If so pleas help me and others to prepare such a thing !
If not just say it clearly so we won't lose our time on this?
If not EAR what is the way to create a project having some common/general/core EJB modules used with different web application.
I also created two separate WAR module with EJB module included.
Deploying this two WARs on JBoss 7 was successful and both application works fine!
That was something I checked writing this post and was astonished because earlier i was trying the same on Jboss 6 and got:
21:23:38,655 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] Error installing to Start: name=jboss. j2ee:jar=sandbox2-web.war,name=HelloServiceImpl,service=EJB3 state=Create: java.lang.RuntimeException: Could not bind Re ference Class Name: Proxy for: pl.jagin.sandbox.core.hello.HelloService Type: ProxyFactoryKey Content: ProxyFactory/sandbox2-web/HelloServiceImpl/HelloServiceImpl/local Type: EJB Container Name Content: jboss.j2ee:jar=sandbox2-web.war,name=HelloServiceImpl,service=EJB3 Type: Proxy Factory is Local Content: true Type: Local Business Interface Content: pl.jagin.sandbox.core.hello.HelloService into JNDI at "HelloServiceImpl/local" at org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase.bind(JndiSessionRegistrarBase.java:939) [:1. 0.11] at org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase.bind(JndiSessionRegistrarBase.java:919) [:1. 0.11] at org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase.bind(JndiSessionRegistrarBase.java:908) [:1. 0.11] at org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase.bindEjb(JndiSessionRegistrarBase.java:159) [ :1.0.11] at org.jboss.ejb3.session.SessionContainer.lockedStart(SessionContainer.java:223) [:1.7.21] at org.jboss.ejb3.session.SessionSpecContainer.lockedStart(SessionSpecContainer.java:735) [:1.7.21] at org.jboss.ejb3.EJBContainer.start(EJBContainer.java:1105) [:1.7.21] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [:1.6.0_29] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [:1.6.0_29] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [:1.6.0_29] at java.lang.reflect.Method.invoke(Method.java:597) [:1.6.0_29] at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:60) [jboss-reflect.jar:2. 2.1.SP1] at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:168) [jboss-r eflect.jar:2.2.1.SP1] at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66) [jboss-reflect.jar:2. 2.1.SP1] at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelCont rollerContextAction.java:257) [jboss-kernel.jar:2.2.0.SP2] at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) [jboss-kernel.jar:2.2. 0.SP2] at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerCo ntextAction.java:125) [jboss-kernel.jar:2.2.0.SP2] at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAc tion.java:72) [jboss-kernel.jar:2.2.0.SP2] at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:202) [jboss-ke rnel.jar:2.2.0.SP2] at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) [jboss-ker nel.jar:2.2.0.SP2] at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) [jboss-ker nel.jar:2.2.0.SP2] at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContext Action.java:62) [jboss-dependency.jar:2.2.0.SP2] at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java: 71) [jboss-dependency.jar:2.2.0.SP2] at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:5 1) [jboss-dependency.jar:2.2.0.SP2] at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dep endency.jar:2.2.0.SP2] at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2 .2.0.SP2] at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependenc y.jar:2.2.0.SP2] at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.SP2] at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependen cy.jar:2.2.0.SP2] at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependen cy.jar:2.2.0.SP2] at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2 .0.SP2] at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2 .0.SP2] at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:1983) [:2.2.2.GA] at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:1076) [:2.2.2.GA] at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:679) [:2.2.2.GA] at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.process(MainDeployerPlugin.java:106) [:6. 1.0.Final] at org.jboss.profileservice.dependency.ProfileControllerContext$DelegateDeployer.process(ProfileControllerContex t.java:143) [:0.2.2] at org.jboss.profileservice.deployment.hotdeploy.HDScanner$HDScanAction.deploy(HDScanner.java:240) [:0.2.2] at org.jboss.profileservice.deployment.hotdeploy.HDScanner$HDScanAction.complete(HDScanner.java:192) [:0.2.2] at org.jboss.profileservice.management.TwoPCActionWrapper.doComplete(TwoPCActionWrapper.java:57) [:0.2.2] at org.jboss.profileservice.management.actions.AbstractTwoPhaseModificationAction.complete(AbstractTwoPhaseModif icationAction.java:74) [:0.2.2] at org.jboss.profileservice.management.actions.AbstractTwoPhaseModificationAction.prepare(AbstractTwoPhaseModifi cationAction.java:95) [:0.2.2] at org.jboss.profileservice.management.ModificationSession.prepare(ModificationSession.java:87) [:0.2.2] at org.jboss.profileservice.management.AbstractActionController.internalPerfom(AbstractActionController.java:234 ) [:0.2.2] at org.jboss.profileservice.management.AbstractActionController.performWrite(AbstractActionController.java:213) [:0.2.2] at org.jboss.profileservice.management.AbstractActionController.perform(AbstractActionController.java:150) [:0.2 .2] at org.jboss.profileservice.management.AbstractActionController.perform(AbstractActionController.java:135) [:0.2 .2] at org.jboss.profileservice.deployment.hotdeploy.HDScanner.scan(HDScanner.java:146) [:0.2.2] at org.jboss.profileservice.deployment.hotdeploy.HDScanner.run(HDScanner.java:90) [:0.2.2] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) [:1.6.0_29] at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) [:1.6.0_29] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) [:1.6.0_29] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.j ava:98) [:1.6.0_29] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor. java:180) [:1.6.0_29] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204 ) [:1.6.0_29] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_29] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_29] at java.lang.Thread.run(Thread.java:662) [:1.6.0_29] Caused by: javax.naming.NameAlreadyBoundException: local at org.jnp.server.NamingServer.bind(NamingServer.java:209) [:5.0.5.Final] at org.jnp.server.NamingServer.bind(NamingServer.java:167) [:5.0.5.Final] at org.jnp.interfaces.NamingContext.bind(NamingContext.java:652) [:5.0.5.Final] at org.jnp.interfaces.NamingContext.bind(NamingContext.java:613) [:5.0.5.Final] at org.jboss.util.naming.Util.bind(Util.java:105) [jboss-common-core.jar:2.2.17.GA] at org.jboss.util.naming.Util.bind(Util.java:91) [jboss-common-core.jar:2.2.17.GA] at org.jboss.ejb3.proxy.impl.jndiregistrar.JndiSessionRegistrarBase.bind(JndiSessionRegistrarBase.java:934) [:1. 0.11] ... 57 more
so I assume that on Jboss 7 there will be also name conflict but is not. So it can be the solution but only for Jboss 7.
Is this that on Jboss 6 all EJB from WAR deployment are registered on the same global JNDI? Can we change it for every WAR module?
Can we get both WAR with the same EJB running on Jboss 6?
Can anybody confirm that on Jboss7 the same EJB in a different WAR has its own name?
Well that's all for know.
Please share your thoughts on creating more complicated enterprise application (not just booking example) using Seam 3 and Jboss 6/7.
Regards
Jarek