Borland(R) Enterprise Server VisiBroker(R) プログラマーズリファレンス
ORB.init(String[ ],Properties)はORBのインスタンスを新たに生成します。ORBのインスタンスごとにTPBroker内部で使用するスレッドなどを生成し,コネクションを管理しています。これらが複数存在することで,性能の問題やメモリを圧迫するという問題が発生しますので,同時に保持するORBインスタンス数は必要最小限にしてください。また,ORBインスタンスはアプリケーションで参照をクリアしてもガベージコレクタによってメモリ上から破棄されません。そのため,必要がなくなったORBインスタンスに対しては,リソースとメモリの解放を行うorg.omg.CORBA.ORBクラスのdestroy( )メソッドを発行してください。ただし,destroy( )メソッドは使用中のコネクションも即時に解放するため,例外が発生することがあります。発行前には通信していないことを確認してください。ORBを必要とするクラスやメソッドが多く存在する場合や,Servletのように一つのプロセス内のスレッドとしてユーザアプリケーションが動作するような場合には,引数ありのORB.init( )の発行回数を抑止するための工夫が必要です。その方法として,一度取得したORBのインスタンスをstatic変数に保持しておき,それを使いまわすという方法が考えられます。
コーディング例: static org.omg.CORBA.ORB _orb=null; public static synchronized org.omg.CORBA.ORB getORB(String[ ] args,Properties props){ if(_orb==null){ _orb=org.omg.CORBA.ORB.init(args,props); } return _orb; }
ORBのインスタンスが必要な場合は上記のgetORBメソッドを呼び出すようにすることで,引数ありのORB.initの発行回数を抑止できます。しかし,クラスがリロードされるとstatic変数(上記例の_orb)が再度初期化されることに注意してください。
Java 2 SDK,Standard Editionでは,クラスをロードしたクラスローダが終了した場合にクラスがアンロードされ,リロードされたときにstatic変数が初期化されます。Servletなどクラスのリロード機能を持つアプリケーションでは,ユーザが意識していないところでServletなどが独自のクラスローダを終了させる場合があります。上記を考慮して,ORB.initの発行回数を抑止する方法として次の2とおりの方法が考えられます。
コーディング例: public static synchronized org.omg.CORBA.ORB getORB(String[] args,Properties props){ Properties sys_props=System.getProperties( ); org.omg.CORBA.ORB _orb=(org.omg.CORBA.ORB)sys_props.get("MyORB"); if(_orb==null) { _orb=org.omg.CORBA.ORB.init(args,props); } sys_props.put("MyORB",_orb); return _orb; }
org.omg.CORBA.ORB.shutdown( )を発行する場合は,次の点に注意してください。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.
COPYRIGHT (C) 1992-2004 Borland Software Corporation. All rights reserved.