SocketException with an MDPOJO
malmei Jul 10, 2006 11:01 AMHello
I get a
2006-07-10 16:34:24,140 DEBUG [org.jboss.mq.il.uil2.ServerSocketManagerHandler] Exiting on IOE java.net.SocketException: socket closed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:235) [...] 2006-07-10 16:34:24,140 DEBUG [org.jboss.mq.il.uil2.SocketManager] End ReadTask.run 2006-07-10 16:34:24,140 DEBUG [org.jboss.mq.il.uil2.SocketManager] Failed to handle: org.jboss.mq.il.uil2.msgs.CloseMsg19351667[msgType: m_connectionClosing, msgID: 7, error: null] java.io.IOException: Client is not connected at org.jboss.mq.il.uil2.SocketManager.internalSendMessage(SocketManager.java:265) at org.jboss.mq.il.uil2.SocketManager.sendReply(SocketManager.java:239) [...] 2006-07-10 16:34:24,140 DEBUG [org.jboss.mq.il.uil2.SocketManager] Failed to send error reply java.io.IOException: Client is not connected at org.jboss.mq.il.uil2.SocketManager.internalSendMessage(SocketManager.java:265)
This happens with this code
package de.s2i.service.tools;
import org.jboss.annotation.ejb.DeliveryMode;
import org.jboss.annotation.ejb.MessageProperties;
import org.jboss.annotation.ejb.Producer;
@Producer
public interface Echo {
public void doEcho(String payload);
}
and
package de.s2i.service.tools;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.jboss.annotation.ejb.Consumer;
import org.jboss.annotation.ejb.CurrentMessage;
@Consumer(activationConfig= {
@ActivationConfigProperty(propertyName="destinationType",
propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination",
propertyValue="queue/echo"),
@ActivationConfigProperty(propertyName="acknowledgeMode", propertyValue="AUTO_ACKNOWLEDGE")
})
public class EchoBean implements Echo {
@CurrentMessage
private javax.jms.Message currentMessage;
public void doEcho(String payload) {
System.out.println("EchoBean: "+payload);
if (currentMessage != null) {
try {
if (currentMessage.getJMSReplyTo() != null) {
System.out.println("CurMsg: "+currentMessage.getJMSReplyTo().toString());
} else {
System.out.println("CurMsg: no ReplyTo");
}
}catch (Exception e) {
System.out.println("doEcho::Exception: "+e.toString());
}
}
}
}
and
package de.s2i.service.tools;
import java.util.Properties;
import javax.naming.InitialContext;
import org.jboss.ejb3.mdb.ProducerManager;
import org.jboss.ejb3.mdb.ProducerObject;
import javax.jms.JMSException;
public class EchoClient {
public static void main(String[] args) {
try {
String urlName = "jnp://localhost:1099";
Properties p = new Properties();
p.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
p.put("java.naming.provider.url", urlName);
p.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx=new InitialContext(p);
Echo echoClient=(Echo)ctx.lookup(Echo.class.getName());
ProducerObject po = (ProducerObject)echoClient;
ProducerManager pm=po.getProducerManager();
System.out.println("Going to connect ...");
pm.setUsername("guest");
pm.setPassword("guest");
pm.connect();
System.out.println("Connected - calling echo");
try {
echoClient.doEcho("stuff");
} finally {
System.out.println("sleep for 10 sec ...");
Thread.sleep(10000);
pm.close();
}
} catch (Exception e) {
System.out.println("Exception "+e.toString());
}
System.out.println("Leaving ...");
}
}
in the logfile i see
2006-07-10 16:34:14,218 INFO [STDOUT] EchoBean: stuff 2006-07-10 16:34:14,218 INFO [STDOUT] CurMsg: no ReplyTo
So one way seems to work ... (is it ok, that the JMSReplyTo is empty? Is this already the problem?)
As you can see I put a Thread.sleep(10000) in the client before actually closing the ProducerManager, this is when the Server throws the Exception (not before).
It looks a bit like the server wants to send the client some data, but the client is not paying attention to it's socket ...
What do I make wrong?
greetings
Malte
PS: jboss 4.0.4GA, EJB 3.0 RC8 FD