经过2天的调试和尝试,除了要求您提供解决方案之外我别无其他想法.
我想在Tomcat WebApp中使用CDI(在JEE6上),只使用简单的普通旧Java对象.据我所知,可以将POJO java类注入其他POJO Java类中吗?
这是我的示例类
应用程序作用域(单例)类"ToBeInjected":
import javax.enterprise.context.ApplicationScoped;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ApplicationScoped
public class ToBeInjected {
private final Logger log = LoggerFactory.getLogger(ToBeInjected.class);
public ExampleBean() {
log.info("ToBeInjected init");
}
public void sayHello() {
log.info("Hello from ToBeInjected!");
}
}
Run Code Online (Sandbox Code Playgroud)
在类"InjectingExample"是注入上述类:
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class InjectingExample {
private final Logger log = LoggerFactory.getLogger(InjectingExample.class);
@Inject
private ExampleBean bean;
public InjectionExample() {
log.info("InjectingExample init");
}
public void sayHello() {
log.info("InjectingExample …Run Code Online (Sandbox Code Playgroud) 我们正在使用以下方法创建一个由java类(Java2WS)驱动的Web服务(基于CXF):
@WebMethod
@RequestWrapper(className = "com.myproject.wrapper.MyRequestWrapper")
@ResponseWrapper(className = "com.myproject.wrapper.MyResponseWrapper")
public MyResponse verifyCode(@WebParam(name = "code") String code) {
...
return new MyResponse("Hello",StatusEnum.okay);
}
Run Code Online (Sandbox Code Playgroud)
我使用包装器来定义请求resp的元素.更详细的响应:正确的元素名称(以大写字符开头),必需元素和可选元素,...).但我不确定这是否是正确的方法(没有关于包装器的深入文档,不是吗?)
MyResponse类:
public class MyResponseWrapper {
private String result;
private ModeEnum status;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
MyReponseWrapper类
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "myResponse")
public class MyResponseWrapper {
@XmlElement(name="Result")
private String result;
@XmlElement(name = "Status")
private StatusEnum status;
public MyResponseWrapper() {
result="fu"; // just for testing
}
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
目前我不了解Wrappers.当我返回MyReponse的一个实例时,MyResponse的数据如何被分别注入MyResponseWrapper到响应的SOAP主体?
通过测试这个Web服务,我可以看到MyResponseWrapper的实例被实例化,SOAP主体包含正确的元素,但是包含默认数据(例如:result ="fu"而不是"Hello").我预计CXF会将MyResponse的匹配数据注入MyResponseWrapper.那是错的吗?
如果这是错误的方法:在使用Java2WS时,Wat是指定生成的SOAP xml的正确方法吗?
顺便说一下:上面的源代码片段只是从我们更复杂(更多字段)类中获取的示例.
我读到了有关数据库隔离级别和事务现象的内容。脏读是显而易见的,但我不明白脏写。
所有对脏写的描述都是这样的:
脏写是指一个进程保存的文件数据已被另一个进程在磁盘上更改。最后一个进程将覆盖第一个进程的数据。https://gerardnico.com/data/property/dirty_write
其他一些描述使用示例来演示脏写,但没有说明如何解决该问题。https://esb-dev.github.io/mat/IsoLevel.pdf
这是示例中的脏写:
- 萨尔多从 100 开始
- T2 开始:更新 Acct 设置 Saldo = 200,其中 Acct = 1
- T1 开始:更新 Acct 设置 Saldo = 250,其中 Acct = 1
- T1 提交 => Saldo=250
- T2 提交 => Saldo=200
不知道当隔离级别不允许脏写时会发生什么。
我不知道我应该从事务管理中得到什么。修改后的例子:
cdi ×1
cxf ×1
database ×1
dirty-write ×1
java ×1
java-ee ×1
jboss-weld ×1
rdbms ×1
response ×1
tomcat ×1
transactions ×1
web-services ×1
wrapper ×1