2016-12-12 4 views
-1

나는 Wildfly 10.0 응용 프로그램 서버와 Querydsl을 사용하려고합니다. 내 문제는 Querydsl이 SQL 쿼리를 회피하기 위해 연결이 필요하다는 것입니다. 이 코드 스 니펫에는 연결을 얻을 수있는 유일한 방법이 나와 있습니다.wildfly 연결 풀에서 연결하는 방법이 있습니까?

@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을 throw하는 경우 : IJ000453 : java : jboss/datasources/postgresDS 예외에 대한 관리 연결을 가져올 수 없습니다.

연결을 위해 Wildfly 연결 풀에 액세스 할 수있는 방법이 있습니까? SQL을 실행 한 후 연결 풀로 돌아갑니다? Wildfly에 연결 풀링 메커니즘이 있으면 연결 풀링 메커니즘을 구현하고 싶지 않습니다.

+0

아니, 새로운 것을 시도하고 싶습니다. 나는 약 2 년 동안 JPA를 사용했다. – goku91

+0

답변 감사합니다 @ BalusC. 나는 당신의 의견을 이해하지만, JPA 대신 JPA 대신 또는 EclipseLink와 Querydsl이 좋은 대안을 찾고있다. 이런 식으로 나는 여전히 Hibernate와 엔티티 관리자가 필요하다. – goku91

+0

어쩌면 나는 그것의 요점을 놓쳤을지도 모른다. 그리고 나의 boses도 그것을 놓쳤다. 그러나 과거에는 JPA와 Hibernate에 많은 문제가있었습니다 (예 : 읽기 어려운 쿼리, 문제 해결 등). – goku91

답변

0

대답은 의문입니다. ds.getConnection()이 호출 될 때 org.jboss.jca.core.connectionmanager.pool.AbstractPool#getConnection 메서드를 호출하기 때문에 풀에서 연결을 제공합니다. Bean 메소드가 종료되고 org.jboss.jca.core.connectionmanager.pool.AbstractPool#returnConnection 메소드라고하는 connection.close() 메소드가 풀에 대한 연결을 리턴합니다. 따라서 connection.close()은 연결을 닫지 않습니다. 연결은 결코 풀로 돌아 가지 않으므로 connection.close()으로 전화하는 것이 중요합니다.