这个主要是在同一个项目中调用一个session-bean,将消息发送到一个单独项目中的消息驱动bean。
另一个项目已完全部署并正常运行。
对于此项目,可以部署session-bean ejb。问题是当我尝试运行我的客户端主代码时,netbeans可以部署代码但是在运行它时给我(警告:创建ejb对象的异常:[SSSbean])。我根本不明白为什么无法创建ejb对象。有什么想法吗?
会话Bean如下:
public class SSSbean implements SSSbeanRemote {
@Resource(name = "jms/Topic")
private static Topic topic;
@Resource(name = "jms/TopicConnectionFactory")
private static ConnectionFactory topicFactory;
public SSSbean () {}
@Override
public void createMessage(String messageData) throws JMSException {
Connection topicConnection = null;
Session session = null;
MessageProducer producer = null;
topicConnection = topicFactory.createConnection();
session = topicConnection.createSession(true,0);
topicConnection.start();
producer = session.createProducer(topic);
TextMessage tm = session.createTextMessage();
tm.setText(messageData);
producer.send(tm);
}
@Override
@Remove
public void remove() {
System.out.println("SSSBean:remove()");
}
}
主要在下面:
public class Main {
@EJB
private static SSSbeanRemote ss;
public static void main(String[] args) {
// TODO code application logic here
Main client = new Main();
client.bX();
ss.remove();
}
private void bX() {
System.out.println("Main: Client started... ");
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("Enter Suggestion: ");
String suggestion = sc.nextLine();
try{
ss.createMessage(suggestion);
continue;
} catch (JMSException j) {
System.out.println("Error: "+ j.toString());
}
}
}
}
答案 0 :(得分:0)
您正在尝试在不由Container管理的代码中注入EJB。
执行客户端代码时,main()方法只会忽略@EJB注释。知道@EJB意味着什么以及如何注入Bean的唯一一个是Container。尝试在Aplication Client Container
中执行客户端代码答案 1 :(得分:0)
如果要从不受容器管理的应用程序检索EJB bean,可以从InitialContext中检索它。
也许这会让你更接近:https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI