在JBoss上发布Message-Driven Bean的一个痛苦的经历(一)

类别:Java 点击:0 评论:0 推荐:

初学Message-Driven Bean,想在JBoss上试一下,却发现这真是一个痛苦的过程。

Message-Driven Bean:
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.ejb.CreateException;
import javax.naming.*;
import javax.jms.*;

public class LogBean implements MessageDrivenBean,
    MessageListener {

    private transient MessageDrivenContext mdc = null;
    private Context context;
   
    public LogBean() {
        System.out.println("In SimpleMessageBean.SimpleMessageBean()");
    }

    public void setMessageDrivenContext(MessageDrivenContext mdc) {
        System.out.println("In "
            + "SimpleMessageBean.setMessageDrivenContext()");
 this.mdc = mdc;
    }

    public void ejbCreate() {
 System.out.println("In SimpleMessageBean.ejbCreate()");
    }

    public void onMessage(Message inMessage) {
        TextMessage msg = null;

        try {
            if (inMessage instanceof TextMessage) {
                msg = (TextMessage) inMessage;
                System.out.println("MESSAGE BEAN: Message received: "
                    + msg.getText());
            } else {
                System.out.println("Message of wrong type: "
                    + inMessage.getClass().getName());
            }
        } catch (JMSException e) {
            e.printStackTrace();
            mdc.setRollbackOnly();
        } catch (Throwable te) {
            te.printStackTrace();
        }
    }  // onMessage
   
    public void ejbRemove() {
        System.out.println("In SimpleMessageBean.remove()");
    }

} // class


客户端:
TestClient.java
import javax.naming.*;

import javax.jms.*;
import java.util.*;

public class TestClient {

 public static void main (String[] args) throws Exception {

  // Initialize JNDI
  Context ctx = new InitialContext();

  // 1: Lookup ConnectionFactory via JNDI
  TopicConnectionFactory factory =
  (TopicConnectionFactory)
   ctx.lookup("ConnectionFactory");

  // 2: Use ConnectionFactory to create JMS connection
  TopicConnection connection =
  factory.createTopicConnection();

  // 3: Use Connection to create session
  TopicSession session = connection.createTopicSession(
   false, Session.AUTO_ACKNOWLEDGE);

  // 4: Lookup Desintation (topic) via JNDI
  Topic topic = (Topic) ctx.lookup("topic/testTopic");

  // 5: Create a Message Producer
  TopicPublisher publisher = session.createPublisher(topic);

  // 6: Create a text message, and publish it
  TextMessage msg = session.createTextMessage();
  msg.setText("This is a test message.");
  publisher.publish(msg);
 }
}


发布过程:
ejb-jar.xml
<?xml version="1.0"?>
     <!DOCTYPE ejb-jar>
     <ejb-jar>
       <enterprise-beans>
         <message-driven>
           <ejb-name>Log</ejb-name>
           <ejb-class>LogBean</ejb-class>
           <message-selector></message-selector>
           <transaction-type>Bean</transaction-type>
           <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
           <message-driven-destination>
             <destination-type>javax.jms.Topic</destination-type>            
           </message-driven-destination>
         </message-driven>
       </enterprise-beans>      
     </ejb-jar>

jboss.xml
<?xml version="1.0"?>
<jboss>
 <enterprise-bean> 
      <message-driven>
        <ejb-name>Log</ejb-name>   
        <configuration-name>Standard Message Driven Bean</configuration-name>
        <destination-jndi-name>topic/testTopic</destination-jndi-name>               
      </message-driven> 
 </enterprise-bean>
</jboss>

Log日志:
.....................
2003-04-02 19:48:23,921 INFO  [org.jboss.deployment.MainDeployer] Starting deployment of package: file:/F:/jboss/server/default/deploy/ejb-test.jar
2003-04-02 19:48:23,968 INFO  [org.jboss.ejb.EjbModule] Creating
2003-04-02 19:48:23,984 INFO  [org.jboss.ejb.EjbModule] Deploying Log
2003-04-02 19:48:24,062 INFO  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] Creating
2003-04-02 19:48:24,078 INFO  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] Created
2003-04-02 19:48:24,078 INFO  [org.jboss.ejb.EjbModule] Created
2003-04-02 19:48:24,078 INFO  [org.jboss.ejb.EjbModule] Starting
2003-04-02 19:48:24,093 INFO  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] Starting
2003-04-02 19:48:24,093 INFO  [org.jboss.ejb.plugins.jms.DLQHandler] Creating
2003-04-02 19:48:24,171 INFO  [org.jboss.ejb.plugins.jms.DLQHandler] Created
2003-04-02 19:48:24,187 WARN  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] destination not found: topic/Log reason: javax.naming.NameNotFoundException: Log not bound<--------错误
2003-04-02 19:48:24,187 WARN  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] creating a new temporary destination: topic/Log
2003-04-02 19:48:24,187 INFO  [org.jboss.mq.server.jmx.Topic.Log] Creating
2003-04-02 19:48:24,187 INFO  [org.jboss.mq.server.jmx.Topic.Log] Created
2003-04-02 19:48:24,187 INFO  [org.jboss.mq.server.jmx.Topic.Log] Starting
2003-04-02 19:48:24,187 INFO  [org.jboss.mq.server.jmx.Topic.Log] Bound to JNDI name: topic/Log
2003-04-02 19:48:24,203 INFO  [org.jboss.mq.server.jmx.Topic.Log] Started
2003-04-02 19:48:24,281 WARN  [org.jboss.mq.security.SecurityManager] No SecurityMetadadata was available for Log adding default security conf
2003-04-02 19:48:24,281 INFO  [org.jboss.ejb.plugins.jms.DLQHandler] Starting
2003-04-02 19:48:24,296 INFO  [org.jboss.ejb.plugins.jms.DLQHandler] Started
2003-04-02 19:48:24,296 INFO  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] Started
2003-04-02 19:48:24,296 INFO  [org.jboss.ejb.EjbModule] Started
2003-04-02 19:48:24,296 INFO  [org.jboss.deployment.MainDeployer] Deployed package: file:/F:/jboss/server/default/deploy/ejb-test.jar
运行结果:
19:52:35,265 WARN  [OILServerILService] Connection failure (1).
java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
        at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java
