最近在學習JMS的過程中,想練習些例子,可是又不想引入MDB,或者activeMQ之類的provider,單純的JMS實例又沒法訪問JNDI去創建connection,百般查找和嘗試后發現,可以在GlassFish中創建JMS的ConnectionFactory和Queue,然后在Client中通過JNDI在GlassFish中進行查找。

     首先,在classpath中需要加入GlassFish的相關jar:
          appserv-rt.jar
          javaee.jar
          appserv-deployment-client.jar
          appserv-ext.jar
          appserv-admin.jar
          imqjmsra.jar

     然后在代碼中new一個默認的context就可以了:  

     Context context = new InitialContext();
     QueueConnectionFactory queueConnectionFactory 
=
                (QueueConnectionFactory)context.lookup(QUEUE_CON_FACTORY);

     這樣就可以直接在java代碼中通過main函數來測試你的JMS例子了。

     同時,也發現一個類似的用法,如果想通過一個獨立的java client去訪問GlassFish中的EJB的話,也可以使用同樣的方法,不過需要設置一下context中的參數了,如下:
       

     Properties props = new Properties(); 
     props.setProperty(
"java.naming.factory.initial",  "com.sun.enterprise.naming.SerialInitContextFactory"); 
     props.setProperty(
"java.naming.factory.url.pkgs""com.sun.enterprise.naming"); 
     props.setProperty(
"java.naming.factory.state""com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 
     props.setProperty(
"org.omg.CORBA.ORBInitialHost""localhost");  //host
     props.setProperty("org.omg.CORBA.ORBInitialPort""3700");  //EJB Port
     Context context = new InitialContext(props);

     關于EJB的訪問方式,可參考:https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html