混合EJB和CDI bean时如何使用事务?

时间:2016-08-31 08:46:36

标签: java cdi java-ee-6

我正在研究目前仅使用EJB的JEE应用程序。应用程序处理消息并将一些内容存储在数据库中和/或可能将消息发送到其他应用程序(我猜这非常简单)。

我有一些过滤业务逻辑,用于确定数据是否应存储在数据库中。像这样(简化):

@MessageDriven(...)
public class MessageListener {
    private FilterProvider filter = new FilterProvider();

    @EJB private SomeDao dao;

    public void handleMessage(SomeMessage message) {
        if(filter.allows(message)) {
            dao.store(message);
        } else {
            // Ignore, not relevant
        }
    }
}

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class SomeDao {
    public store(SomeMessage message) {
        // Create the right entities and store in the db
    }
}

public class FilterProvider {
    public boolean allows(SomeMessage message) {
        return message.getAllowed() == true;
    }
}

目前我正在研究是否可以使用CDI注入FilterProvider并且我已经将这些修改放在一起:

@MessageDriven(...)
public class MessageListener {
    @Inject
    private FilterProvider filter; // <-- Added annotation here and removed constructor call.

    @EJB private SomeDao dao;

    public void handleMessage(SomeMessage message) {
        if(filter.allows(message)) {
            dao.store(message);
        } else {
            // Ignore, not relevant
        }
    }
}

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class SomeDao {
    public store(SomeMessage message) {
        // Create the right entities and store in the db
    }
}

@Default // <-- Added annotation here
public class FilterProvider {
    public boolean allows(SomeMessage message) {
        return message.getAllowed() == true;
    }
}

我的第一个问题:这些变化对交易有什么影响?

我的第二个问题:我通过这种设置引入了哪些风险/陷阱?

0 个答案:

没有答案