¿ SessionBeansとGrailsの?
個人的に私が最も好きGrailsの資質の一つは、JEEとの統合です。 彼らはフレームワークの不可欠な一部であるかのように我々は、GrailsのタグJSP、セッションBeanとEntityBeansを使用することができますので。
この記事では、我々のコードのGrailsのからかどうかをローカルまたはリモートSessionBeansを呼び出すことができる方法に焦点を当てます。 この可能性は、一緒にEntityBeans Grailsの管理と適応性と拡張性をもたらします。 私はこのことを意味する、端正されている我々は、Grailsのアプリケーション全体を開発することができますし、後でそれぞれのエンティティとSessionBeansに移動し、サービスモデル。 この方法では、我々はすぐに、動的な環境にいることの利点を使用してアプリケーションを開発し始めることができますし、アプリケーションがより多く定義されている場合、変更は一般的ではありませんし、我々はJEEにビジネス層を移動することができます。 この変更は、コントローラやビューなどのGrailsの他の部分には影響しません。
後者を達成するために我々が行うすべてが作成さSessionBeans上で同じ操作に委任することにより、サービスオペレーションのコードを置き換えるだけです。
その後、我々は、GrailsがEJB2.1とEJB3.0 SessionBeans両方を使用するように設定されてどのように表示されます。
SessionBeansを注入
Grailsは、あなたのサービスで行うようなサービスの両方で、任意のSBのドライバーで注入することができます。 Grailsは、そのコンポーネントの管理にSpringを使用するときにGrailsの内でこののすべての利点を使用することが可能です。 ドライバーやサービス、そして特にSBに注入するオブジェクトを設定する最も簡単な方法は、ファイルresources.groovyを使用しています。 このファイルには、春に相当するapplicationContext.xmlをXMLファイルであることの唯一の代わりに、ファイル構成のためのDSLとしてSpringBuilder Groovyを使用するクラスです。 デフォルトでは、ファイルリソースはgrails-app/conf/springで発見して、次の内容が含まれています。
/ /ここにあなたの春DSLのコードを配置 豆= { }
あなたが豆の定義を追加する場所を閉鎖以内です。
JNDIサーバの構成
アプリケーションサーバーの任意のコンポーネントにアクセスするには、JNDIを使用して行う必要があります。 この春のためにそのようなJNDI名のルックアップなど、サーバの操作を提供し、それはまた、JNDIコンテキストのプロバイダとして動作するユーティリティクラスが用意されています。 このために、我々はresources.groovyで次の定義を追加する必要があります。
ejbJndi(org.springframework.jndi.JndiTemplate){ 環境= [ "org.jnp.interfaces.NamingContextFactory"、"java.naming.factory.initialで" "java.naming.provider.urlは"、"JNP:/ / http://localhost:1099
ここで:
- ejbJndi
- 型org.springframework.jndi.JndiTemplateであるBeanの名前。 この名前は何でもかまいません。 それは、オブジェクトへのアクセスを提供するネームサーバを決定するために参照されるこの名前です。
- 環境に
- JndiTempalteは、JNDIプロパティを持つマップで構成されているそのうちの財産です。
JndiTemplate JNDIプロバイダなどの多くの定義がアクセスを必要とするように、ファイルにある可能性があります。
JNDIサーバーの構成環境
それは環境の開発、製造やテストなどのさまざまな構成のJNDIサーバのIPとポートを必要とする、非常に可能性と必要です。 これを達成するためには、次のように、以前の設定に付加する必要があります。
- Config.groovyの各JBoss環境のIPとポートの値を置きます。
- ファイルタイプresources.groovy ConfigurationHolderをインポート
- 設定によって帯電変数"java.naming.provider.urlは"のIPとポートを交換してください。
例
Config.groovy
... 環境{ {開発 ... jboss.ip ="10.200.8.173" jboss.port ="1099" ... } 生産{ ... jboss.ip ="172.16.2.105" jboss.port ="1099" ... }
Resources.groovy
org.codehaus.groovy.grails.commonsのインポート.* ... ejbJndi(org.springframework.jndi.JndiTemplate){ 環境= [ "org.jnp.interfaces.NamingContextFactory"、"java.naming.factory.initialで" "java.naming.provider.urlは"、"JNP ://"+ +":"+ ConfigurationHolder.config.jboss.ip ConfigurationHolder.config.jboss.port] }
EJB 3.0のコンポーネントの設定
EJB 3.0のコンポーネントをインジェクトするためには、次の構成を追加する必要があります。
xXXServices(org.springframework.jndi.JndiObjectFactoryBean){ JNDI名="XXXServices /リモート" jndiTemplate = REF("ejbJndi") }
ここで:
- xXXServices
- あなたがSBにリモート参照を提供し、ドライバやサービスにこれを注入するために使用される名前です。 という名前のプロパティを持つ任意のドライバまたはサービスがxXXServicesがファイルresources.groovyでその名前で定義されたリモートSBへの参照を注入です。 最初のx は、規則で名前が小文字で始まる必要があることを示すために小文字になります。
- JNDI名
- JNDIサーバSBへの参照を配置することによって名前
- jndiTemplate
- JNDIオブジェクトにアクセスするためにプロバイダとして使用するBeanの名前。 前のセクションで定義されています。
サービスでSBを使用するには、次のようになります。
EjemploServices {パブリッククラス DEF xXXServices unMetodoボイド(param1、param2など){ xXXServices.invocoMetodoEnEJB(PARAM1、パラメータ2) } }
EJB 2.1コンポーネントの構成
EJB 2.1のコンポーネントは次の設定を追加する必要が注入するためには、EJB 3.0のために見られるものと似ています。
xXXServices(org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean){ JNDI名="EJBXXXServices" businessInterface ="biz.aquait.yyy.ejb.EJBXXXServices" jndiTemplate = REF("ejbJndi") refreshHomeOnConnectFailure =真 lookupHomeOnStartup =偽 }
ここで:
- xXXServices
- 名前は、SBへのリモート参照を提供し、ドライバやサービスにこれを注入するために使用されますです。 この名前のプロパティを持つ任意のドライバまたはサービスがファイルresources.groovyではその名前で定義されたリモートSBへの参照をxXXServices注入される。 最初のx は、規則で名前が小文字で始まる必要があることを示すために小文字になります。
- JNDI名
- JNDIサーバSBへの参照を配置することによって名前
- refreshHomeOnConnectFailure
- それは、接続障害を検出したときにサーバーの再起動時に、たとえば、家をリフレッシュ
- lookupHomeOnStartup
- それは、アプリケーションが自動的に手前にくるように検索を行うのではなく、SBからのサービスを使用できるようになります。
- jndiTemplate
- JNDIオブジェクトにアクセスするためにプロバイダとして使用するBeanの名前。 最初のポイントで定義されています。
- businessInterface
- EJBObjectを拡張するSB、すなわちのリモートインタフェース。
サービスまたは他のコンポーネント内にSBを使用する方法SBへの参照がEJB 3.0で実装するのと同じ方法です。
結論
我々はSBを使用するようにGrailsを構成することを言うことができる上に表示される手順に従えば、面倒ですし、フレームワーク内で、これらの使用は、Grailsのサービスその透明と同じ方法で使用されていること。

SessionBeansプロジェクトはTomcatなどのWebコンテナにデプロイされるだろうか? またはそれはGlassFishのようなアプリケーションサーバーを使用するために必要でしょうか?
良いポスト
ステートフルまたはステートレスSBは、EJBコンテナが必要、そのためには、GlassFishやJBossなどのアプリケーションサーバー内で実行する必要があります。 一方のTomcat上で単にWebサーバであり、そのようなJSP、JSF、およびサーブレットなどのWebコンテナ内のコンポーネントデプロイヤPODESのWebページを持っています。
何らかの理由でさせたくない場合にGrailsアプリケーションサーバで実行されるアプリケーションは、分散アーキテクチャを持っているかもしれません。 これは別のマシンにインストールされたApplication Server内にあるSBにリモートで使用するTomcatのWebアプリケーションを持つことになります。