ConnectionFactory not bound
pedrosacosta Jan 3, 2006 11:49 AMI've read all related posts, but i didn't get the solution for my problem.
I've this file:
ServerQueue.java
package com.sample.queue;
/**
* Receives client messages and starts workflows
*/
import org.apache.log4j.Logger;
import com.sample.xmlbinding.XMLBinding;
import java.io.InputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.PrintStream;
import java.io.Serializable;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class ServerQueue implements MessageListener, Serializable {
private static final long serialVersionUID = 4L;
private static final Logger logger = Logger.getLogger(ServerQueue.class);
private InitialContext ctx;
private QueueConnectionFactory qcf;
private Queue queue;
private QueueConnection qc;
private QueueSession qs;
private QueueReceiver qr;
public void init(){
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
properties.put(Context.PROVIDER_URL, "localhost");
try {
ctx = new InitialContext(properties);
System.out.println("Passou");
System.out.println("-------------------");
logger.info("Looking up connection factory");
qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory");
logger.info("Looking up queue");
queue = (Queue)ctx.lookup("queue/testQueue");
logger.info("Creating queue connection");
qc = qcf.createQueueConnection();
qc.start ();
logger.info("Creating queue session: not transacted, auto ack");
qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
logger.info("Creating queue, subscriber");
qr = qs.createReceiver(queue);
logger.info("Ready to subscribe for messages :");
qr.setMessageListener (this);
} catch (NamingException ex) {
logger.error("Server.init: ", ex);
ex.printStackTrace();
} catch (JMSException ew) {
logger.error("Server.init: ", ew);
ew.printStackTrace();
}
}
/**
* MessageListener interface method
*/
public void onMessage(Message message)
{
TextMessage msg = null;
String textMsg = null;
try {
msg = (TextMessage) message;
textMsg = msg.getText();
logger.info(textMsg);
System.out.print(textMsg);
} catch (JMSException e) {
// TODO Auto-generated catch block
logger.error("Server.onMessage: ", e);
}
InputStream inputstream = getInputStream(textMsg);
XMLBinding xmlbinding = new XMLBinding();
String typeoccurrence = xmlbinding.unmarshall(inputstream)
.getTypeoccurrence();
int id = getOccurrenceID(inputstream);
System.out.println("---------------");
System.out.print(typeoccurrence);
System.out.print(id);
}
private InputStream getInputStream(String msg) {
PipedOutputStream ps = null;
PipedInputStream is = null;
try {
ps = new PipedOutputStream();
is = new PipedInputStream(ps);
PrintStream os = new PrintStream(ps);
os.write(msg.getBytes());
os.close();
} catch (Exception e) {
logger.error("Server.getInputStream: " + e);
}
return is;
}
private int getOccurrenceID(InputStream in){
int id = 0;
System.out.println(in.toString());
return id;
}
/**
* Checks if a searchField field exists in the Message message
* @param message Received message
* @param searchField Field to search in the Message
* @return true if founds the action, otherwise false
*/
public boolean parseMessage(String message, String searchField)
{
Pattern p = Pattern.compile(searchField);
Matcher m = p.matcher(message);
if(m.find()) return true;
return false;
}
}
When i try run this class, it gives me the error:
javax.naming.NamingException: Could not dereference object [Root exception is javax.naming.NameNotFoundException: ConnectionFactory not bound] at org.jnp.interfaces.NamingContext.resolveLink(NamingContext.java:1052) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:685) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572) at javax.naming.InitialContext.lookup(Unknown Source) at com.sample.queue.ServerQueue.init(ServerQueue.java:70) at com.sample.jbpm.Server.main(Server.java:14) Caused by: javax.naming.NameNotFoundException: ConnectionFactory not bound at org.jnp.server.NamingServer.getBinding(NamingServer.java:514) at org.jnp.server.NamingServer.getBinding(NamingServer.java:522) at org.jnp.server.NamingServer.getObject(NamingServer.java:528) at org.jnp.server.NamingServer.lookup(NamingServer.java:281) at sun.reflect.GeneratedMethodAccessor107.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294) at sun.rmi.transport.Transport$1.run(Transport.java:153) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:149) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701) at java.lang.Thread.run(Thread.java:595) at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source) at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at org.jnp.server.NamingServer_Stub.lookup(Unknown Source) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572) at javax.naming.InitialContext.lookup(Unknown Source) at org.jnp.interfaces.NamingContext.resolveLink(NamingContext.java:1046) ... 5 more
I didn't modified the uil2-service.xml. The jmx-console detects the connection factory and the testQueue.
I don't understand why jboss AS-4.0.3SP1 doesn't read the xml file and bound ConnectionFactory. Anyone can explain?
Should i setup QueueConnectionFactory and queue/testQueue somewhere else?
Thanks,
Pedro