0
嗨,我是j2ee編碼新手。我的問題是關於MDB。 我已經建立了我的weblogic 11g服務器。並且隊列已經建立。EJB3.0如何使用MDB
我已經寫了客戶端代碼,它是一個java se客戶端,向隊列發送消息。
import java.util.Hashtable;
import java.util.Properties;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class MyMDBClient {
/**
* @param args
*/
public static void main(String[] args) {
QueueConnection cnn = null;
QueueSender sender = null;
QueueSession session = null;
InitialContext ctx;
Hashtable ht = new Hashtable();
try {
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
ctx = new InitialContext(ht);
Queue queue = (Queue) ctx.lookup("jms/testQueue");
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("jms/connectionFactory");
cnn = factory.createQueueConnection();
session = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
TextMessage msg = session.createTextMessage();
msg.setText("helloworld");
sender = session.createSender(queue);
sender.send(msg);
System.out.println("Message sent successfully to remote queue.");
session.close(); // this is important.
} catch (Exception e) {
e.printStackTrace();
}
}
}
我可以在我的weblogic管理控制檯上看到隊列中的消息。
但是,我的mdb在服務器端沒有被調用。
誰能告訴我什麼是錯的。我更喜歡解決方案是在Java註釋。謝謝大家閱讀這個。
這裏是我的服務器代碼:
/**
* import
*
*/
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import weblogic.ejbgen.*;
/**
* Message-Driven Bean implementation class for: MyMDB
*
*/
@MessageDriven(ejbName="mdb", destinationType="javax.jms.queue",destinationJndiName="jms/testQueue" )
public class mdb implements MessageListener {
/**
* Default constructor.
*/
public mdb() {
}
/**
* @see MessageListener#onMessage(Message)
*/
public void onMessage(Message message) {
TextMessage tmsg = null;
tmsg = (TextMessage) message;
System.out.println("----------------");
System.out.println("Received message : ");
try {
System.out.println(tmsg.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("----------------");
}
}
嘿傑夫。是的,這是問題之一。另一個問題是我沒有將我的ejb項目打包到耳邊。不管怎麼說,多謝拉! :) – 2011-05-13 08:55:18
要點什麼應該指向connectionFactoryJndiName?連接工廠或目標資源? – adrift 2012-06-18 14:50:11
我在部署日誌時收到了類似以下內容:[#| 2012-06-18T17:54:36.537 + 0300 | WARNING | sun-appserver2.1 | javax.enterprise.resource.resourceadapter | _ThreadID = 33; _ThreadName = Thread-550; setConnectionFactoryJndiName; com.sun.messaging.jms.ra.ActivationSpec; _RequestID = 75481082-f7b6-414b-b52e-f9558d6597ff; | RAR8000:setConnectionFactoryJndiName方法不存在於類中:com.sun.messaging.jms .ra.ActivationSpec |#] – adrift 2012-06-18 14:56:15