第6章

サーバ実装の注意点

この章では、Novell exteNd Application Serverに関する実装の詳細をいくつか説明します。トピックは次のとおりです。

 
Top of page

J2EEコンテナ

J2EEコンポーネントモデルの中心となるのがコンテナです。コンテナは、Novell exteNd Application ServerなどのJ2EEプラットフォームプロバイダによって提供されるランタイム環境です。コンテナはライフサイクル管理およびその他のサービスを提供し、アプリケーション開発者がアプリケーションのプレゼンテーションとビジネス論理に集中できるようにします。

アプリケーションサーバは、次の3種類の各J2EEコンテナを実装します。

 
Top of section

Webコンテナ

Webコンテナには、WAR(Web Archive)ファイルにパッケージ化された「Webアプリケーション」が含まれています。アプリケーションサーバに展開する各WARは、完全なスタンドアロンアプリケーションとして機能します。WARファイルには、アプリケーションで使用するすべてのJSPページ、サーブレット、JavaBeansコンポーネント、ユーティリティクラス、スタティックHTMLページ、およびサウンドが含まれている必要があります。

JSPページおよびサーブレット   WARをサーブレットに展開した後は、WAR内の各JSPページはサーブレットのように動作します。ページはURLと関連付けられています。WebクライアントまたはサーバサイドオブジェクトがそのURLに対する操作を実行すると、サーバは関連付けられたサーブレットを検索してインスタンスを生成し、サーブレットに関連付けられているinit()およびservice()メソッドをコールします。サーブレットがアンロードされるときは、サーバはdestroy()メソッドをコールします。

WAR内のJSPページ(またはサーブレット)のサーブレットコンテキストは、WAR自身です。つまり、WARでアプリケーションの境界を定義しているため、JSPページまたはサーブレットを、別のWARに存在するJSPページまたはサーブレットに転送する(または含める)ことはできません。

永続性   アプリケーションサーバ上で実行されるJSPページは、永続的ではありません。JSPページの新規のインスタンスは、HTTP要求ごとに作成される場合があります(展開記述子でJSPページがスレッドセーフとして定義されているかどうかによります)。

応答   アプリケーションサーバは、Servlet APIを使用して応答バッファを実装します。応答データをバッファに格納するため、ServletResponseインタフェースの次のメソッドが使用されます。

長さ   setContentLength()をコールすることによってサーブレットでコンテンツの長さが指定されていない場合、サーバはHTTP 1.1チャンクを使用してコンテンツを一連のチャンクとして転送します。

URLの処理方法

WebクライアントまたはサーバサイドオブジェクトがWAR内のリソースを要求すると、サーバは要求されたURLを次の複数のコンポーネントに分割します。

コンポーネント

説明

コンテキストパス

WARを識別します。

サーブレットパス

WAR内の要求された項目(JSPページ、サーブレット、あるいはその他のリソース)を識別します。

pathinfo

(オプション)サーブレットに渡される外部データを提供します。一般的には、要求に対してpathinfoデータではなくクエリパラメータを渡した場合の方がパフォーマンスは優れています。これは、pathinfoを使用すると検索処理の速度が低下しますが、パラメータでは低下しないためです。

次の例は、myWarに展開されたWARファイルのURLのコンポーネントについて説明しています。

  http://host/db/path/to/war/myWar/foo.jsp/pathinfo/for/jsp

ここで、コンテキストパスは/db/path/to/war、サーブレットパスは/myWar/foo.jsp、そしてpathinfoは/pathinfo/for/jspです。

WAR内での要求のディスパッチ

同じWAR内に存在する任意の他のJSPページまたはサーブレットに、JSPページまたはサーブレットを転送する(あるいは含める)ことができます。

<jsp:forward>アクションまたは<jsp:include>アクションを使用する場合、ターゲットURLは、コンテキスト相対あるいはページ相対にすることができます。コンテキスト相対URLはスラッシュ(/)で始まり、WARに対して相対的であると解釈されます。ページ相対URLはスラッシュ(/)で始まらず、現在のページに対して相対的であると解釈されます。

JSPページに対する完全なURLがhttp://localhost/myDatabase/jsptests/myjsps/test.jspで、展開時にWARに指定したURLがjsptestsであるとします。この場合、同じWAR内のJSPページに次のタグを埋め込んで、ページに要求を送信することができます。

  <jsp:forward page="/myjsps/test.jsp"/>

サーブレットでは、ServletContextオブジェクトのgetRequestDispatcher()メソッドを使用してターゲットURLを指定すると、URLはコンテキスト相対になります。URLはスラッシュ(/)で始まる必要があり、WARに対して相対的であると解釈されます。要求をhttp://localhost/myDatabase/jsptests/myjsps/test.jspに送信するには、同じWAR内のサーブレットに次のコードを埋め込みます。

  ServletConfig sconfig = getServletConfig();
  ServletContext sc = sconfig.getServletContext();
  RequestDispatcher rd =
     sc.getRequestDispatcher("/myjsps/test.jsp");
  rd.forward(req, res);

forward()メソッドコールは、暗黙の「要求」および「応答」オブジェクトを引数として渡します。

JSPページとセッション管理

アプリケーションサーバは、クッキーまたはURLリライトを使用してセッションを追跡できます。ブラウザでクッキーがサポートされている場合はクッキーを使用し、サポートされていない場合はURLリライトを使用します。

For more information    詳細については、『管理者用ガイド』のサーバ設定に関する章の節を参照してください。

 
Top of section

EJBコンテナ

EJBコンテナは、EJB2.0 およびEJB 1.1Bean用のランタイム環境を提供します。ランタイム環境には、ネーミング、リモートアクセス、セキュリティ、およびトランザクションサポートなどの低レベルのサービスが含まれます。

この節では、EJBコンテナの機能について説明します。トピックは次のとおりです。

サポートされているEJB

EJBコンテナでサポートされているEJBは、次のとおりです。

EJBコンテナサービス

この節では、アプリケーションサーバを展開する際に提供されるサービスについて説明します。

デバッグ

EJBコンテナでは、「展開時」と「ランタイム時」の両方でデバッグサポートが提供されています。

展開デバッグのサポート   展開デバッグのサポートは、コマンドラインツールSilverCmdによって提供されます。次の表は、デバッグに役に立つコマンドについて説明しています。

SilverCmdコマンド

説明

ValidateEJB

仕様に照らしてEJBを検証します。

展開計画と展開記述子を検証します。

SilverCmd DeployEARおよびDeployEJBによってもコールされます。

エラーおよび警告を生成します。

DeployEAR

詳細レベル(-v)を指定できます。次の3段階のメッセージレベルを指定できます。

  • Low: 1を指定します。

  • Medium: 3を指定します。

  • High: 5を指定します。

検証を省略するには、-nを指定します。

DeployEJB

For more information    SilverCmdの詳細については、を参照してください。

ランタイムデバッグのサポート   ランタイムデバッグのサポートは、サーバの起動スイッチまたはサーバコンソールのコマンドシェルによって提供されます。次の表は、スイッチとその使用方法について説明しています。

サーバスイッチ

説明

EJBDebug

サーバで出力するメッセージのタイプを指定できます。この構文はサーバの起動時に使用します。

  SilverServer +DEJBDebug=n

nの有効な値は次のとおりです。

  • 1: CMPエンティティBeanに対してコンテナによって生成されたSQLを表示します(別の方法として、sql.debugを使用できます)。

  • 2: トランザクションの開始、コミット、およびロールバックを表示します。

  • 4: 例外を表示します。

  • 8: セキュリティを表示します。

  • 16: EJBメタデータを表示します。

  • 32:コンテキストツールの内容を表示します。

複数の出力タイプの指定    値の合計を使用します。たとえば、SQLと例外を表示するには、値5を使用します。

メッセージの表示    展開されているすべてのBeanまたは特定のBeanのメッセージを表示できます。Beanのサブセットの値を表示するには、EJBDebugName (次を参照)を使用します。

EJBDebugName

EJBデバッグメッセージを表示する1つのBean、または複数のBeanのセットを指定できます。このスイッチは、EJBDebugフラグ(上記)とともに指定します。サーバを起動する際の構文は次のとおりです。

  SilverServer +DEJBDebugName=name

ここで、 nameは次のとおりです。

  • 展開記述子のejb-name要素を指定します。

  • 大文字と小文字が区別されます。

  • 単一の文字または文字列を指定できます(デバッグメッセージには、指定した文字または文字列が含まれる名前のBeanが表示されます)。

インスタンスプール

EJBコンテナは、エンティティ、ステートレスセッション、およびメッセージ駆動型Beanのインスタンスプールをサポートします。プールはBeanごとにあり、展開計画の中で指定されます。プールサイズを再設定するには、更新された展開計画を使用してBeanを再展開します。

エンティティBeanセッションBeanに対しては、次の方法で値を指定します。

展開計画の項目

手順

initialPoolSize

プールを事前に割り当てるには、この値をゼロより大きい数字に設定します。

maxPoolSize

プール内にある未使用のインスタンスの最大数を指定します。

デフォルトは次のとおりです。

  • セッションBeanに対しては500

  • エンティティBeanに対しては0

  • メッセージ駆動型Beanに対しては5

poolingPolicy

最大プールサイズに達した場合の処理を定義します。

指定できる値はCREATEとFAILです(次を参照)。

エンティティBeanおよびステートレスセッションBeanのプールポリシー   Beanを展開する際に、EJBコンテナはインスタンスプールを作成しません。代わりに、インスタンスの必要性が増加したときにプールを作成します。

メッセージ駆動型Bean」に対しては、コンテナはServerSessionPoolインタフェースを実装することによってインスタンスプールを提供します。

ステートフルセッションBeanの非活性化   アプリケーションサーバは、GC(ガベージコレクション)レートを計測することによって、メモリの使用状況を監視します。GCレートが急激に増加すると、サーバはステートフルセッションBeanの非活性化を開始します。監視および非活性化を無効にするには、httpd.propsファイルに次の行を追加します。

  http-server.com.sssw.srv.disableMemMonitor=false

httpd.propsファイルは、サーバの\Resources ディレクトリにあります。

負荷分散

負荷分散の単位はセッションです。単一のセッションで使用されるすべてのEJBは、クラスタ内の単一サーバ上に常駐します。負荷分散はユーザに透過的で、クライアントは通常のJNDI検索を行うことができ、Beanを実行するサーバはネーミングサーバーによって選択されます。

クラスタ内でEJBを使用する場合は、別のネームサービスポートからサーバを起動する必要があります。デフォルトのネームサービスポートは54890です。ネームサービスポートはSMCを使用して設定できます。

For more information    アプリケーションサーバのクラスタ化メカニズムの詳細については、『管理者用ガイド』のクラスタの管理に関する章を参照してください。

ネーミングサービス

EJBは、JNDI(Java Naming and Directory Interface)のルートコンテキストに登録されます。展開計画で、JNDI名、Bean参照、リソース参照、環境変数、またはUserTransactionsに対して階層的な命名構造を指定した場合、コンテナはまだ存在していない中間サブコンテキストを作成します。

デフォルトでは、サーバは、Bean参照、環境変数、およびリソース参照を java:comp/envコンテキストに登録します。EJB仕様の推奨事項に従ってオブジェクトを別々のサブコンテキストに格納できますが、こられの命名規則はアプリケーションサーバでは適用されません。つまり、ユーザ独自の運用環境に最適な命名規則を使用できます。

リモートアクセス

アプリケーションサーバは、Novell exteNd ORB (Object Request Broker)を使用したRMI/IIOP経由でのEJBへのアクセスをサポートしています。exteNd ORBはエンタープライズクラスのJavaベースのCORBA ORBで、Novell exteNd メッセージングプラットフォームの一部です。

For more information    exteNd ORBの詳細については、Novell exteNd メッセージングプラットフォームヘルプを参照してください。

EJBを自由に検索できるようにするには、次のようなCORBA名構文を使用します。

  corbaname:iiop:host:port#name

例は次のとおりです。

  corbaname:iiop:MyMachine:54520#MyEJB

クライアントアクセス   クライアントがEJBにアクセスするには、EJBのインタフェース(コンパイル時の参照用)およびコンテナ生成スタブ(ランタイム用)が含まれるJARが必要です。

EJBの開発者は、EJBクライアントJARを作成し、展開記述子にejb-client-jar要素が含まれていることを確認する必要があります。この要素が存在する場合、コンテナはスタブクラスを生成して、スタブをクライアントJARに配置し、クライアントJARをサーバにアップロードします。

EJBクライアントJARはコンテナによって生成されてサーバ上に配置されるため、このJARをサーバからディスク上の適切な場所にダウンロードする必要があります。EJBクライアントJARのディスク上の場所をクライアントのクラスパスに指定します。EJBを変更して再展開するたびに、必ず新しいバージョンのEJBクライアントJARをダウンロードしてください。

ローカルアクセス

ローカルBeanの使用状況を確認するには、次を使用します。

  EJBLocalHome/beanName

セキュリティ

EJBコンテナは、次のものを使用してランタイム時にセキュリティを管理します。

認証とコール側の伝達

EJBをコールすると、サーバはユーザを認証し、そのサーバ上でコール側のセッションが有効な間は、コール側IDを使用します。すべてのメソッドコールは、そのセッションのIDを使用して実行されます。展開計画で役割名をプリンシパル(ユーザ、グループ、あるいはプリンシパルのリスト)にマップできます。

アクセス権限

アクセス権限は、展開記述子で指定されているsecurity-role要素およびmethod-permission要素によって定義されます。EJB JARに含まれるBeanの少なくとも1つのメソッドを保護する場合は、すべてのメソッドを保護する必要があります。そうしないと、コンテナは、セキュリティが指定されていないメソッドはすべて制限されていて、どのユーザもコールできないと想定します。また、展開記述子でexclude-list要素を使用して、コールできないメソッドのセットを指定することもできます。制限されたメソッドがコールされると、コンテナはAccessRightsViolation例外をスローします。または、どのメソッドも保護しないことで、安全でないモードを選択することもできます。

安全な通信

SSLを使用してEJBクライアントとアプリケーションサーバの間に安全な通信を確立できます。Novell exteNd ORBは、RSAに対してのみIIOP over SSLのサポートを提供します。

HTTPSが実行されている必要はありません。必要条件は次のとおりです。

For more information    EJBクライアントとアプリケーションサーバの間に安全な通信を確立する場合の詳細については、『管理者用ガイド』のセキュリティのセットアップに関する章を参照してください。

トランザクションサポート

EJBコンテナは、JTS (Java Transaction Service)を完全に実装しているNovell exteNd JTSサーバを介して、分散トランザクションをサポートします。

展開記述子でトランザクション属性が指定されていない場合、コンテナはデフォルトのトランザクション属性としてSupports属性を使用します。

 
Top of section

クライアントコンテナ

J2EEアプリケーションクライアント」は、ユーザコンピュータ上で動作してJ2EEサーバにアクセスするJavaベースのクライアントを提供するための標準的な方法です。J2EEアプリケーションクライアントは、少なくともJNDIネームスペースアクセスを提供するクライアントコンテナによってホストされます。その他にも、J2EE仕様では、基本的なものから強力なものまで、幅広いクライアントコンテナの実装が可能です。

アプリケーションサーバでは、サーバに展開されたJ2EEアプリケーションクライアントを実行するためにユーザが呼び出すことができるSilverJ2EEClientというクライアントコンテナが提供されています。SilverJ2EEClientには、次のものを含む強力なサポートサービスのセットが提供されています。

For more information    詳細については、を参照してください。

 
Top of page

セッションレベルフェールオーバー

アプリケーションは、Webアプリケーション(WAR)およびステートフルセッションBean(EJB JAR)のセッションレベルフェールオーバーをサポートしています。「セッションレベルフェールオーバー」とは、クラスタ内のサーバに障害が発生した際に、アプリケーションが一時的なユーザデータ(ステート)を保持する機能のことを指します。データは、永続的なストレージレポジトリ(クラスタ内のサーバによって共有されているデータベースやファイルシステムなど)に保存されるため、サーバ障害が発生した場合は、クラスタ内の任意のサーバで回復できます。

セッションレベルフェールオーバーをサポートするには、クラスタのディスパッチャとしてハードウェアディスパッチャをインストールしておく必要があります。セッションレベルフェールオーバー用に設定されているアプリケーションにアクセスするすべてのクライアントは、クラスタの(ハードウェア)ディスパッチャを介してアプリケーションにアクセスする必要があります。

フェールオーバーサポートは、単一のセッションに属するEJBを複数のサーバに負荷分散するためのメカニズムではありません。

 
Top of section

セッションレベルフェールオーバーに対するEJBのサポート

EJBコンテナは、ステートフルセッションBean(ローカルおよびリモート)のセッションレベフェールオーバーをサポートします。ステートフルセッションBeanは、次の要件を満たす必要があります。

ステートフルセッションBeanに対するセッションレベルフェールオーバーの動作

先にリストされている要件をセッションBeanが満たしていて、障害が発生した場合、回復は次のように行われます。

  1. 回復可能な1つまたは複数のステートフルセッションBeanが含まれる各トランザクションの最後に、EJBコンテナは、トランザクションで使用された回復可能なBeanをすべて非活性化およびシリアル化して、データベース(SilverMasterデータベースのAgSessBeansテーブル)に保存します。

  2. サーバが動作している限り、クライアントは引き続き同じサーバを使用します。

  3. リモートコールで通信エラーが発生した場合、クライアントはサーバに障害が発生したと想定します。

回復可能なセッションBeanがejbActivate()メソッドで大量の処理を実行していた場合は、EJBアプリケーションのパフォーマンスに影響を及ぼすことがあります。たとえば、セッションBeanがデータベース接続を割り当ててキャッシュする場合などです。

セッションレベルフェールオーバーをサポートするためのサーバ設定

IIOP over SSLを使用している場合にセッションレベルフェールオーバーをサポートするには、IIOP SSL通信に使用する一定範囲のポートをサーバに設定する必要があります。

For more information    広範なポートの設定の詳細については、『管理者用ガイド』のORB設定の指定に関する章を参照してください。

 
Top of section

セッションレベルフェールオーバーに対するWebアプリケーションサポート

WARコンテナは、セッションレベフェールオーバーをサポートしています。Webアプリケーションは次の要件を満たす必要があります。

Webアプリケーションに対するセッションレベルフェールオーバーの動作

先にリストされている要件をWebアプリケーションが満たしていて、障害が発生した場合、回復は次のように行われます。

  1. Webアプリケーションへの各HTTP要求に対して、サーバは、各要求の最後にHTTPSessionステートをデータベース(SilverMasterのAgSessBeansテーブル)にシリアル化します。

    コンテナは、各HTTP要求の最後にHTTPSessionステートを非活性化してシリアル化し、データベースに保存するため、アプリケーションの全体的なパフォーマンスに影響を及ぼす可能性があります。

  2. サーバが動作状態である限り、クライアント要求は引き続き同じサーバに送信されます。

  3. 要求間で障害が発生し、ハードウェアディスパッチャが使用されている場合、ディスパッチャはサーバ障害を検出して、次の要求を別のサーバに送信します。

ハードウェアディスパッチャがない場合

ハードウェアディスパッチャの代わりにアプリケーションサーバのソフトウェアディスパッチャを使用している場合、ユーザアプリケーションは、障害後に手動でディスパッチャに戻り、再ディスパッチされる必要があります。再ディスパッチされた場合、セッションIDクッキーが異なるため、新しいサーバによって自動的にステートが復元されることはありません。

フェールオーバーが機能しない場合

HTTPSessionステートはトランザクションではないため、特定の状況では、要求中に行われたHTTPSessionへの更新は失われます。たとえば、要求の処理中に要求が保存される前にサーバがクラッシュした場合などです。ただし、ステートが保存された後で応答を返す前にサーバがクラッシュした場合は、ステートを回復できます。

 
Top of section

セッションレベルフェールオーバーに対するアプリケーションクライアントサポート

前のセッションレベルフェールオーバーに対するWebアプリケーションサポートで説明されているように、J2EEクライアントアプリケーションは、WebコンポーネントとEJBがセッションレベルフェールオーバーの要件を満たしている限り、セッションレベルフェールオーバーをサポートするWebアプリケーションコンポーネントまたはEJBにアクセスすることができます。次のように、J2EEクライアントは、まずクラスタの(ハードウェア)ディスパッチャに接続する必要があります。

  SilverJ2EEClient dispatcher-name:port database-name application-name

For more information    SilverJ2EEClientの詳細については、を参照してください。

 
Top of page

CORBA サポート

