Ase*_*sal 8 java java-ee cdi weld
我正在为JavaEE7中的学习CDI设置基本环境.我有以下代码用于启动Weld.只是一个启动和关闭.
package com.anshbansal;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;
public class Main {
public static void main(String[] args) {
Weld weld = new Weld();
WeldContainer container = weld.initialize();
weld.shutdown();
}
}
Run Code Online (Sandbox Code Playgroud)
我正在控制台上关注.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/Softs/Programming/Java/Java%20JARs/JBoss%20Weld-2.0.3/jar/weld-se.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/Softs/Programming/Java/Java%20JARs/JBoss%20Weld-2.0.3/jar/weld-servlet.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
[main] INFO org.jboss.weld.Version - WELD-000900 2.0.3 (Final)
[main] INFO org.jboss.weld.Bootstrap - WELD-000101 Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously.
log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Run Code Online (Sandbox Code Playgroud)
有问题的路线是WELD-000101 Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously..这只是意味着依赖注入不起作用.但我不确定是什么问题.我加入weld-se.jar了我的CLASSPATH.我甚至没有达到初始化对象的意义,为什么会出现这个问题呢?
Weld的官方文档也提供了我在阅读此答案后得到的相同代码."Antonio Goncalves"一书中的"Beginning Java EE 7"中使用了相同的代码.我已经验证了从这个github位置的导入.因此,如果我使用了正确的类路径并且没有创建任何对象,那么为什么会出现这个问题呢?
您的设置可以在Java SE中学习CDI.
对于在Java EE中使用CDI,您显然需要一个Java EE容器,一个带有main方法的普通旧应用程序将无法做到.
Weld只是告诉您事务不可用(因为您没有在EE容器中运行),因此将禁用任何与事务相关的CDI功能.
只要您不尝试注入任何Java EE对象或使用任何需要Java EE容器的CDI功能,依赖注入就会适用于您的情况.
运行 Java EE 应用程序需要应用程序服务器(或容器)。对于运行企业应用程序所需的不同服务(安全性、消息传递、事务等)的集成,该容器使您的生活变得非常简单。
如果您不使用应用程序服务器(就像您在示例中所做的那样),您必须自己进行此集成(即构建您自己的服务器)。由于服务器的存在,这是一项非常困难且无用的任务。
您在问题中显示的代码是当您不需要或无法使用容器时,如何使用 Weld 的专有部分手动启动 CDI 容器。
如果您仔细阅读 Antonio 的书,您会发现在第 xxxiv 页的“下载和运行代码”部分中指出,您需要在 Glassfish 4 上部署代码,Glassfish 4 是开源 Java EE 7 服务器之一(另一个是是JBoss Wildfly)
本书的附录 A (第 539 页)以非常精确的方式描述了如何设置环境来运行书中示例和简单的 Java EE 应用程序。请按照本部分中的说明进行操作,您将发现开发和部署 Java EE 7 应用程序非常简单。
| 归档时间: |
|
| 查看次数: |
7842 次 |
| 最近记录: |