BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

WebLogic Server アプリケーションの開発

 Previous Next Contents Index PDF で侮ヲ  

プログラミング トピック

以下の節では、WebLogic Server 環境でのプログラミングに関する情報を提供し、WebLogic Server の便利な機能とさまざまなプログラミング手法の使い方について説明します。

 


メッセージのロギング

各 WebLogic Server インスタンスには、サーバが生成するメッセージを格納するログ ファイルがあります。アプリケーションは、ローカライズされたメッセージ カタログにアクセスするインターナショナライゼーション サービスを使用して、ログ ファイルにメッセージを書き込むことができます。ローカライゼーションが不要な場合は、weblogic.logging.NonCatalogLogger クラスを使用して、メッセージをログに書き込みます。このクラスは、クライアント アプリケーションがクライアントサイドのログ ファイルにメッセージを書き込むときにも使用できます。

詳細については、『WebLogic Server ロギング サービスの使い方』を参照してください。

 


WebLogic Server でのスレッドの使い方

WebLogic Server は高度なマルチスレッド アプリケーション サーバであり、ホストとなっているコンポーネントのリソースの割り当て、同時実行性、およびスレッドの同期化を慎重に管理します。WebLogic Server のアーキテクチャを最大限に活用するには、標準 J2EE API を使用して作成したアプリケーション コンポーネントを構築する必要があります。

通常、サーバサイド コンポーネントで新たなスレッドの作成が必要にならないアプリケーション設計をします。

このような警告にもかかわらず、スレッドの作成が適切な状況もあります。たとえば、複数のリポジトリを検索して、結合された結果セットを返すアプリケーションの場合、メイン クライアント スレッドを同期的に使用する代わりに、各リポジトリの新しいスレッドを非同期的に使用して検索を実行すると、より速く結果が返されることがあります。

アプリケーション コードでのスレッドの使用を決定したら、アプリケーションが作成するスレッドの数を制限できるようにスレッド プールを作成します。JDBC 接続プールのように、指定した数のスレッドをプールに割り当て、実行可能なクラスのプールから利用できるスレッドを取得します。プール内のすべてのスレッドが使用中の場合は、スレッドが戻されるまで待機します。スレッド プールを使用すると、パフォーマンスの問題を回避し、WebLogic Server の実行スレッドとアプリケーションの間のスレッドの割り当ても最適化できます。

スレッドでデッドロックが発生しそうな場所を把握しておき、デッドロックが発生したら確実に処理します。設計を慎重に見直して、スレッドがセキュリティ システムを危険にさらすことのないようにしておきます。

WebLogic Server スレッドとの望ましくない対話を避けるには、WebLogic Server コンポーネントの中でスレッドの呼び出しを使用しないようにします。たとえば、作成するスレッドからは、エンタープライズ Bean やサーブレットを使用しないでください。アプリケーション スレッドは、TCP/IP 接続による外部サービス、またはファイルの適切なロックや読み書きを行う外部サービスとの対話のような、独立していて分離されたタスクに使用するのが最適です。存続期間が短く、1 つの目的を実行して終了する (スレッドをプールに返す) スレッドの方が、他のスレッドと競合しません。

障害のポイントにクライアントを追加して、負荷が次第に大きくなるような状況でマルチスレッドのコードをテストします。アプリケーションのパフォーマンスと WebLogic Server の動作を監視し、プロダクション環境で障害が発生しないことを確認しておきます。

 


WebLogic Server アプリケーションでの JavaMail の使い方

WebLogic Server には、Sun Microsystems の JavaMail API バージョン 1.1.3 参照実装が含まれています。JavaMail API を使用すると、WebLogic Server アプリケーションに E メール機能を追加できます。JavaMail を使用すると、自社ネットワークまたはインターネット上の IMAP (Internet Message Access Protocol) 対応および SMTP (Simple Mail Transfer Protocol) 対応のメール サーバに Java アプリケーションからアクセスできます。JavaMail はメール サーバ機能を持っていないので、JavaMail を使用するにはメール サーバが必要です。

JavaMail API の使い方について詳細に説明したドキュメントは、Sun の Web サイトにある JavaMail のページで入手できます。ここでは、WebLogic Server 環境で JavaMail を使用する方法について説明しています。

weblogic.jar ファイルには、Sun の javax.mail および javax.mail.internet パッケージが入っており、また、weblogic.jar には、JavaMail で必要な JAF (Java Activation Framework) パッケージも含まれています。

javax.mail パッケージには、Internet Message Access Protocol (IMAP) および Simple Mail Transfer Protocol (SMTP) メール サーバのプロバイダが含まれています。Sun には、JavaMail 用に独自の POP3 プロバイダがあります。これは、weblogic.jar には含まれていません。使用する場合は、Sun からその POP3 プロバイダをダウンロードし、WebLogic Server のクラスパスに追加できます。

JavaMail コンフィグレーション ファイル

JavaMail は、システムのメール転送機能を定義するコンフィグレーション ファイルに依存します。weblogic.jar ファイルには、Sun の標準コンフィグレーション ファイルが入っています。このファイルにより、IMAP および SMTP メール サーバが JavaMail 向けに使用可能になり、JavaMail が処理できるデフォルトのメッセージ タイプが定義されます。

JavaMail を拡張してサポートする転送、プロトコル、およびメッセージのタイプを追加する場合を除いて、JavaMail コンフィグレーション ファイルを変更する必要はありません。JavaMail を拡張する場合は、Sun の Web サイトから JavaMail をダウンロードして、拡張を追加する Sun の手順に従います。次に、拡張した JavaMail パッケージを weblogic.jar の前の WebLogic Server クラスパスに追加します。

WebLogic Server 用の JavaMail のコンフィグレーション

WebLogic Server で使用するために JavaMail をコンフィグレーションするには、WebLogic Server Administration Console でメール セッションを作成します。これにより、あらかじめコンフィグレーションしておくセッション プロパティを使用して、サーバサイド コンポーネントとアプリケーションで JNDI を使用して JavaMail サービスにアクセスできるようになります。たとえば、メール セッションを作成すると、メール ホスト、転送および格納プロトコル、デフォルトのメール ユーザを Administration Console で指定できるため、JavaMail を使用するコンポーネントでこれらのプロパティを設定する必要はありません。WebLogic Server は単一のセッション オブジェクトを作成し、JNDI を通じてそのオブジェクトを必要とするすべてのコンポーネントで利用できるようにするため、多数の電子メール ユーザを持つアプリケーションではメリットが得られます。

  1. Administration Console で、左ペインの [メール] ノードをクリックします。

  2. [新しい Mail Session の作成] をクリックします。

  3. 右ペインのフォームに次のように入力します。

メール セッションで設定したプロパティ セットは、オーバーライドするプロパティを含む Properties オブジェクトを作成すると、コード内でオーバーライドできます。メール セッション オブジェクトを JNDI でルックアップした後、Properties を使用して Session.getInstance() メソッドを呼び出し、カスタマイズしたセッションを取得します。

JavaMail を使用したメッセージの送信

WebLogic Server コンポーネント内から JavaMail を使用してメッセージを送信する手順は次のとおりです。

  1. JNDI (ネーミング)、JavaBean Activation、JavaMail パッケージをインポートします。java.util.Properties もインポートします。
    import java.util.*; 
    import javax.activation.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.naming.*;

  2. JNDI でメール セッションを次のようにルックアップします。
    InitialContext ic = new InitialContext();
    Session session = (Session) ic.lookup("myMailSession");

  3. Administration Console で設定したセッションのプロパティをオーバーライドする必要がある場合は、Properties オブジェクトを作成してオーバーライドするプロパティを追加します。getInstance() を呼び出して、新しいプロパティの新しいセッション オブジェクトを取得します。
    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.host", "mailhost");
    // HTML フォームからのメール アドレスを発信元アドレスに使用する
    props.put("mail.from", emailAddress);
    Session session2 = session.getInstance(props);

  4. MimeMessage を作成します。次の例で、tosubject、および messageTxt は文字列の変数で、ユーザが入力した内容が入ります。
    Message msg = new MimeMessage(session2);
    msg.setFrom();
    msg.setRecipients(Message.RecipientType.TO,
    InternetAddress.parse(to, false));
    msg.setSubject(subject);
    msg.setSentDate(new Date());
    // コンテンツは、本文が 1 つある MIME マルチパート メッセージに
    // 格納される
    MimeBodyPart mbp = new MimeBodyPart();
    mbp.setText(messageTxt);
    Multipart mp = new MimeMultipart();
    mp.addBodyPart(mbp);
    msg.setContent(mp);

  5. メッセージを送信します。
    Transport.send(msg);

JNDI ルックアップでは、エラーが発生すると NamingException 例外が送出されます。JavaMail では、転送クラスの特定またはメール ホストとの通信に失敗した場合に MessagingException が送出されます。コードを try ブロックの中に配置し、これらの例外を捕捉するようにしておきます。

JavaMail を使用したメッセージの読み込み

