我正在研究目前仅使用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;
}
}
我的第一个问题:这些变化对交易有什么影响?
我的第二个问题:我通过这种设置引入了哪些风险/陷阱?