2012-02-17 10 views
7

次の例は、SQLのマニュアルです。これらの方法のいずれかを使用してgrailsサービスクラスの途中でsqlインスタンスを作成すると、grails接続プーリングが使用されますか?どんなトランザクション機能にも参加しますか?自分で接続を閉じる必要がありますか?それとも自動的にプールに戻ってきますか?grailsでgroovy sqlクラスを使用している場合は、grails connection poolingを使用していますか?

def db = [url:'jdbc:hsqldb:mem:testDB', user:'sa', password:'', driver:'org.hsqldb.jdbcDriver'] 
    def sql = Sql.newInstance(db.url, db.user, db.password, db.driver) 

またはあなたが(おそらく接続プールからの)既存の接続を持っているか、データソースは、コンストラクタの1を使用する場合:

def sql = new Sql(datasource) 

を今、あなたは、例えば、SQLを呼び出すことができますテーブルを作成するには:

sql.execute ''' 
     create table PROJECT (
      id integer not null, 
      name varchar(50), 
      url varchar(100), 
     ) 
''' 

答えて

7

あなたが実行した場合:

Sql.newInstance(...) 

をあなたは新しい接続を作成し、あなたは、接続プールを使用していません。

接続プールを使用する場合は、次のコマンドでサービスを作成することができます。以下のように

grails create-service org.foo.MyService 

次に、あなたのMyService.groovyファイルで、あなたはトランザクションを管理することができます

import javax.annotation.PostConstruct 

class MyService { 
    def dataSource    // inject the datasource 
    static transactional = true // tell groovy that the service methods will be transactional 


    def doSomething() { 
     sql = new Sql(dataSource) 
     //rest of your code 
    } 
} 
をあなたが読むことができます詳細については

http://grails.org/doc/2.0.x/guide/services.html

EDIT:

複数のデータソースを管理するには、Grailsのバージョンに基づいて次のいずれかを実行します。

あなたはGrailsのバージョンよりも大きい1.1.1(から2.xない)あなたは以下のプラグインを使用することができます使用している場合:あなたはGrailsの2.xはあなたが外を使用することができます使用している場合

http://grails.org/plugin/datasources 

をボックスのサポート:あなたはこのようSqlオブジェクトを作成した場合

http://grails.org/doc/2.0.0.RC1/guide/conf.html#multipleDatasources 
+0

こんにちはErnesto、私は本当に答えが必要な質問に十分な情報を追加していないことに気付きました。私は複数のデータソースを持っており、実行時にデータを見るまではわかりません。私は、サービスに複数のデータソースを注入することはできないと信じています。だから、より大きな問題は、どのデータベースに行きたいのか、Sqlクラスを使用するのか、そして自動プーリングを得るのかです。そして私はサービスクラス以外のクラスでこれをやりたいかもしれません。私はサービス取引管理は必要ありません。 – Andrew

1

が、私はそれが接続プールを使用すると信じて

class SomeSerive { 

    SessionFactory sessionFactory 

    def someMethod() { 
    Sql sql = new Sql(sessionFactory.currentSession.connection()) 
    } 
}