アプリケーションサーバにはNovell exteNd ORBが含まれています。exteNd ORBは、エンタープライズクラスのJavaベースのCORBA ORBです。exteNd ORBは、アプリケーションサーバ、SilverJ2EEClient、または任意のブラウザから使用できます。exteNd ORBを使用して、JavaベースのCORBAアプリケーションの開発、展開、および管理を行うことができます。アプリケーションサーバは、次の機能のサブセットを使用します。

For more information    exteNd ORBの詳細については、Novell exteNdメッセージングプラットフォームヘルプを参照してください。

 
Top of page

XMLサポート

XML (eXtensible Markup Language)を使用することで、異なるタイプのコンピュータシステムや、Web上でアプリケーション間でデータを交換するために使用できるXMLドキュメントを作成できます。この節では、アプリケーションサーバでのXMLドキュメントの使用およびサポートについて説明します。トピックは次のとおりです。

 
Top of section

XMLに対するアプリケーションサーバサポート

アプリケーションサーバは次のものに対してXMLドキュメントを使用します。

詳細については、次の章を参照してください。

 
Top of section

XML習得のためのリソース

XMLの初心者の場合、または特定のXMLトピックについてのみ調べる必要がある場合は、次の学習リソースにアクセスしてみてください。

リソース

説明

場所

Novell exteNd 開発者サイト

多くのドキュメントやWebサイトへのリンクを含む、XML習得のためのインデックスおよび参考資料

developer.novell.com/extend

XML.orgサイト

XMLに関するニュースや情報についてのディレクトリ

www.xml.org

 
Top of page

各国対応サポート

この節では、次の各国対応トピックについて説明します。

 
Top of section

データベースサポート

アプリケーションサーバでの使用が認定されているすべてのJDBCドライバは、西ヨーロッパ/東ヨーロッパ言語およびアジアの言語をサポートするように完全にテストされています。

Procedure JDBC-ODBCブリッジドライバのマルチバイトバージョンを使用する

  1. サーバの\ResourcesディレクトリのAgUserIni.propsに次の行を追加します。

      com.sssw.srv.ambry.mbcs.AgOdbc=true
    
  2. アプリケーションサーバを再起動します。

 
Top of section

クライアント側のサポート

アプリケーションサーバには、簡字体中国語、繁体字中国語、英語、フランス語、ドイツ語、イタリア語、日本語、韓国語、ポルトガル語、ロシア語、およびスペイン語用のランタイム言語ライブラリが含まれています。

SilverJ2EEClientでフォントマッピングの問題が発生し、文字が正しく表示されない場合は、JREのfont.propertiesファイルを編集することによって問題を解決できます。Novell exteNd Common\\jre\\libディレクトリにあるfont.properties.XXファイルを編集する必要があります(XXは、使用する言語の2文字の言語エンコードです)。たとえば、韓国語の場合は、font.properties.koを編集します。

ファイルの2つのセクション   このファイルには、前後して2つのセクションが記述されています。各セクションには、name aliasesおよびfor backward compatibilityというラベルが付いています。

font.properties.koの元のバージョンは次のとおりです。

  # name aliases
  #
  # alias.timesroman=serif
  # alias.helvetica=sansserif
  # alias.courier=monospaced
  # for backward compatibility
  timesroman.0=Times New Roman,ANSI_CHARSET
  helvetica.0=Arial,ANSI_CHARSET
  courier.0=Courier New,ANSI_CHARSET
  zapfdingbats.0=WingDings,SYMBOL_CHARSET

処理方法   name aliasesセクションでは、存在しないフォント名を、ファイルに定義されているフォントマッピングにマップします。これらエイリアスの行のコメントを解除する必要があります(マップを処理する場合、この方法を推奨します。セクションfor backward compatibilityは、存在しないフォント名を、ファイルで定義されているフォントにマップするために以前に使用されていた方法です)。

注記:   このセクションの最初の3行のコメントを解除する必要があります。

更新されたバージョンのファイルは、次のようになります。

  # name aliases
  #
  alias.timesroman=serif
  alias.helvetica=sansserif
  alias.courier=monospaced
  # for backward compatibility
  # timesroman.0=Times New Roman,ANSI_CHARSET
  # helvetica.0=Arial,ANSI_CHARSET
  # courier.0=Courier New,ANSI_CHARSET
  zapfdingbats.0=WingDings,SYMBOL_CHARSET


Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.  more ...