【发布时间】:2015-05-16 14:38:19
【问题描述】:
我正在 Wildfly 8.2 容器中开发 Java EE 7 应用程序,该容器包含一些存在于两个数据源中的实体。示例:
我有一个带有Setting 实体的罐子:
@Entity
public class Setting {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String name;
private String value;
getters/setters...
}
还有一个 bean,它有几个方法可以通过条件查询从数据库中检索和保存这个实体:
@Stateless
public class SettingRepository {
@Inject
private Logger logger;
@Inject
private EntityManager entityManager;
public Setting findByName(@NotNull String name) {
logger.trace("Getting setting by name: name=" + name);
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Setting> cq = cb.createQuery(Setting.class);
Root<Setting> table = cq.from(Setting.class);
cq.where(cb.equal(table.get(Setting_.name), name));
TypedQuery<Setting> query = entityManager.createQuery(cq);
List<Setting> results = query.getResultList();
Setting setting = null;
if (results.size() > 0)
setting = results.get(0);
logger.trace("Got setting: " + setting);
return setting;
}
...
}
我不想在一个应用程序中通过@Producer 提供EntityManager 和Logger 实例,该应用程序在类路径中包含这个jar,如下所示:
@Produces @DataSource1 @PersistenceContext(unitName = "pu1")
private EntityManager entityManager1;
@Produces @DataSource2 @PersistenceContext(unitName = "pu2")
private EntityManager entityManager2;
@Produces
private Logger produceLogger(InjectionPoint injectionPoint) {
return LogManager.getLogger(injectionPoint.getMember().getDeclaringClass().getName());
}
有没有办法在注入点配置 SettingRepository 并告诉它使用特定的实体管理器(@DataSource1 或 @DataSource2)?
与此类似:
@Inject @DataSource1
private SettingRepository settingRepository;
【问题讨论】:
标签: java jakarta-ee cdi java-ee-7