我正在尝试使用Wildfly 10.0应用程序服务器和Querydsl。我的问题是Querydsl需要一个连接来消除SQL查询。此代码片段中显示了我可以获得连接的唯一方法。有没有办法从野蝇连接池中获得连接?
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
@Singleton
public class ServiceTest {
@Resource(lookup = "java:jboss/datasources/postgresDS")
private DataSource ds;
public Memeber getMemeberById(final int id) {
try {
Connection connection = ds.getConnection();
Memeber member = new SQLQuery<Memeber>(new Configuration(new PostgreSQLTemplates()))
.select(Projections.bean(Memeber.class, QMember.member.id.as(Memeber.ID),
QMember.member.name.as(Memeber.NAME)))
.from(QMember.member).where(QMember.member.id.eq(id)).fetchOne();
connection.close();
return member;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
此解决方案是有效的,但会产生一些问题。如果所有使用连接的ds.getConnection()抛出javax.resource.ResourceException:IJ000453:无法获取java:jboss/datasources/postgresDS异常的托管连接。
有什么办法可以访问Wildfly连接池来获得连接吗?并在SQL运行后返回到连接池?如果Wildfly有一个连接池机制,我不想实现连接池机制。
不,我想尝试新的东西。我使用了约两年的JPA。 – goku91
谢谢你的回答@BususC。我理解你的意见,但我寻找替代解决方案,而不是使用Hibernate或EclipseLink的JPA,并且Querydsl看起来不错。这样我仍然需要Hibernate和实体管理器。 – goku91
也许我错过了它的一点,我的脑子也错过了它。但是在过去,我们在JPA和Hibernate方面遇到了很多问题(例如:难以理解的查询,查询问题等)。 – goku91