JavaMail API を使用すると、メッセージ ストアに接続できます。メッセージ ストアは IMAP サーバまたは POP3 サーバとなります。メッセージはフォルダに保存されます。IMAP の場合、メッセージ フォルダはメール サーバ上に格納されます。メッセージ フォルダには、受信したメッセージが入るフォルダとアーカイブされたメッセージが入るフォルダがあります。POP3 の場合は、メッセージの到着時にメッセージを保存するフォルダをサーバが提供します。クライアントは、POP3 サーバに接続するときに、メッセージを取得してクライアントのメッセージ ストアに転送します。

フォルダは、ディスクのディレクトリと同じような階層構造になっています。フォルダにはメッセージまたは他のフォルダを格納できます。デフォルトのフォルダは構造の最上位にあります。特別なフォルダ名である INBOX は、ユーザのプライマリ フォルダのことを指し、デフォルト フォルダの内部にあります。受信したメールを読み込むには、ストアからデフォルト フォルダを取得して、次にデフォルト フォルダから INBOX フォルダを取得します。

API では、指定した数または範囲のメッセージを読み取る、またはメッセージの特定の部分をあらかじめ取り出してフォルダのキャッシュに入れるなど、メッセージの読み込みについて複数のオプションを提供しています。詳細については、JavaMail API を参照してください。

WebLogic Server コンポーネント内から POP3 サーバで受信したメッセージを読み込む手順は次のとおりです。

  1. JNDI (ネーミング)、JavaBean Activation、JavaMail パッケージをインポートします。java.util.Properties もインポートします。
    import java.util.*; 
    import javax.activation.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.naming.*;

  2. JNDI でメール セッションを次のようにルックアップします。
    InitialContext ic = new InitialContext();
    Session session = (Session) ic.lookup("myMailSession");

  3. Administration Console で設定したセッションのプロパティをオーバーライドする必要がある場合は、Properties オブジェクトを作成してオーバーライドするプロパティを追加します。getInstance() を呼び出して、新しいプロパティの新しいセッション オブジェクトを取得します。
    Properties props = new Properties();
    props.put("mail.store.protocol", "pop3");
    props.put("mail.pop3.host", "mailhost");
    Session session2 = session.getInstance(props);

  4. セッションから Store オブジェクトを取得し、connect() メソッドを呼び出してメール サーバに接続します。接続の認証を行うには、接続メソッドでメールホスト、ユーザ名、およびパスワードを提供する必要があります。
    Store store = session.getStore();
    store.connect(mailhost, username, password);

  5. デフォルト フォルダを取得し、そのフォルダを使用して INBOX フォルダを取得します。
    Folder folder = store.getDefaultFolder();
    folder = folder.getFolder("INBOX");

  6. フォルダ内のメッセージを、メッセージの配列に読み込みます。
    Message[] messages = folder.getMessages();

  7. メッセージの配列にあるメッセージを処理します。メッセージ クラスには、ヘッダ、フラグ、メッセージの内容など、メッセージのさまざまな部分にアクセスできるメソッドがあります。

IMAP サーバからのメッセージの読み込みは、POP3 サーバからのメッセージの読み込みと同様です。ただし IMAP の場合は、フォルダを作成および操作し、フォルダ間でメッセージを転送するメソッドが JavaMail API で提供されています。IMAP サーバを使用すると、POP3 サーバを使用する場合よりも少ないコードで、多機能な Web ベースのメール クライアントを実装できます。POP3 では、おそらくデータベースまたはフォルダを表すためのファイル システムを使用して、WebLogic Server からメッセージ ストアを管理するコードを記述する必要があります。

 


WebLogic Server クラスタのアプリケーションのプログラミング

WebLogic Server のクラスタにデプロイされる JSP およびサーブレットは、セッション データを保持するために特定の要件に従う必要があります。詳細については、『WebLogic Server クラスタ ユーザーズ ガイド』を参照してください。

WebLogic Server クラスタでデプロイされる EJB には、EJB のタイプに基づく制約があります。クラスタにおけるさまざまな EJB タイプの機能に関する詳細については、『WebLogic エンタープライズ JavaBeans プログラマーズ ガイド』の「WebLogic Server EJB コンテナとサポートされるサービス」を参照してください。EJB は、EJB デプロイメント記述子でプロパティを設定することでクラスタにデプロイできます。『WebLogic エンタープライズ JavaBeans プログラマーズ ガイド』の「weblogic-ejb-jar.xml 文書型定義」に、クラスタ化に関する XML デプロイメント要素が説明されています。

クラスタでデプロイするために EJB またはカスタム RMI オブジェクトのいずれかを開発する場合は、クラスタ化されたオブジェクトの JNDI ツリーでのバインドについて理解するために、『WebLogic JNDI プログラマーズ ガイド』の「クラスタ環境での WebLogic JNDI の使い方」も参照してください。

 

Back to Top Previous Next