• 検索結果がありません。

#9 Grailsのサービスについて 杉浦さん GCRアーカイブ main

N/A
N/A
Protected

Academic year: 2018

シェア "#9 Grailsのサービスについて 杉浦さん GCRアーカイブ main"

Copied!
14
0
0

読み込み中.... (全文を見る)

全文

(1)

Grailsのサービスについて

Takahiro Sugiura:

sugiura.takahiro@cij.co.jp

(2)

Grailsのサービスとは

Grailsのサービスは、アプリケー ションロジックの大半を置く場所。

再利用と関心の分離が上手くい かないので、コントローラの中に アプリケーションロジックを置くの はよくない。

(3)

サービスを利用するコード例

class BookController {

// BookServiceのBeanをインジェクション def bookService

def search = {

// 条件に応じて本を検索する def searchResult =

bookSearvice.searchBook( params ) ...

} }

(4)

サービスのインジェクション

インジェクト先のプロパティ名に、 サービスのクラス名の「プロパ

ティ名表現」を使う。

例) BookServiceをインジェクショ ンしたい場合、bookServiceプロ パティを宣言する。

(5)

サービスのインジェクション

サービスをインジェクションできる のはコントローラだけでなく、タグ リブにも、ドメインにも、別のサー ビスにもインジェクションできる。

(6)

サービスのコード例

class BookService {

def scope = “prototype” def transactional = true def searchBook( params ) {

// 条件に応じて本を検索する

def criteria = Book.createCriteria() ...

} }

(7)

スコープの宣言

スコープ(scope)はインスタンスの ライフサイクルを指定するもので、

prototype request flash

flow

conversation session

singleton(デフォルト)

がある。

(8)

トランザクションの宣言

transactionalはトランザクション 中での実行を指定する。

trueを指定した場合、トランザク

ションの中でサービスのメソッドを 実行する。

falseを指定した場合、トランザク ションとは関係なくサービスのメ ソッドを実行する。

(9)

インジェクションのコード

コントローラにサービスをインジェ クションしているのは、

ControllersGrailsPlugin.groovy になる。

(10)

インジェクションのコード

// コントローラクラスのBean定義

"${grailsClass.fullName}"("${grailsClass.fullName}Proxy":

"newInstance") {bean →

bean.singleton = singleton

// autowiringの設定。名前による参照解決。 bean.autowire = "byName"

}

コントローラに宣言したプロパティ 名に応じたBeanを、名前により

解決し、インジェクションする。

(11)

サービスプラグインのコード

サービスのプラグインのソースは、 ServicesGrailsPlugin.groovy

になる。

(12)

サービスプラグインのコード

def props = new Properties()

props."*"="PROPAGATION_REQUIRED"

トランザクションの振る舞いを設定 する。サービスのすべてのメソッド ("*")に対して

、"PROPAGATION_REQUIRED" (常にトランザクションがある状態) を指定。

(13)

サービスプラグインのコード

"${serviceClass.propertyName}"(TransactionProxyFactoryBean) { bean ->

宣言的トランザクションを行うサー ビスのBean定義を行う。

宣言的トランザクションとは、トラン ザクションの管理をロジックから分 離し、外部で行う方式。

(14)

おわりに

サービスは、SpringのDI、AOP、 宣言的トランザクション、といった 機能を上手く使って、適度なバラ ンスで動作する。

参照

関連したドキュメント

それぞれの絵についてたずねる。手伝ってやったり,時には手伝わないでも,"子どもが正

• ネット:0個以上のセルのポートをワイヤーを使って結んだも

不明点がある場合は、「質問」機能を使って買い手へ確認してください。

問題集については P28 をご参照ください。 (P28 以外は発行されておりませんので、ご了承く ださい。)

* Windows 8.1 (32bit / 64bit)、Windows Server 2012、Windows 10 (32bit / 64bit) 、 Windows Server 2016、Windows Server 2019 / Windows 11.. 1.6.2

(( .  entrenchment のであって、それ自体は質的な手段( )ではない。 カナダ憲法では憲法上の人権を といい、

• AF/AE ロック機能を使って、同じ距離の他の被写体にピントを 合わせてから、構図を変えてください(→ 43 ページ)。. •

それから 3