:2133)
        at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(Object
InputStream.java:2316)
        at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStre
am.java:2383)
        at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream
.java:2455)
        at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputSt
ream.java:2604)
        at java.io.ObjectInputStream.readByte(ObjectInputStream.java:845)
        at org.jboss.mq.il.oil.OILServerILService$Client.run(OILServerILService.
java:205)
        at java.lang.Thread.run(Thread.java:536)
*******************************************************************************************************

jboss.xml,ejb-jar.xml是直接拷贝过来的。对于上面的错误始终不试不得其解,如是就

原封不动的拷贝一个实例,加上UTF-8后竟然上面的错误没有了。心里一阵狂喜,

可是。。。。。。
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>

<ejb-jar> 
  <enterprise-beans>
    <message-driven>     
      <ejb-name>Log</ejb-name>
      <ejb-class>LogBean</ejb-class>
      <message-selector></message-selector>
      <transaction-type>Bean</transaction-type>
      <acknowledge-mode>Auto-acknowledge</acknowledge-mode>
      <message-driven-destination>
        <destination-type>javax.jms.Topic</destination-type>
      </message-driven-destination>     
    </message-driven>
  </enterprise-beans>
</ejb-jar>
jboss.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
   <enterprise-beans>
      <session>
         <ejb-name>Log</ejb-name>
         <configuration-name>Standard Message Driven Bean</configuration-name>
         <destination-jndi-name>topic/testTopic</destination-jndi-name>
      </session>     
   </enterprise-beans>
</jboss>

Log日志:
..........................
2003-04-02 20:15:57,671 INFO  [org.jboss.deployment.MainDeployer] Starting deployment of package: file:/F:/jboss/server/default/deploy/ejb-test.jar
2003-04-02 20:15:57,796 INFO  [org.jboss.ejb.EjbModule] Creating
2003-04-02 20:15:57,812 INFO  [org.jboss.ejb.EjbModule] Deploying Log
2003-04-02 20:15:57,890 INFO  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] Creating
2003-04-02 20:15:57,890 INFO  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] Created
2003-04-02 20:15:57,890 INFO  [org.jboss.ejb.EjbModule] Created
2003-04-02 20:15:57,890 INFO  [org.jboss.ejb.EjbModule] Starting
2003-04-02 20:15:57,906 INFO  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] Starting
2003-04-02 20:15:57,906 INFO  [org.jboss.ejb.plugins.jms.DLQHandler] Creating
2003-04-02 20:15:57,984 INFO  [org.jboss.ejb.plugins.jms.DLQHandler] Created
2003-04-02 20:15:58,093 INFO  [org.jboss.ejb.plugins.jms.DLQHandler] Starting<--错误没有了。
2003-04-02 20:15:58,093 INFO  [org.jboss.ejb.plugins.jms.DLQHandler] Started
2003-04-02 20:15:58,109 INFO  [org.jboss.ejb.plugins.jms.JMSContainerInvoker] Started
2003-04-02 20:15:58,109 INFO  [org.jboss.ejb.EjbModule] Started
2003-04-02 20:15:58,109 INFO  [org.jboss.deployment.MainDeployer] Deployed package: file:/F:/jboss/server/default/deploy/ejb-test.jar
运行结果:
20:20:15,921 INFO  [STDOUT] In SimpleMessageBean.SimpleMessageBean()
20:20:15,937 INFO  [STDOUT] In SimpleMessageBean.setMessageDrivenContext()
20:20:15,937 INFO  [STDOUT] In SimpleMessageBean.ejbCreate()
20:20:15,937 INFO  [STDOUT] MESSAGE BEAN: Message received: This is a test messa
ge.
运行结果出来了,但是还是有错误。
20:20:16,031 WARN  [OILServerILService] Connection failure (1).
java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:168)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
        at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java
:2133)
        at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(Object
InputStream.java:2316)
        at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStre
am.java:2383)
        at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream
.java:2455)
        at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputSt
ream.java:2604)
        at java.io.ObjectInputStream.readByte(ObjectInputStream.java:845)
        at org.jboss.mq.il.oil.OILServerILService$Client.run(OILServerILService.
java:205)
        at java.lang.Thread.run(Thread.java:536)

虽然结果出来了,但是还是有下面的错误。唉,没办法了,放一下吧,等熟悉了后在

回来看是什么原因吧。


    

本文地址:http://com.8s8s.com/it/it17904.htm