オブジェクトの参照は、以下の手順で行います。
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処理を行います。
記述例を以下に示します。
// 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) { }