Я установил Glassfish5 и запустил его с помощью eclipse.Я также вошел в консоль администратора Glassfish и создал две очереди, а именно Queue01 и Queue02 в опции JMS Resources \ Destination Resources.Код не делает, но когда я запускаю его, последнее, что он выполняет, - это оператор print перед командой lookup.Вот мой код:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.jms.ConnectionFactory;
import javax.jms.JMSContext;
import javax.jms.JMSException;
import javax.jms.JMSProducer;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Main implements MessageListener{
public static void main(String[] args) throws JMSException,NamingException, IOException{
if(args.length!=3) System.out.println("usage: username subscribe-to-queue publish-to-queue");
else {
String username = args[0];
System.out.println("username: " + username + " | subscribe-to-queue-name " + args[1] + " | publish-to-queue-name " + args[2]);
Context initialContext = Main.getInitialContext();
Main myMain = new Main();
System.out.println("Before Queue");
Queue queue01 = (Queue) initialContext.lookup(args[1]);
Queue queue02 = (Queue) initialContext.lookup(args[2]);
//java:comp/DefaultJMSConnectionFactory is the default conection at the JMS app server (no need to define it)
System.out.println("Before ConnectionFactory");
JMSContext jmsContext = ((ConnectionFactory) initialContext.lookup("java:comp/DefaultJMSConnectionFactory")).createContext();
//we use jms context to pickup jms consumer and assign it our own class (Main)
System.out.println("Before createConsumer");
jmsContext.createConsumer(queue01).setMessageListener(myMain);
System.out.println("Before jmsProducer");
JMSProducer jmsProducer = jmsContext.createProducer();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String msgToSend = null;
System.out.println("Before while");
while(true) {
System.out.println("Please enter msg:");
msgToSend = bufferedReader.readLine();
if(msgToSend.equalsIgnoreCase("exit")) {
jmsContext.close();
System.exit(0);
}else {
System.out.println("Before send");
jmsProducer.send(queue02, "["+username+": "+msgToSend+"]");
System.out.println("after send");
}
}
}
}
@Override
public void onMessage(Message message) {
try{System.out.println(message.getBody(String.class));}
catch (JMSException e) {e.printStackTrace();}
}
public static Context getInitialContext () throws JMSException,NamingException
{
Properties prop = new Properties();
prop.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
prop.setProperty("java.naming.factory.url.pkgs", "org.jnp.interfaces");
prop.setProperty("java.naming.provider.url", "jnp://localhost:3700");
Context context = new InitialContext(prop);
//Context context = new InitialContext();
return context;
}
}
Любой намек на то, что не так с моим кодом, что приводит к невозможности выполнить команду поиска?Проблема в том, что я не вижу сообщений об ошибках, которые бы подсказали мне, что не так.Я попытался изменить URL провайдера без удачи.