2017-02-18 2 views
0

Я успешно разработал и JMS-очередь с использованием Oracle Glass-fish server 4.1 версии. Тогда я смог успешно отправлять и читать сообщения с помощью приложения Java EE, но мне нужно реализовать код отправителя на применение качели, я же код приложения Java EE, но он не работает нормально, пожалуйста, обратитесь ниже кодОтправить сообщение JMS queue с помощью java Swing

public class SenderSwing {  
    /** 
    * @param args the command line arguments 
    */ 
public static void main(String[] args) { 
    try { 

     new SenderSwing().sendJMSMessageToDefaultQueue("Hi "+System.currentTimeMillis()); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 
private void sendJMSMessageToDefaultQueue(Object messageData) throws JMSException, NamingException { 
    Context c = new InitialContext(); 
    ConnectionFactory cf = (ConnectionFactory) c.lookup("java:comp/DefaultJMSConnectionFactory"); 
    Connection conn = null; 
    Session s = null; 
    try { 
     conn = cf.createConnection(); 
     s = conn.createSession(false, s.AUTO_ACKNOWLEDGE); 
     Destination destination = (Destination) c.lookup("jms/defaultQueue"); 
     MessageProducer mp = s.createProducer(destination);    
     mp.send(createJMSMessageForjmsDefaultQueue(s, messageData)); 
    } finally { 
     if (s != null) { 
      try { 
       s.close(); 
      } catch (JMSException e) { 
       Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot close session", e); 
      } 
     } 
     if (conn != null) { 
      conn.close(); 
     } 
    } 
} 
private Message createJMSMessageForjmsDefaultQueue(Session session, Object messageData) throws JMSException { 
    // TODO create and populate message to send 
    TextMessage tm = session.createTextMessage(); 
    tm.setText(messageData.toString()); 


    return tm; 
} 

}

выше код дает мне исключение, как показано ниже,

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial 
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) 
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) 
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350) 
at javax.naming.InitialContext.lookup(InitialContext.java:417) 
at senderswing.SenderSwing.sendJMSMessageToDefaultQueue(SenderSwing.java:43) 
at senderswing.SenderSwing.main(SenderSwing.java:35) 

Может ли кто-нибудь помочь в этом.

ответ

1

В контексте сервера отсутствует стандартный заводский класс по умолчанию.

Попробуйте это в начале:

Hashtable env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, 
"com.sun.enterprise.naming.SerialInitContextFactory"); 
Context c = new InitialContext(env); 

Вам понадобится GlassFish-именование (или внедренной-все) банки в качестве зависимости.

Смежные вопросы