オブジェクトの参照は、以下の手順で行います。
javax.naming.Contextクラスオブジェクトを作成します。
lookup()メソッドを使用して、参照するオブジェクトに合わせたクラスオブジェクトを獲得します。
lookup()メソッドの引数には、以下を指定します。
EJBの場合、“java:comp/env/ejb/EJBアプリケーション名”
JDBCの場合、“java:comp/env/jdbc/JDBCリソースアクセス定義名”
JMSの場合、“java:comp/env/jms/JMSリソースアクセス定義名”
JavaMailの場合、“java:comp/env/mail/JavaMailリソースアクセス定義名”
connectorの場合、“java:comp/env/eis/connectorリソースアクセス定義名”
環境エントリの場合、“java:comp/env/環境エントリ名”
名前変換を利用してアクセスする場合、“java:comp/env/deployment descriptorの参照名”
EJB Homeオブジェクトの参照の場合、narrow処理を行います。
記述例を以下に示します。
以下は、例外javax.naming.NamingExceptionの対処を省略してあります。NamingExceptionの対処方法については“lookupで例外が発生した場合”を参照してください。
// EJB Homeオブジェクトのlookup処理 java.lang.Object ejbobj = null; EJB214ETYHome home = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); ejbobj = (java.lang.Object)nctx.lookup("java:comp/env/ejb/EJB214ETY"); home = (EJB214ETYHome)javax.rmi.PortableRemoteObject.narrow(ejbobj, EJB214ETYHome.class); } catch(javax.naming.NamingException ex) { }
注) Enterprise Beanの参照名を定義するときは、“ejb/Bean名”という形式で定義することを推奨します。
// EJB Local Homeオブジェクトのlookup処理 EJB214EmpCBMLocalHome home = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); home = (EJB214EmpCBMLocalHome)nctx.lookup("java:comp/env/ejb/EJB214EmpCBM"); } catch(javax.naming.NamingException ex) { }
注) Enterprise Beanの参照名を定義するときは、“ejb/Bean名”という形式で定義することを推奨します。
// JDBCデータソースのlookup処理 javax.sql.DataSource dataSource = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); dataSource = (javax.sql.DataSource)nctx.lookup("java:comp/env/jdbc/DB1"); } catch(javax.naming.NamingException ex) { }
JMSコネクションファクトリがjavax.jms.TopicConnectionFactoryの場合
// JMSコネクションファクトリのlookup処理 javax.jms.TopicConnectionFactory topic = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); topic = (javax.jms.TopicConnectionFactory)nctx.lookup("java:comp/env/jms/Topic"); } catch(javax.naming.NamingException ex) { }
JMSコネクションファクトリがjavax.jms.QueueConnectionFactoryの場合
// JMSコネクションファクトリのlookup処理 javax.jms.QueueConnectionFactory queue = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); queue = (javax.jms.QueueConnectionFactory)nctx.lookup("java:comp/env/jms/Queue"); } catch(javax.naming.NamingException ex) { }
//JavaMailメールセションのlookup処理 javax.mail.Session session = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); session = (javax.mail.Session)nctx.lookup("java:comp/env/mail/MailSession"); } catch(javax.naming.NamingException ex) { }
//URLのlookup処理 java.net.URL url = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); url = (java.net.URL)nctx.lookup("java:comp/env/url/SVURL"); } catch(javax.naming.NamingException ex) { }
//connectorコネクションファクトリのlookup処理 javax.resource.cci.ConnectionFactory cf = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); cf =(javax.resource.cci.ConnectionFactory)nctx.lookup("java:comp/env/eis/RA01"); } catch(javax.naming.NamingException ex) { }
JMSのDestinationがTopicの場合
// JMS Destination(javax.jms.Topic)のlookup処理 javax.jms.Topic topic = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); topic = (javax.jms.Topic)nctx.lookup("java:comp/env/jms/Topic"); } catch(javax.naming.NamingException ex) { }
JMSのDestinationがQueueの場合
// JMS Destination(javax.jms.Queue)のlookup処理 javax.jms.Queue queue = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); queue = (javax.jms.Queue)nctx.lookup("java:comp/env/jms/Queue"); } catch(javax.naming.NamingException ex) { }
//環境エントリのlookup処理 java.lang.Short val = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); val = (java.lang.Short)nctx.lookup("java:comp/env/SValue"); } catch(javax.naming.NamingException ex) { }
注) 引数に“java:comp/env/”を指定しないでlookup()メソッドを実行することも可能ですが、アプリケーションの移行性を重視する場合には推奨しません。
また、RMI over IIOP通信でコンテナが使用するORBオブジェクトも以下のように参照できます。
org.omg.CORBA.ORB orb = null; try { javax.naming.Context nctx = new javax.naming.InitialContext(); orb = (org.omg.CORBA.ORB)nctx.lookup("java:comp/ORB"); } catch(javax.naming.NamingException ex) { }
lookup()メソッドを発行した結果、例外javax.naming.NamingExceptionが返却される場合があります。
NamingExceptionの原因となる例外情報を取得する場合、NamingExceptionに対してgetMessage()メソッドを発行してください。getCause()メソッドでは取得できません。
try { ・・・ nctx.lookup(<参照名>); ・・・ } catch(javax.naming.NamingException ex) { ex.printStackTrace(); String msg = ex.getMessage(); throw new MyException(msg); }
EJBアプリケーションを参照する場合、CORBAサービスから例外が返却される可能性がります。CORBAサービスの例外は、getMessage()でマニュアル“メッセージ集”の“CORBAサービスから通知される例外情報/マイナーコード”の“CORBAサービスのマイナーコード”に記載されているような文字列が取得できます。
マイナーコードを解析する場合は、“minor code: ”の後の数値を利用してください。
注) 上記は、lookupの引数(<参照名>)に“java:comp/env/ejb/”で始まる文字列を指定した場合の解析方法です。