Search code examples
tomcatcdi

CDI + tomcat Compatibility


I am trying to integrate our code with CDI and I am already using Tomcat 8.

I am facing some issues, please find exception logs below

"28-Jun-2016 09:47:18.752 INFO [localhost-startStop-1] org.jboss.weld.environment.tomcat.TomcatContainer.initialize WELD-ENV-001100: Tomcat 7+ detected, CDI injection will be available in Servlets, Filters and Listeners.
28-Jun-2016 09:47:19.190 SEVERE [Catalina-startStop-1] org.apache.catalina.core.ContainerBase.startInternal A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/j2eeletestapp]]
                at java.util.concurrent.FutureTask.report(FutureTask.java:122)
                at java.util.concurrent.FutureTask.get(FutureTask.java:192)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:917)
                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
                at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/j2eeletestapp]]
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
                ... 6 more
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type DirectoryService with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private com.daimler.iap.paz.tsma.TomcatDirectoryAuthorizationService.ldiService
  at com.daimler.iap.paz.tsma.TomcatDirectoryAuthorizationService.ldiService(TomcatDirectoryAuthorizationService.java:0)

                at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359)
                at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281)
                at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
                at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:155)
                at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:518)
                at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68)
                at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66)
                at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63)
                at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56)
                ... 4 more

28-Jun-2016 09:47:19.202 SEVERE [main] org.apache.catalina.core.ContainerBase.startInternal A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
                at java.util.concurrent.FutureTask.report(FutureTask.java:122)
                at java.util.concurrent.FutureTask.get(FutureTask.java:192)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:917)
                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:769)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
                at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:498)
                at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
                at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:925)
                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
                ... 6 more
"

Is CDI compatible with Tomcat 8?

If yes please provide how to implement it with working example. Thanks in advance.


Solution

  • No, CDI is not working with Tomcat 8, at least not out-of-the-box. AFAIK you can get it to work by adding various dependencies (e.g. weld). See e.g. https://musingsinjava.wordpress.com/2014/11/02/enabling-jsf-2-2-and-cdi-1-2-on-tomcat-8/ and How to install and use CDI on Tomcat? .

    Personally, I never managed to get it work, instead, I used Apache TomEE which has already the needed dependencies for CDI to work. There are many examples shown on the TomEE Website: http://tomee.apache.org/examples-trunk/index.html