我无法在另一个SLSB中注入SLSB。实际创建了3个项目 1)使用MDB创建了一个EJB项目 2)创建了一个带有无状态会话bean的EJB项目,用于发布消息 3)创建了一个带有无状态会话bean的EJB项目,用于注入上面的会话bean 但是在注入时我无法注入EJB,它返回null
代码如下 1)MDB:
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "activemq/queue/TestQueue"),
@ActivationConfigProperty(propertyName="acknowledgeMode", propertyValue="Auto-acknowledge")
})
@ResourceAdapter("activemq-ra.rar")
public class ConsumerMDB implements MessageListener {
public void onMessage(Message message) {
try {
System.out.println("Queue: Received a TextMessage at " + new Date());
TextMessage msg = (TextMessage) message;
System.out.println("Message is : " + msg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
2)会话Bean 1
package com.springboard.session;
import javax.annotation.Resource;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.TextMessage;
@Stateless
@LocalBean
public class ProducerSession implements ProducerSessionLocal {
@Resource(mappedName="java:jboss/activemq/QueueConnectionFactory")
public static QueueConnectionFactory factory;
@Resource(mappedName = "java:jboss/activemq/queue/TestQueue")
public static Queue queue;
@Override
public void sendMessage(String msg) {
System.out.println("****************Entering into method********************");
try {
System.out.println(queue.getQueueName());
QueueConnection qConnection = factory.createQueueConnection();
QueueSession qSession = qConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
TextMessage message = qSession.createTextMessage();
message.setText(msg);
QueueSender qSender = qSession.createSender(queue);
qSender.send(message);
qSender.close();
qSession.close();
qConnection.close();
} catch (JMSException e) {
e.printStackTrace();
}
System.out.println("****************Exiting into method********************");
}
}
,界面是 包com.springboard.session;
import javax.ejb.Local;
@Local
public interface ProducerSessionLocal {
public void sendMessage(String msg);
}
3)第二个会话bean注入第一个会话
@Stateless
public class TestProducerLocalBean implements TestProducerLocalBeanLocal {
@EJB(mappedName = "java:global/ProducerSessionActiveMQ/ProducerSession!com.springboard.session.ProducerSessionLocal")
public ProducerSessionLocal producer;
public TestProducerLocalBean() {
System.out.println("*************Testing Producer****************");
if(producer!=null){
producer.sendMessage("This Message is from SessionBean to Session Bean to MDB");
}
else{
System.out.println("EJB is null");
}
System.out.println("**********End************************");
}
@Override
public void messageSend(String msg) {
// TODO Auto-generated method stub
并且为了测试目的使用了一个类 import javax.ejb.EJB;
import com.springboard.session.test.TestProducerLocalBean;
public class testEJB {
@EJB
public static TestProducerLocalBean local =new TestProducerLocalBean();
public static void main(String[] args) {
}
}
在生产者EJB中,总是返回null。使用servlet注入ProducerSession我能够做到。但注入另一个EJB我无法得到它。 任何人都可以帮助我解决我所缺少的问题
提前致谢
答案 0 :(得分:0)
使用注入时使用初始化... = new Xyz()
是不正确的,因为这些字段的初始化是容器的责任。您可能尝试过,因为您注意到该字段为null,这是因为除非您使用应用程序客户端容器,否则主类中不支持注入(包括@EJB
)。