Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。第1章および第2章の抜粋を、InfoQ独占で編集したものである。5.0用の軽量フレームワーク」である。5.0に含まれるべきであった「欠如しているフレームワーク」と見なしている。5.0フレームワークの上位に位置し、エンタープライズWebアプリケーションのすべてのコンポーネントについて一貫した理解しやすいプログラミングモデルを提供する。ステートフルアプリケーションとビジネスプロセス駆動型アプリケーションの開発をスムーズに進ませる。Seamは開発者の生産性とアプリケーションの拡張性を追及するものである。Faces)1.2である。Objects)ベースの軽量フレームワークである。JSFは、Webアプリケーション用のMVC(Model-View-Controller)コンポーネントフレームワークである。Webアプリケーションが、ビジネスロジック用のEJB3モジュールとWebフロントエンド用のJSFモジュールの両方を備えているであろう。EJB3とJSFは相互補完的である一方で、それぞれ独自の原理を持つ個別のフレームワークとして設計されている。EJB3はアノテーション(注釈)を使用してサービスを構成するが、JSFはXMLファイルを利用する。EJB3とJSFのコンポーネントはフレームワークレベルで互いを認識していない。EJB3とJSFを連携させるには、ビジネスコンポーネントをWebページに結びつけるための人工的なファサードオブジェクト(つまり、JSFバッキングBean)と、フレームワークの境界を越えてメソッドを呼び出すためのボイラープレートコード(別名、プラミングコード)が必要となる。これらの技術を組み合わせることは、Seamの役割の一部である。Seamは、EJB3とJSFの間の人工的な層を崩壊させる。EJB3とJSFを統合する一貫したアノテーションベースのアプローチを提供する。UIイベントの処理が行える。Seamにより、開発者はすべてのアプリケーションコンポーネントについて「同種のもの」である、アノテーション付きPOJOを使用できる。他のWebフレームワークで開発されたアプリケーションと比べると、Seamアプリケーションは概念的に単純で、同じ機能性に対して必要なコードが(JavaおよびXMLの両方で)大幅に少ない。worldの例を見てほしい。Seamは、JSFで「困難」であったタスクの遂行も容易にする。POSTに頼りすぎることである。GET経由で取得するのは困難だ。Webページの生成が非常に容易である。Seamは、JSFアプリケーションのWebページの効率性と「Webのフレンドリ性」を向上させる、多数のJSFコンポーネントタグとアノテーションを提供する。同時に、SeamはPOJOにもEJB3コンポーネントモデルを拡大し、web層からビジネスコンポーネントまでステートフルなコンテキストを提供する。Microcontainerといった、他の多数の主要なオープンソースフレームワークを統合する。Seamは、JSFとEJB3を組み合わせる場合と同様の方法で、「これらのフレームワークを結びつける」だけでなくフレームワークも強化する。5.0サーバーだけに限定されない。1.4アプリケーションサーバーにも、普通のTomcatサーバーにも配備できる。2Seamはさまざまなフレームワークを組み合わせる単なる統合フレームワークである、と考えるのは間違いでしょう。Language)などを通じて他のフレームワークと深く統合できるようにします。統合のレベルは、サードパーティのフレームワークを熟知しているSeam開発者によって定義されています。Mapping)ソリューションは、今日のエンタープライズアプリケーションで広く使われている。ORMに対する最新のビジネスおよびWebフレームワークは設計されておらず、要求が発生してから応答が完全にレンダリングされるまでのWebインタラクションのライフサイクル全体で永続コンテキストを管理しない。Object)」のような卑劣なハッキングを引き起こした。King氏によって開発されたものである。ORMのベストプラクティスを促進するように、土台から設計されている。Seamでは、記述するDTOはなく、遅延ローディングが動作するだけである。拡張永続コンテキストがキャッシュとして機能し、データベースの往復を減らすため、ORMのパフォーマンスが大幅に向上する。SeamはORM層をビジネスおよびプレゼンテーション層と統合するため、我々はORMオブジェクトを直接表示でき、ユーザーは入力フォームでデータベース検証用(validator)アノテーションを使用することや、ORM例外をカスタムのエラーページにリダイレクトすることもできる。ステートフルなWebアプリケーション向けの設計Seamは、ステートフルなWebアプリケーション向けに設計されている。Webアプリケーションは本質的にマルチユーザーアプリケーションであり、電子商取引アプリケーションは本質的にステートフルでトランザクショナルである。既存のWebアプリケーションのフレームワークはほとんど、ステートレスなアプリケーションを対象としている。ユーザー状態を管理するには、HTTPセッションオブジェクトをいじる必要がある。それは、中核のビジネスロジックとは関係のないコードでアプリケーションを乱すだけでなく、数々のパフォーマンスの問題も引き起こす。Seamの、すべての基本的なアプリケーションコンポーネントは、本質的にステートフルである。Seamによって状態(ステート)は宣言的に管理されるため、HTTPセッションよりもはるかに使いやすい。Seamアプリケーションに厄介な状態管理コードを記述する必要はない。コンポーネントに、その範囲やライフサイクルメソッドやその他のステートフルなプロパティで注釈を付けるだけでよい。後はSeamが引き継ぐ。Seamのステートフルなコンポーネントは、普通のHTTPセッションよりもさらに細かいユーザー状態管理を提供する。それぞれが一連のWeb要求とビジネスメソッド呼び出しで構成された複数の「会話」を、1つのHTTPセッションで保持できる。データベースキャッシュとトランザクションは自動的にSeamのアプリケーションの状態と同期できる。Seamは自動的にデータベース更新をメモリに保存し、会話の終了時にデータベースに書き込む。メモリ内のキャッシュは、複雑なステートフルなアプリケーションにおけるデータベース負荷を大幅に低減する。jBPMビジネスプロセスエンジンとの統合をサポートすることで、Webアプリケーションの状態管理に大きな一歩を踏み出している。そのため、組織内のさまざまな人(顧客、マネージャ、テクニカルサポートなど)のワークフローを指定し、そのワークフローを使用して、UIイベントハンドラとデータベースに頼らず、アプリケーションを駆動できる。XML、Webページに対話性を持たせる技術)をサポートする複数の方法を提供する。その方法は、アドオンのJavaScriptレスなAJAXコンポーネント、AJAX対応の既存のJSFコンポーネントから、JavascriptオブジェクトとしてブラウザからSeamサーバーコンポーネントへ直接アクセスを提供するカスタムのJavaScriptライブラリにまでいたる。内部で、Seamは同一ユーザーからの複数のAJAX要求を効率的に管理する高度な同時並行処理モデルを提供する。AJAXアプリケーションにおける大きな難問は、データベース負荷の増加だ。AJAXアプリケーションは、非AJAXの同等物よりもはるかに多い頻度でサーバーに要求を行う。これらすべてのAJAX要求をデータベースで管理しなければならない場合、データベースは負荷を処理することができない。Seamのステートフルな永続コンテキストは、メモリ内キャッシュとして機能し、長期にわたる会話全体の情報を保持できるため、データベースの往復を減らすことができる。2.0アプリケーションは、そのデータに複雑な関係モデルを採用する傾向がある(たとえば、ソーシャルネットワークサイトの本質は「ユーザー」間の関係を管理および提供することだ)。したサイトでは、ORM層での遅延ローディングが不可欠であり、そうでなければ、単一のクエリーでデータベース全体のローディングにつながる。前に述べたように、SeamはWebアプリケーションの遅延ローディングを正しくサポートする唯一のWebフレームワークである。Object)の使用をサービスコンポーネントとして促進するため、「軽量フレームワーク」である。コンポーネントをアプリケーションに組み込むためのフレームワークインターフェイスや抽象型クラスは存在しない。疑問はこれらのPOJOがどのように相互作用してアプリケーションを形成するのかである。依存性の注入)として知られる有名な設計パターンを使用して一斉にPOJOコンポーネントを記述する。このパターンの下で、Seamフレームワークは、すべてのコンポーネントのライフサイクルを管理する。コンポーネントは別のコンポーネントの使用が必要になると、アノテーションを用いてSeamに対し依存性を宣言する。Seamは、アプリケーションの現在の状態に基づいて、この依存コンポーネントの取得場所を判断し、それを要求元のコンポーネントに「インジェクト(注入)」する。Injectionの概念を拡大し、SeamコンポーネントAは、別のコンポーネントBを作成して、作成したコンポーネントBを、後で他のコンポーネントCなどで使用するために、Seamに「アウトジェクト(逆注入)」することもできる。worldの例)でも広く使用されている。Bijection」と呼んでいる。Exception」だ。この考えは、コンポーネントの一般的な動作の一連のデフォルト値を持つことである。開発者は、目的の動作がデフォルトと異なる場合にのみ明示的にコンポーネントを設定すればよい。SeamがコンポーネントAをコンポーネントBのプロパティとしてインジェクトすると、コンポーネントAのSeam名はデフォルトで受信側のコンポーネントBのプロパティ名になる。Seamにはそのようなささいなものが多数存在する。そのため、Seamの設定メタデータは、競合のJavaフレームワークよりもはるかに単純であるといえる。結果として、ほとんどのSeamアプリケーションを、少数の単純なJavaアノテーションで適切に設定できる。開発者は、複雑さを軽減でき、最終的に、競合のフレームワークで開発された同じ機能性に対してはるかに少ないコード行で実現できるというメリットが得られる。XML乱用の回避おそらくお気付きのとおり、JavaアノテーションはSeam設定メタデータの表現および管理において重要な役割を担う。それは、フレームワークをより扱いやすくする設計によって果たされる。J2EEの初期では、XMLは設定管理において「聖杯」と見なされていた。フレームワーク設計者は、Javaのクラス名やメソッド名を含むあらゆる種類の設定情報を、開発者への影響についてそれほど考慮せずにXMLファイルに投入する。今にして思えば、それは大きな間違いであった。XML設定ファイルは非常に繰り返しが多い。設定をコードに接続するために、コードにすでにある情報を繰り返す必要がある。した繰り返しは、アプリケーションにささいなエラーを起こしやすくする(たとえば、スペルミスのクラス名はランタイム時にデバッグしにくいエラーとして現れる)。理にかなったデフォルト設定の欠如が、この問題をさらに悪化させている。実際に、一部のフレームワークでは、XMLを装ったボイラープレートコードの量が、アプリケーション内の実際のJavaコードの量に匹敵するか、越える場合すらある。hell(XML地獄)」として一般に知られている。エンタープライズJavaコミュニティは、XML乱用に関するこの問題を認識し、XMLファイルをJavaソースコード内のアノテーションに置き換えるという非常にうまくいった試みを得ている。EJB3は、Javaエンタープライズコンポーネント内のアノテーションの使用を推進するための公式のJava標準化組織による取り組みである。EJB3はXMLファイルを完全にオプションとしており、これは間違いなく、正しい方向への一歩である。SeamはEJB3アノテーションを追加して、アノテーションベースのプログラミングモデルをWebアプリケーション全体に拡大する。XMLは設定データにとって完全に悪いわけではない。Seam設計者は、XMLがWebアプリケーションページの指定やビジネスプロセスのワークフローの定義に適していることを認識している。XMLファイルを使用すると、情報をJavaソースファイルにまき散らすこととは対照的に、アプリケーション全体のワークフローを中央で管理できる。ワークフロー情報はソースコードとほとんど結び付きがない。したがって、XMLファイルはコードですでに利用可能な入力済みの情報を繰り返す必要はない。テスト用の設計Seamは容易にテストできるように土台から設計されている。すべてのSeamコンポーネントはアノテーション付きPOJOであるため、ユニットテストが非常に容易である。通常のJavaのnewキーワードを使用してPOJOのインスタンスを作成してから、テスティングフレームワーク(JUnitやTestNGなど)で任意のメソッドを実行できる。Injection機能に頼らずに明示的にsetterメソッドを使用する)。Seamアプリケーション全体の統合テストの場合は、Seamコンテナの内部でアプリケーションを実行する必要があるため、もう少し複雑である。Seamは、この種のテストを支援する埋め込み可能な軽量コンテナを備えている。そのため、テストフレームワークにおいてSeamコンテナをプログラムでロードしてから、テストを実行できる。優れたツールサポートツールサポートは、開発者の生産性に重点を置いたアプリケーションフレームワークにとって重要である。Genと呼ばれるコマンドラインアプリケーションジェネレータと共に配布される。Genは、Ruby-On-Railsで利用可能なツールによく似ている。Genは、データベースから完全なCRUDアプリケーションを生成する機能、「ブラウザの編集/保存/リロード」の動作によって開発者をWebアプリケーションにすばやく向けさせる機能、サポートをテストする機能などをサポートしている。IDE(統合開発環境)で動作することだ。5.0を超える強力な新しい機能を追加する。次のセクションでは(本書の第2章から抜粋)、実際のコード例を示してSeamがどのように動作するかを説明する。Seamの機能は、EJB3とJSF間の接着剤になることである。Seamはシームレスに(しゃれではない!)、管理コンポーネントを通じて2つのフレームワーク間を統合できる。Objects)プログラミングモデルをWebアプリケーション全体に拡大する。人工的に必要なJNDIルックアップ、詳細なJSFバッキングBean宣言、過度のファサードビジネスメソッド、および層の間を苦労して通過するオブジェクトなどはない。EEアプリケーションでは、JNDIルックアップ、コンポーネントのXML宣言、値オブジェクト、ビジネスファサードなどのいくつかの設計パターンが必須となっています。Seamは、アノテーション付きPOJOによってこれらの人工的な要件を排除します。これらのパターンがSeamアプリケーションで本当に必要な場合は、依然として自由に使用できます。Webアプリケーションの記述は、概念的に非常に単純である。次のコンポーネントをコーディングするだけでよい。:エンティティオブジェクトはデータモデルを表す。POJOでエンティティBeanになり得る。関係データベーステーブルに自動的にマッピングされる。Webページはユーザーインターフェイスを表示する。ページはフォームを通じてユーザー入力をキャプチャし、結果データを表示する。フォームフィールドとデータ表示テーブルはエンティティBeanまたはエンティティBeanの集合体にマッピングされる。WebページのUIイベントハンドラとして機能する。これらは、エンティティBeanでカプセル化されたユーザー入力を処理し、次のステップ(またはページ)での表示のためのデータオブジェクトを生成する。上記のコンポーネントはすべてSeamによって管理され、ランタイム時に自動的に正しいページ/オブジェクトにインジェクトされる。ユーザーがJSFフォームを送信するボタンをクリックすると、Seamは自動的にフォームフィールドを解析してエンティティBeanを構成する。その後、SeamはそのエンティティBeanを処理のために、これもまたSeamで作成されたイベントハンドラセッションBeanに渡す。独自のコード内のコンポーネントのライフサイクルやコンポーネント間の関係を管理する必要がない。依存性管理のためのXMLファイルもボイラープレートコードもない。worldの例を使用して、SeamがどのようにWebアプリケーションを張り合わせるかについて具体的に説明する。hello)」ことができる。フォームを送信すると、アプリケーションはユーザーの名前を関係データベースに保存して、Seamに挨拶したすべてのユーザーを表示する。サンプルのプロジェクトは、本書用のソースコードダウンロードに含まれるHelloWorldフォルダ内にある。1.6以上(http://ant.apache.org/)をインストールしておく必要がある。helloworldディレクトリに入り、antコマンドを実行する。ASインスタンスのserver/default/deployディレクトリに直接コピーできる。http://localhost:8080/helloworld/で利用可能だ。ASをインストールすることをお勧めします。ダウンロードできます。AS」を参照してください。Templates」を参照)。Tools」を参照)を使用して、設定ファイルすべてを含むプロジェクトテンプレートを自動的に生成できる。この章では、ソースコードプロジェクトのディレクトリ構造の詳細については時間をかけて説明しない。代わりに、開発者がSeamアプリケーションを構築するために記述または管理する必要のあるコードおよび設定に重点を置く。これで、テンプレートに限らずにどんなプロジェクト構造にも知識を応用できる。ソースコードのディレクトリSeamアプリケーションは、JavaクラスとXML/テスト設定ファイルで構成されます。ディレクトリ内にあります。Templates」を参照してください。worldアプリケーションのデータモデルは、名前とidプロパティを持つ単純なPersonクラスである。@Entityアノテーションは、このクラスを関係データベーステーブルに、各プロパティをテーブルの各列にマッピングするようにコンテナに伝える。各Personインスタンスは、テーブル内のデータの行に対応する。Exception」であるため、コンテナは単に、テーブル名と列名にクラス名のプロパティ名を使用する。idプロパティの@Idおよび@GeneratedValueアノテーションは、id列は主キー用であり、その値はデータベースに保存されたPersonオブジェクトごとにアプリケーションサーバーによって自動生成されることを示す。name;}}Personクラスで最も重要なアノテーションは、@Nameアノテーションである。Beanの登録に使用するための文字列名を指定する。Beanを参照できる。Beanを使用してフォーム入力テキストフィールドに戻る。#{person.name}記号は、「person」という名前のSeamコンポーネントのnameプロパティを示している。これは、PersonエンティティBeanのインターフェイスである。action="#{manager.sayHello}"/></h:form>エンティティフォームの下に、JSFページはデータベースのSeamに「こんにちは(hello)」と挨拶したすべてのユーザーを表示する。ユーザーのリストは「fans」という名前のSeamコンポーネント内に格納される。JSFのdataTableはリストを繰り返し、行内に各Personオブジェクトを表示する。fan記号はfansリストのイテレータである。」は、そのWebページを示したものである。Hello]ボタンをクリックしてフォームを送信すると、Seamは入力データを持つperson管理コンポーネントを作成する。その後、「manager」という名前のSeamコンポーネントのsayHello()メソッドを呼び出す(つまり、#{manager.sayHello}はフォーム送信ボタンのUIイベントハンドラである)。これは、personオブジェクトをデータベースに保存し、fansリストを更新する。managerコンポーネントはEJB3セッションBeanであり、これについては次のセクションで説明する。コンポーネントは、クラスで@Nameアノテーションによって指定されているとおり、ManagerActionセッションである。ManagerActionクラスは、@Inおよび@Outアノテーションに関連付けされたpersonおよびfansフィールドを持つ。fans;@Inおよび@Outアノテーションは、Seamプログラミングモデルの中心にある。ここでは、それらがどのように機能するかを見てみよう。Injection)、Seamに伝える。@Inでインジェクトされたコンポーネントに任意の名前を指定できる。ここでの例のように指定された名前がない場合、Seamは単に受信フィールド変数と同じタイプおよび同じ名前を持つコンポーネントをインジェクトする。フィールドの値を、同じ名前の管理コンポーネントに割り当てるように、Seamに伝える。Outjection」と呼ぶ。このように、ManagerAction.sayHello()メソッドでは、fansおよびpersonフィールド値を更新するだけでよく、それらは自動的にWebページで利用可能になる。バイジェクション(bijection)とは何かSeamの文書では、「バイジェクション(bijection)」という用語を目にすることがあります。この用語は、SeamコンポーネントとSeam管理コンテキスト間のインジェクションとアウトジェクションの双方向の注入を表しています。EntityManagerを通じてそれをデータベースに保存し、@PersistenceContextアノテーションを通じてインジェクトされる。その後、fansおよびpersonオブジェクトを更新し、これらはメソッドの終了後にアウトジェクトされる。sayHello()は、呼出し後に現在のJSFページが最新のモデルデータで再表示されることを示すためにnullを返す。}1つだけささいなことを除けば、ほぼ終了だ。お気付きのとおり、ManagerActionのBeanクラスはManagerインターフェイスを実装する。EJB3のセッションBeanの仕様に準拠するために、Bean内のビジネスメソッドすべてをリストするインターフェイスが必要である。下記はManagerインターフェイスのコードだ。最近のIDEツールからはこのインターフェイスを簡単に自動生成できる。Worldの例に必要なコードはこれですべてだ。次の2つのセクションでは、別の作業方法とSeamアプリケーションの設定について取り上げる。コードに取り掛かり、独自の小さいデータベースアプリケーション用にhelloworldプロジェクトをカスタマイズしたい場合は、この章の残りの部分を省略して構わない。Worldサンプルアプリケーションを急いで説明してきたが、別の作業方法や上記のコードで扱っていない重要な機能など、いくつかの重要なトピックを省略している。このセクションでは、それらのトピックについて説明する。Seamをより深く理解するのに役立つが、待ちきれない場合はこのセクションを飛ばして後回しにしてもよい。POJOコンポーネント上記の例では、EJB3セッションBeanを使用してアプリケーションロジックを実装したが、SeamではEJB3コンポーネントの使用に限定されない。実際、Seamでは、@Nameアノテーション付きのPOJOを管理コンポーネントに変えることができる。ManagerActionをEJB3セッションBeanではなくPOJOにすることができる。Beanの代わりにPOJOを使用することには良い点と悪い点がある。POJOは、EJB3固有のアノテーションとインターフェイスを必要としないため、若干簡単にプログラムできる(上記を参照)。POJOは、EJB3コンテナサービスを取得できないため、EJB3コンポーネントよりも機能が少ない。POJOで失うEJB3サービスの例として、次のことがある。@PersistenceContextインジェクションはもはやPOJOでは機能しない。アノテーションを使用してPOJOにインジェクトする必要がある。POJOでは宣言的なメソッドレベルのトランザクションをサポートしない。代わりに、Web要求を受信してから応答ページがレンダリングされるまでのデータベーストランザクションの境界を定めるようにSeamを設定できる。POJOはメッセージ駆動型コンポーネントになることはできない。@Asynchronousメソッドをサポートしない。コンテナ管理セキュリティをサポートしない。トランザクションまたはコンポーネントレベルの永続コンテキストはない。Scope」を参照)。コンテナの管理アーキテクチャ(すなわち、JMXコンソールサービス)への統合はない。メソッドへのJavaリモートメソッド呼び出し(RMI)はない。cコンポーネントになることはできない。POJOコンポーネントは、純粋な「ビジネスロジック」コンポーネントに適しており、データアクセス、メッセージング、およびその他のインフラストラクチャの機能性を他のコンポーネントに委託する。Seamデータアクセスオブジェクトを管理するのにPOJOコンポーネントを使用できる。「ビジネスロジック」POJOは、必要に応じて他のフレームワークで再使用できるため、便利だ。全体として見れば、それらのアプリケーションは、特に小型から中型のアプリケーションでは、EJB3コンポーネントよりもはるかに小さい。そのため、本書のほとんどの例で、EJB3コンポーネントを使用している。テストの容易さ第1章「Seamとは何か」で述べたように、Seamは容易かつコンテナ外でテストできるように土台から設計されている。helloworldプロジェクトでは、testフォルダにユニットテストとJSF統合テストの2つのテストケースを含めた。SE環境におけるデータベース、JSF、Seamコンテキスト、および他のアプリケーションサーバーサービスをまねる。これらのテストを実行するには、単にantテストを実行する。Worldの例では、フィールド変数に対するSeamコンポーネントのバイジェクト(biject)方法を説明した。getterおよびsetterメソッドに対してコンポーネントをバイジェクトすることもできる。次のコードがうまく機能する。setterメソッドが通じたバイジェクションの真の価値は、カスタムロジックを追加してバイジェクションプロセスを操作できることだ。インジェクトされたオブジェクトの有効性を確認することや、アウトジェクトされたオブジェクトをデータベースからオンザフライで取り出すことができる。Bijectionは非常に便利な設計パターンだ。他の設計パターンと同様に、過度に使用することの危険性が常にある。Bijectionを使いすぎると、開発者は各コンポーネントがどこからインジェクトされたかを心の中で把握する必要があるため、コードが読みづらくなることがある。バイジェクションはランタイム時に発生するため、パフォーマンスのオーバーヘッドが増える可能性がある。Worldの例では、バイジェクションを減らし、排除もできる簡単な方法がある。ビジネスコンポーネントのデータコンポーネントプロパティを作成するだけだ。このようにして、JSFページでは、ビジネスコンポーネントを参照することのみ必要で、ビジネスおよびデータコンポーネントを結びつけるためにバイジェクションは必要ない。ManagerActionクラスを次のように変更できる。...}次に、Webページ上で、次のようにプロパティを参照する。</h:column></h:dataTable>結論を言えば、Seamは依存性の管理に関して用途が広い。一般に、データコンポーネントとそのデータアクセスビジネスコンポーネントをカプセル化するとよい。ステートフルなビジネスコンポーネントではそうだ。JSFでのページナビゲーションこの例では、1ページのアプリケーションを使用している。各ボタンのクリック後、JSFは更新されたデータモデル値を持つページを再レンダリングする。ほとんどのWebアプリケーションは複数のページを持つ。JSFでは、UIイベントハンドラメソッドがナビゲーション規則の文字列名を返すことで、次にどのページを表示するかを決定できる。navigation.xmlファイルに次のナビゲーション規則を定義できる。<to-view-id>/anotherPage.jsp</to-view-id></navigation-case>その後、sayHello()メソッドが「anotherPage」の文字列値を返す場合、JSFは次にanotherPage.jspページを表示する。これにより、UIイベントハンドラメソッド内から次にどのページを表示するかをプログラム制御できる。関係データベーステーブルとエンティティBeanオブジェクト間のマッピングを管理する。EntityManagerはランタイム時にアプリケーションサーバーによって作成される。@PersistenceContextアノテーションを使用して、EntityManagerインスタンスをインジェクトできる。EntityManager.persist()メソッドは、エンティティBeanオブジェクトを、マッピングされた関係テーブル内に行として保存する。EntityManager.query()メソッドは、SQLライクなクエリーを実行して、エンティティBeanオブジェクトの集合の形式でデータベースからデータを取り出す。EntityManagerとクエリー言語の使用方法に関する詳細については、JPAのマニュアルを参照のこと。本書では、最も単純なクエリーのみを使用している。データを埋め込みHSQLデータベースに保存する。ASでアプリケーションを実行している場合は、次の手順によってHSQLデータベースのGUIコンソールを開くことができる。クリックし、次にstartDatabaseManagerメソッド下の[invoke]ボタンをクリックする。コンソールからデータベースに対して任意のSQLコマンドを実行できる。設定およびパッケージング次に、設定ファイルとアプリケーションのパッケージングの説明に移る。Genコマンドラインユーティリティを使用して、実際にほぼすべての設定ファイルを生成してスクリプトを構築できる。サンプルアプリケーションのソースプロジェクト内にあるものを再使用できる。したがって、最初にSeamプログラミング技術を学び、後で設定/配備について考えたい場合は、それでもよい。このセクションを安全に飛ばして、必要に応じて後で戻ってくればよい。EJB3コンポーネント設定に焦点を当てる。POJO設定と配備も、もちろん可能だ。ほとんどのSeam設定ファイルはXMLファイルである。XMLファイルは、コードの変更や再コンパイルなしに配備時間を変更することを可能にするため、配備時間の設定に非常に適している(WebアプリケーションのルートURLやバックエンドデータベースの場所など)。EJB3コンポーネントとの対話方法を設定するためなど)。XMLファイルはプレゼンテーション関連のコンテンツ(たとえば、Webページやページナビゲーションフロー)にも適している。我々が反対するのは、Javaソースコードにすでに存在する情報をXMLファイルに複製することだ。分かるとおり、この単純なSeamアプリケーションにはいくつかのXML設定ファイルがある。それらはすべて非常に短く、いずれもJavaコードですでに利用可能な情報に関係しない。言い換えると、Seamには「XMLコード」は存在しない。これらのXMLファイル内のほとんどのコンテンツはかなり静的である。そのため、独自のSeamアプリケーションにこれらのファイルを容易に再使用できる。Templates」を参照のこと。次の数ページを使用して、サンプルアプリケーションの設定ファイルとパッケージング構造の詳細を述べる。アプリケーションテンプレートに満足であり、待ちきれない場合は、この説明を飛ばしても構わない。worldサンプルアプリケーションの設定およびパッケージング方法を見てみよう。aRchive(EAR)ファイルにパッケージングする必要がある。この例では、EARファイルはhelloworld.earである。これには、3つのJARファイルと2つのXML設定ファイルが含まれる。jboss-app.xmlソースコードのディレクトリソースコードプロジェクトで、resources/WEB-INFディレクトリにはapp.war/WEB-INFに入る設定ファイルが含まれます。resources/META-INFディレクトリにはapp.jar/META-INFおよびhelloworld.ear/META-INFに入る設定ファイルが含まれます。resourcesディレクトリルートにはapp.jarのルートディレクトリに入るファイルがあります。application.xmlファイルは、EAR内のJARファイルをリストし、このアプリケーション用のルートURLを指定する。</module></application>jboss-app.xmlファイルは、このアプリケーション用のクラスローダを指定する。各EARアプリケーションはクラスローダに固有の文字列名を持つ必要がある。ここでは、重複を避けるため、クラスローダ名にアプリケーション名を使用する。</loader-repository></jboss-app>jboss-seam.jarファイルは、Seamの配布によるSeamライブラリJARファイルである。app.warおよびapp.jarファイルは、我々が作成する。次にapp.warおよびapp.jarファイルを見てみよう。aRchive(WAR)仕様にパッケージングされたJARファイルである。Seam設定ファイルが含まれる。ディレクトリにJSF固有のライブラリファイルを置くこともできる(jboss-seam-ui.jarなど)。Webアプリケーションに必要とされる。このファイルを使用して、JSFはJSFコントローラサーブレットを設定し、SeamはすべてのWeb要求をインターセプトする。このファイル内の設定はかなり標準的である。</context-param></web-app>faces-config.xmlファイルは、JSF用の標準の設定ファイルである。Seamはこれを使用して、SeamインターセプタをJSFライフサイクルに追加する。ファイルには、複数ページのアプリケーション用のJSFページナビゲーション規則が含まれる。worldの例は1ページしかないため、このファイルはここでは空白の状態である。components.xmlファイルには、Seam固有の設定オプションが含まれる。jndi-patternプロパティを除いて、アプリケーションにほとんど依存しない。Beanにアクセスするために、EARファイルのベース名を含む必要がある。Beanクラス(エンティティBeansとセッションBeanの両方)、およびEJB3関連の設定ファイルが含まれる。Beanクラスが含まれていることを把握し、それに応じてアノテーションを処理するために必要である。Beanでアノテーションをオーバーライドまたは補完できる追加の設定が含まれる。Seamアプリケーションでは、このファイルはSeamインターセプタをすべてのEJB3クラスに追加する。すべてのSeamアプリケーションに同一のファイルを再使用できる。</assembly-descriptor></ejb-jar>persistence.xmlファイルは、EJB3エンティティBeanのバックエンドデータベースのソースを設定する。データソース)を使用する。worldアプリケーションはこれで終わりだ。3つの単純なJavaクラス、JSFページ、および大部分はスタティックな一連の設定ファイルで、完全なデータベース駆動型Webアプリケーションが実現する。アプリケーション全体で、30行未満のJavaコードしか必要でなく、「XMLコード」は存在しない。それでもPHP出身者は次のように問いかけるかもしれない。私はPHPでより少ないコードでアプリケーションを開発できる!」その答えは、Seamアプリケーションは概念的にPHP(またはその他のスクリプト言語)アプリケーションよりもはるかに単純だということだ。Seamコンポーネントモデルにより、制御された保守可能な方法でより多くの機能性をアプリケーションに追加できる。分かるように、Seamコンポーネントは、ステートフルでトランザクショナルなWebアプリケーションの開発をスムーズに進ませる。オブジェクト関連マッピングフレームワーク(すなわち、エンティティBean)では、データベース固有のSQLステートメントを処理する必要なく、抽象的なデータモデルに焦点を当てることができる。この記事は、第1章と第2章からの抜粋に基づいている。本書の残りの部分では、Seamコンポーネントを使用してますます複雑なSeamアプリケーションを開発する方法について説明する。本書の全トピックを示している目次(PDF・英語)も参照のこと。King氏との2つのインタビュー記事も参照できる。5.0』(source)の著者である。Hacks』(source)とその他3冊の技術本の著者でもある。Michael氏は、軽量のエンタープライズ/Webアプリケーション、およびエンドツーエンドのモバイルアプリケーション開発を専門としている。Michael氏のブログ(source)を通じて連絡をとることが可能である。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。