2016-12-12 38 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をスローします。IJ000453:java:jboss/datasources/postgresDS例外の管理接続を取得できません。

Wildfly接続プールにアクセスして接続する方法はありますか? SQLの実行後に接続プールに戻りますか? Wildflyに接続プーリング機構が実装されている場合は、接続プーリング機構を実装したくありません。

+0

いいえ、私は新しいものを試してみたいです。私は約2年間JPAを使いました。 – goku91

+0

ありがとうございます@BalusC。私はあなたの意見を理解していますが、JPAの代わりに代替のソリューションを探しています.HibernateまたはEclipseLinkとQuerydslは素晴らしいです。このようにして、私はまだHibernateとエンティティマネージャが必要です。 – goku91

+0

たぶん私はそれのポイントを逃したと私のボーズもそれを逃した。しかし過去には、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()と呼ぶことが重要です。

関連する問題