小编Ber*_*els的帖子

在Tomcat中使用CDI(Weld)和简单的POJO类

经过2天的调试和尝试,除了要求您提供解决方案之外我别无其他想法.

我想在Tomcat WebApp中使用CDI(在JEE6上),只使用简单的普通旧Java对象.据我所知,可以将POJO java类注入其他POJO Java类中吗?

这是我的示例类

  • class ToBeInjected(Application-scoped/singleton)
  • class InjectingExample
  • ServletListener"ApplicationContextListener"

应用程序作用域(单例)类"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)

tomcat java-ee cdi jboss-weld

11
推荐指数
1
解决办法
2万
查看次数

Web服务与CXF:如何使用ResponseWrapper?

我们正在使用以下方法创建一个由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的正确方法吗?

顺便说一下:上面的源代码片段只是从我们更复杂(更多字段)类中获取的示例.

java web-services cxf response wrapper

10
推荐指数
1
解决办法
8458
查看次数

什么是脏写?如果不被允许会怎样?

我读到了有关数据库隔离级别和事务现象的内容。脏读是显而易见的,但我不明白脏写。

所有对脏写的描述都是这样的:

脏写是指一个进程保存的文件数据已被另一个进程在磁盘上更改。最后一个进程将覆盖第一个进程的数据。https://gerardnico.com/data/property/dirty_write

其他一些描述使用示例来演示脏写,但没有说明如何解决该问题。https://esb-dev.github.io/mat/IsoLevel.pdf

这是示例中的脏写:

  1. 萨尔多从 100 开始
  2. T2 开始:更新 Acct 设置 Saldo = 200,其中 Acct = 1
  3. T1 开始:更新 Acct 设置 Saldo = 250,其中 Acct = 1
  4. T1 提交 => Saldo=250
  5. T2 提交 => Saldo=200

不知道当隔离级别不允许脏写时会发生什么。

  • T1 在提交时失败,因为当时尚未提交 T2 的更改
  • T1 提交成功,T2 提交失败,因为 T1(尚未提交)覆盖了该更改
  • T1 和 T2 提交成功,但T1默默获胜(saldo 200 而不是 250)

我不知道我应该从事务管理中得到什么。修改后的例子:

  1. 萨尔多从 100 开始
  2. T1 开始:更新 Acct 设置 Saldo = 200,其中 Acct = 1
  3. T2 开始:更新 Acct 设置 Saldo = 250,其中 …

database rdbms transactions isolation-level dirty-write

5
推荐指数
1
解决办法
8639
查看次数