最近在學(xué)習(xí)JMS的過程中,想練習(xí)些例子,可是又不想引入MDB,或者activeMQ之類的provider,單純的JMS實(shí)例又沒法訪問JNDI去創(chuàng)建connection,百般查找和嘗試后發(fā)現(xiàn),可以在GlassFish中創(chuàng)建JMS的ConnectionFactory和Queue,然后在Client中通過JNDI在GlassFish中進(jìn)行查找。
首先,在classpath中需要加入GlassFish的相關(guān)jar:
appserv-rt.jar
javaee.jar
appserv-deployment-client.jar
appserv-ext.jar
appserv-admin.jar
imqjmsra.jar
然后在代碼中new一個(gè)默認(rèn)的context就可以了:
QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory)context.lookup(QUEUE_CON_FACTORY);
這樣就可以直接在java代碼中通過main函數(shù)來測試你的JMS例子了。
同時(shí),也發(fā)現(xiàn)一個(gè)類似的用法,如果想通過一個(gè)獨(dú)立的java client去訪問GlassFish中的EJB的話,也可以使用同樣的方法,不過需要設(shè)置一下context中的參數(shù)了,如下:
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);
關(guān)于EJB的訪問方式,可參考:https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html
javax.naming.NamingException: ejb ref resolution error for remote business interfacecom.zj.dao.DbDeployDao [Root exception is java.lang.ClassNotFoundException: com.zj.dao.DbDeployDao]
而我是定義有這個(gè)接口的,不知原因,請教請教.