0

我不明白什么不好,我需要有关此代码的帮助,所以这是代码

package chat;

        import javax.jms.*;
        import javax.naming.*;
        import java.io.*;
        import java.io.InputStreamReader;
        import java.util.Properties;

        public class pub implements javax.jms.MessageListener{
            private TopicSession pubSession;
            private TopicSession subSession;
            private TopicPublisher publisher;
            private TopicConnection connection;
            private String username;

            /* Constructor. Establish JMS publisher and subscriber */
            public pub(String topicName, String username, String password)
            throws Exception {
                // Obtain a JNDI connection
                Properties env = new Properties( );
                env.put(Context.SECURITY_PRINCIPAL, "guest"); 
                env.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); 
                env.setProperty("java.naming.provider.url", "localhost:1099"); 
                env.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");

                // ... specify the JNDI properties specific to the vendor

                InitialContext jndi = new InitialContext(env);


                // Look up a JMS connection factory
                TopicConnectionFactory conFactory =
                (TopicConnectionFactory)jndi.lookup("TopicConnectionFactory");

                // Create a JMS connection
                TopicConnection connection =
                conFactory.createTopicConnection(username,password);





                // Create two JMS session objects
                TopicSession pubSession =
                connection.createTopicSession(false,
                                              Session.AUTO_ACKNOWLEDGE);
                TopicSession subSession =
                connection.createTopicSession(false,
                                              Session.AUTO_ACKNOWLEDGE);

                // Look up a JMS topic
                Topic chatTopic = (Topic)jndi.lookup("topic/testTopic");

                // Create a JMS publisher and subscriber
                TopicPublisher publisher1 = 
                    pubSession.createPublisher(chatTopic);
                TopicSubscriber subscriber = 
                    subSession.createSubscriber(chatTopic);

                // Set a JMS message listener
                subscriber.setMessageListener(this);

                // Intialize the Chat application
                set(connection, pubSession, subSession, publisher1, username);

                // Start the JMS connection; allows messages to be delivered
                connection.start( );

            }
            /* Initialize the instance variables */
            public void set(TopicConnection con, TopicSession pubSess,
                            TopicSession subSess, TopicPublisher pub, 
                            String username) {
                this.connection = con;
                this.pubSession = pubSess;
                this.subSession = subSess;
                this.publisher = pub;
                this.username = username;
            }
            /* Receive message from topic subscriber */
            public void onMessage(Message message) {
                try {
                    TextMessage textMessage = (TextMessage) message;
                    String text = textMessage.getText( );
                    System.out.println(text);
                } catch (JMSException jmse){ jmse.printStackTrace( ); }
            }
            /* Create and send message using topic publisher */
            protected void writeMessage(String text) throws JMSException {
                TextMessage message = pubSession.createTextMessage( );
                message.setText(username+" : "+text);
                publisher.publish(message);
            }
            /* Close the JMS connection */
            public void close( ) throws JMSException {
                connection.close( );
            }
            /* Run the Chat client */
            public static void main(String [] args){
                try{
                    if (args.length!=3)
                        System.out.println("Topic or username missing");

                    // args[0]=topicName; args[1]=username; args[2]=password
                    pub chat = new pub("chat","temp","111");

                    // Read from command line
                    BufferedReader commandLine = new 
                      java.io.BufferedReader(new InputStreamReader(System.in));

                    // Loop until the word "exit" is typed
                    while(true){
                        String s = commandLine.readLine( );
                        if (s.equalsIgnoreCase("exit")){
                            chat.close( ); // close down connection
                            System.exit(0);// exit program
                        } else 
                            chat.writeMessage(s);
                    }
                } catch (Exception e){ e.printStackTrace( ); }
            }
        }

这是我在 eclipce 中运行它时遇到的错误:

 javax.jms.JMSSecurityException: User: temp is NOT authenticated
        at org.jboss.mq.security.SecurityManager.authenticate(SecurityManager.java:230)
        at org.jboss.mq.security.ServerSecurityInterceptor.authenticate(ServerSecurityInterceptor.java:66)
        at org.jboss.mq.server.TracingInterceptor.authenticate(TracingInterceptor.java:613)
        at org.jboss.mq.server.JMSServerInvoker.authenticate(JMSServerInvoker.java:172)
        at org.jboss.mq.il.uil2.ServerSocketManagerHandler.handleMsg(ServerSocketManagerHandler.java:238)
        at org.jboss.mq.il.uil2.SocketManager$ReadTask.handleMsg(SocketManager.java:419)
        at org.jboss.mq.il.uil2.msgs.BaseMsg.run(BaseMsg.java:398)
        at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756)
        at java.lang.Thread.run(Unknown Source)

我不明白问题是来自 jboss 连接还是代码不正确,请我需要帮助来运行这个程序谢谢!!!!

4

1 回答 1

0

似乎您尝试访问 JMS 提供程序的用户可能不允许访问该服务。

您确定用户名和密码正确且已被授予访问提供程序的正确权限吗?

于 2012-05-02T08:44:16.840 回答