EBX®モジュールは、標準のJava EE Webアプリケーションであり、XMLスキーマドキュメント、Javaクラス、静的リソースなどのさまざまなリソースをパッケージ化します。
EBX®モジュールはWebアプリケーションであるため、クラスローディングの分離、WARまたはEARパッケージング、Webリソースの公開などの機能の恩恵を受けます。
EBX®モジュールには、次のファイルが含まれています。
| 
 | この必須ドキュメントは、モジュールの主なプロパティとサービスを定義します。 モジュール宣言を参照してください。 | 
| 
 | これは、標準のJavaEEデプロイメント記述子です。アプリケーションサーバーの起動時にEBX®モジュールの登録を行うことができます。 モジュール登録を参照してください。 | 
| 
 | オプション。存在する場合、EBX®は「Implementation-Title」と「Implementation-Version」の値を管理>技術構成>モジュールとデータモデルに報告します。 | 
| 
 | このオプションのディレクトリには、パブリックURLを介してアクセスできるすべてのパッケージ化されたリソースが含まれています。 パッケージ化されたリソースを参照してください。 | 
Oracle WebLogicサーバーに必要なファイル:
| 
 | 次のような 
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
  <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>
</weblogic-web-app>
詳細については、 weblogic.xmlデプロイメント記述子エレメントを参照してください。 | 
モジュールは、ドキュメント/WEB-INF/ebx/module.xmlを使用して宣言されます。例を次に示します。
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:ebx-schemas:module_2.4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:ebx-schemas:module_2.4 http://schema.orchestranetworks.com/module_2.4.xsd"> <name>moduleTest</name> </module>
各プロパティのドキュメントについては、関連スキーマを参照してください。主なプロパティは次のとおりです。
| エレメント | 説明 | 必須 | 
|---|---|---|
| 
 | サーバーインスタンス内のモジュールの一意の識別子を定義します。モジュール名は通常、Webアプリケーションの名前(そのディレクトリの名前)に対応します。 | はい | 
| 
 | パブリックURLでWebアプリケーションを識別するモジュール名以外のパスを定義します。このパスは、絶対URLを計算するときに、モジュールの外部リソースのURLに追加されます。このフィールドが定義されていない場合、パブリックパスは上記で定義されたモジュールの | いいえ | 
| 
 | レガシーAPIを使用してユーザーサービスを宣言します。レガシーユーザーサービスの宣言と構成を参照してください。バージョン5.8.0以降では、新しいユーザーサービスを使用することを強くお勧めします。 | いいえ | 
| 
 | 再利用可能なJavaBeanコンポーネントを宣言します。 ワークフローパッケージを参照してください。 | いいえ | 
| 
 | Ajaxコンポーネントを宣言します。 Java APIのモジュールでのAjaxコンポーネントの宣言を参照してください。 | いいえ | 
EBX®で識別できるようにするには、アプリケーションサーバーの起動時にモジュールを実行時に登録する必要があります。 Webアプリケーションの場合、すべてのEBX®モジュールは次のことを行う必要があります。
クラス ModuleRegistrationListener を拡張するアノテーション @WebListener を持つJavaクラスが含まれています。
@WebListenerアノテーションを使用する場合は、Webアプリケーションのサーブレット3.0アノテーションスキャンをアクティブ化するようにアプリケーションサーバーが構成されていることを確認してください。詳細については、JSR 315:Java TMサーブレット3.0仕様を参照してください。
また、以下にも注意ください。
クラス ModuleRegistrationServlet を拡張するサーブレットが含まれています。
デプロイメント記述子/WEB-INF/web.xmlでこのサーブレットの標準宣言を行います。
<load-on-startup>1</load-on-startup> の標準エレメントをデプロイメント記述子に追加して、このサーブレットがサーバーの起動時に登録されるようにします。
追加の推奨事項と情報:
ModuleRegistrationServlet のメソッド handleRepositoryStartup を使用すると、モジュールに関連付けられたロガーを設定し、一般的なJavaScriptやCSSリソースなどの追加の動作を定義できます。
ModuleRegistrationServlet を拡張する特定のクラスは、Webアプリケーション(/WEB-INF/classesまたは/WEB-INF/libの下)に配置する必要があります。このクラスは、モジュールに関連付けられたデータモデルによって使用されるJavaクラスをロードするために、アプリケーションのクラスローダーへのフックとして内部的に使用されます。
アプリケーションサーバーの起動プロセスは非同期であり、Webアプリケーション/EBX®モジュールは動的に検出されます。 EBX®リポジトリの初期化はこのプロセスに依存し、使用されているすべてのモジュールの登録を無制限の時間待機します。結果として、使用済みモジュールが何らかの理由でデプロイされていない場合は、EBX®メイン構成ファイルで宣言する必要があります。詳細については、プロパティモジュールを未デプロイとして宣言するを参照してください。
すべてのモジュールの登録と登録解除は、log.kernelカテゴリに記録されます。
モジュールのロード中に例外が発生した場合、原因はアプリケーションサーバーのログに記録されます。
サーブレットがサービスを停止すると、モジュールは登録解除され、データモデルと関連するデータセットは使用できなくなります。ホットデプロイメント/アンデプロイメントはサポートされていないことに注意してください。
次に、Java EEデプロイメント記述子(/WEB-INF/web.xml)の例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                          https://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0">
	<servlet>
	   <servlet-name>InitEbxServlet</servlet-name>
	   <servlet-class>com.foo.RegisterServlet</servlet-class>
	   <load-on-startup>1</load-on-startup>
	</servlet>
