JBOSS 5.1 메시징 응용 프로그램을 JBoss 5.1 메시지로 가져올 수있는 방법을 확인하기 위해 JBoss 5.1에서 hello world MDB를 가져 오려고합니다. MDB는 나에게 유선 문제를 안겨줍니다. MDB는 JBOSS 5.1 AS를 시작할 때 아무 문제없이 잘 배치되었습니다. 그러나 나는이 메시지가 잘 작동 독립형 자바 프로그램에서 연결을 시도 할 때, 또한 JBOSS (51)는 다음과 같은 예외를 던지고 실행하는 클라이언트에서JBOSS 5.1 업그레이드 - 메시징 문제
09:03:24,790 ERROR [STDERR] java.lang.NullPointerException
09:03:24,790 ERROR [STDERR] at org.jboss.jms.client.container.FailoverValveInterceptor.invoke(FailoverValveInterceptor.java:87)
09:03:24,790 ERROR [STDERR] at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86)
09:03:24,791 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
09:03:24,791 ERROR [STDERR] at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:170)
09:03:24,791 ERROR [STDERR] at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86)
09:03:24,791 ERROR [STDERR] at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
09:03:24,791 ERROR [STDERR] at org.jboss.jms.client.delegate.ClientConnectionDelegate.createSessionDelegate(ClientConnectionDelegate.java)
09:03:24,791 ERROR [STDERR] at org.jboss.jms.client.JBossConnection.createSessionInternal(JBossConnection.java:269)
09:03:24,791 ERROR [STDERR] at org.jboss.jms.client.JBossConnection.createQueueSession(JBossConnection.java:165)
을 메시지를 보내려고 할 때. 나는 지금해야 할 일에 대한 단서가 없다. 다음은 구성,
는의 ejb-jar.xml의는 :
는<message-driven>
<ejb-name>HelloWorldMDB</ejb-name>
<ejb-class>com.yodlee.messaging.mdbs.HelloWorldMDB</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
<subscription-durability>Durable</subscription-durability></message-driven-destination>
<resource-ref>
<res-ref-name>HelloWorldMDB</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<res-auth>Container</res-auth></resource-ref>
</message-driven>
의 jboss.xml은 : 내가 servelt에서 사용하고 실행 형 프로그램을 서 클라이언트 코드는 정확히 같은
<message-driven>
<ejb-name>HelloWorldMDB</ejb-name>
<destination-jndi-name>queue/HelloWorldQueue</destination-jndi-name>
<mdb-user>mqm</mdb-user>
<mdb-passwd>mqm</mdb-passwd>
<resource-ref>
<res-ref-name>HelloWorldMDB</res-ref-name>
<jndi-name>MDBDLQCF</jndi-name>
</resource-ref>
</message-driven>
입니다
아래처럼,Properties env = new Properties();
String queueName = "queue/HelloWorldQueue";
String CFname = "ConnectionFactory";
env.put(Context.PROVIDER_URL, "jnp://....:1099");
env.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
env
.put(Context.URL_PKG_PREFIXES,
"org.jboss.naming:org.jnp.interfaces");
try {
InitialContext ctx = new InitialContext(env);
System.out.println("Looking up for queue");
System.out.println(ctx.lookup(queueName).getClass().getName());
Queue destination = (Queue) ctx.lookup(queueName);
System.out.println(destination.getQueueName());
System.out.println("Looking up for connection factory");
System.out.println(ctx.lookup(CFname).getClass().getName());
QueueConnectionFactory qcf = (QueueConnectionFactory)ctx.lookup(CFname);
System.out.println("getting connection");
QueueConnection conn = qcf.createQueueConnection("abc", "abc");
System.out.println("creating session");
QueueSession queueSession = conn.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
QueueSender sender = queueSession.createSender(destination);
TextMessage message = queueSession.createTextMessage();
message.setText("Test Message");
System.out.println("Sending Message...");
sender.send(message);
System.out.println("Finished Sending Message.");
sender.close();
conn.close();
queueSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
이 문제를 해결할 수 있습니까? 디버깅에 필요한 다른 정보가 필요합니까?
예. 나는 서블릿에서 전화를 걸고 그것은 나를 위해 작동하지 않습니다. 자바 프로그램에서 위의 코드를 만들면 완벽하게 작동합니다. 다른 한편으로 서블릿에서 호출 할 때 서버에 다음과 같은 경고 메시지가 표시됩니다. WARN [SimpleConnectionManager] 원격 클라이언트에 연결하여 문제가 감지되었습니다. – user331311
Btw, JBOSS 5.1을 사용 중이며 내 서블릿 프로그램에 WEB-INF/lib 폴더에 아무 것도 없습니다. – user331311
@ mmuthu - 단지 grins를 위해 당신은 독립 실행 형 프로그램에서 가지고있는 WEB-INF/lib에 같은 항아리를 추가하십시오. 먼저 연결 문제를 해결하십시오. –