【问题标题】:CDI + tomcat CompatibilityCDI + tomcat 兼容性
【发布时间】:2016-06-29 06:56:27
【问题描述】:

我正在尝试将我们的代码与 CDI 集成,并且我已经在使用 Tomcat 8。

我遇到了一些问题,请在下面找到异常日志

"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
"

CDI 是否与 Tomcat 8 兼容?

如果是,请提供如何通过工作示例实现它。 提前致谢。

【问题讨论】:

  • 欢迎来到 SO!请正确格式化您的代码/异常,并可能添加一些有关您如何尝试此集成的代码,从而显示错误(通过编辑问题,而不是通过评论)

标签: tomcat cdi


【解决方案1】:

不,CDI 不适用于 Tomcat 8,至少不是开箱即用的。 AFAIK,您可以通过添加各种依赖项(例如weld)来使其工作。参见例如https://musingsinjava.wordpress.com/2014/11/02/enabling-jsf-2-2-and-cdi-1-2-on-tomcat-8/How to install and use CDI on Tomcat?

就我个人而言,我从未设法让它工作,相反,我使用了 Apache TomEE,它已经具有 CDI 工作所需的依赖项。 TomEE 网站上有很多例子:http://tomee.apache.org/examples-trunk/index.html

【讨论】:

  • 感谢您的回复。
  • 我正在使用 Weld 依赖项。如果您查看上述异常,我将面临一些无法启动 tomcat 服务器的焊接异常
  • 我正在使用 Weld 和 tomcat 都有自己的 EL 表达式库 jar,这些 jar 相互冲突。如何确定我们必须在 ANT 中使用哪些 jar 的优先级
猜你喜欢
  • 2017-11-11
  • 2013-06-06
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多