</web-app>
ModuleRegistrationServletの実装例を次に示します。
package com.foo;
import javax.servlet.*;
import javax.servlet.http.*;
import com.onwbp.base.repository.*;
/**
  */
public class RegisterServlet extends ModuleRegistrationServlet
{
	public void handleRepositoryStartup(ModuleContextOnRepositoryStartup aContext)
		throws OperationException
	{
		// Perform module-specific initializations here
		...
		
		// Declare custom resources here
		aContext.addExternalStyleSheetResource(MyCompanyResources.COMMON_STYLESHEET_URL);
		aContext.addExternalJavaScriptResource(MyCompanyResources.COMMON_JAVASCRIPT_URL);
		
		aContext.addPackagedStyleSheetResource("myModule.css");
		aContext.addPackagedJavaScriptResource("myModule.js");
		
	}
	
	public void handleRepositoryShutdown()
	{
		// Release resources of the current module when the repository is shut down here
		...
	}
	
		public void destroyBeforeUnregisterModule()
	{
		// Perform operations when this servlet is being taken out of service here
		...
	}
}
パッケージ化されたリソースは、クライアントブラウザから直接アクセスできるファイルとドキュメントであり、osd:resource フィールドまたはJava APIを介して管理および指定できます。それらにはさまざまなタイプがあり、ローカライズすることもできます。
パッケージ化されたリソースは、次のディレクトリ構造の下に配置する必要があります。
最初のレベルでは、ディレクトリ/www/がモジュール(Webアプリケーション)のルートに配置されている必要があります。
2番目のレベルでは、ディレクトリでローカリゼーションを指定する必要があります。以下のとおりです。
common/には、ロケールに依存しないか、デフォルトのローカリゼーションとして使用されるため、デフォルトで使用されるすべてのリソースが含まれている必要があります(EBX®では、デフォルトのローカリゼーションはen(英語)です。)
{lang}/は、下にあるリソースのローカリゼーションが必要な場合、{lang} は実際のロケールコードに置き換えられます。 EBX®でサポートされているロケールに対応している必要があります。詳細については、EBX®ローカリゼーションの構成を参照してください。
3番目のレベルでは、ディレクトリでリソースタイプを指定する必要があります。以下のとおりです。
JavaScriptリソースの場合は、jscripts/です。
カスケードスタイルシート(CSS)リソースの場合は、stylesheets/です。
HTMLリソースの場合は、html/です。
アイコンタイプのリソースの場合は、icons/です。
画像タイプのリソースの場合は、images/です。
この例では、画像logoWithText.jpgがローカライズされている唯一のリソースです。
/www
 ├── common
 │   ├── images
 │   │   ├── myCompanyLogo.jpg
 │   │   └── logoWithText.jpg
 │   ├── jscripts
 │   │   └── myCompanyCommon.js
 │   └── stylesheets
 │       └── myCompanyCommon.css
 ├── de
 │   └── images
 │       └── logoWithText.jpg
 └── fr
     └── images
         └── logoWithText.jpg