Glassfish Remote EJB from stand-alone client
サーバで設定したデータソースをローカルアプリで使いたいんだけど、Contextの設定はどうすんだろと調べてみた。
行き着いたのはGlassfishのFAQページ。→glassfish: EJB FAQ
日本語の記事とかぜんぜんないのね。
テストクライアントアプリを作ってみる。
データソースははじめからついてるDerbyPoolを利用。
(JNDI名はjdbc/__default)
クラスパスに以下のJarを追加。
- AS_HOME/lib/appserv-admin.jar
- AS_HOME/lib/appserv-rt.jar
- AS_HOME/lib/javaee.jar
- AS_HOME/lib/install/applications/jmsra/imqjmsra.jar
- AS_HOME/javadb/lib/derbyclient.jar
以下ソース
public class Client { public static void main(String[] args) { try { Hashtable<String, String> env = new Hashtable<String, String>(); env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); env.put(InitialContext.URL_PKG_PREFIXES, "com.sun.enterprise.naming"); env.put(InitialContext.STATE_FACTORIES, "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); env.put("org.omg.CORBA.ORBInitialHost", "localhost"); env.put("org.omg.CORBA.ORBInitialPort", "3700"); InitialContext ctx = new InitialContext(env); DataSource ds = (DataSource) ctx.lookup("jdbc/__default"); Connection connection = ds.getConnection(); connection.close(); } catch (Exception e) { e.printStackTrace(); } System.exit(0); } }
これで完成。
ちなみに、「INITIAL_CONTEXT_FACT」「URL_PKG_PREFIXES」「STATE_FACTORIES」の設定はappsesrv-rt.jarの中にjndi.propertiesが格納されてるのでぶっちゃけ不要w
リモートの鯖に接続する場合にHostとPortを指定するだけでOK。
でもいまってDIコンテナ主流でデータソース扱うのって少ない気が…。
JDBCでDB直接接続してコンテナ側がデータソース化しちゃうし。
(実際はHibernateやらiBATISやらがやってたりするが)
まぁ…わかっただけでも良しとしましょ。