java.io.IOException: Transport scheme NOT recognized: [tcp]
Hi everyone, I developed a Java class that allow me to connect, create, send and receive information to an ActiveMQ queues.
However when I loaded this java class to Oracle 11gR2 (11.2), the java class did not show any error message (its status is active and without errors. The output I got in SqlDeveloper is
*java.io.IOException: Transport scheme NOT recognized: [tcp].* When I called this Java Class from Jdeveloper 11g It worked but PL/SQL did not.
This is the Java Class I have been using
import javax.jms.JMSException;
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.activemq.ActiveMQConnectionFactory;
public class ActiveMQRequest {
// URL of the JMS server. DEFAULT_BROKER_URL will just mean
// that JMS server is on localhost
// Name of the queue we will be sending messages to
// private static String destMameReq = "QueueIN"; // request
// private static String destNameResp = "QueueOUT"; // response
public static String Request(String urlMQ,
String destNameReq,
String destNameResp,
String OperationType,
String XMLmessage) throws JMSException {
int JMSDeliveryMode=2 ; //for PERSISTENT
QueueConnectionFactory connectionFactory =null;
Context jndiContext =null;
Queue destRequ =null;
Queue destResp =null;
QueueSession session =null;
QueueConnection connection =null;
String messageID = null;
QueueReceiver queueReceiver =null;
QueueSender queueSender =null;
String replyString =null;
boolean transacted = false;
TextMessage outMessage = null;
try {
jndiContext = new InitialContext();
} catch (NamingException e) {
//System.out.println("Could not create JNDI API context: " + e.toString());
//System.exit(1);
return "Error: Initial Context Failed";
}
try {
connectionFactory = new ActiveMQConnectionFactory(urlMQ);
//connectionFactory = (QueueConnectionFactory) jndiContext.lookup("connectionFactory");
//destRequ = (Queue) jndiContext.lookup(destNameReq); // Request queue
// destResp = (Queue) jndiContext.lookup(destNameResp); // Response queue
} catch (Exception e) {
//System.out.println("JNDI API lookup failed: " + e.toString());
//System.exit(1);
return "Error: MqConnection Factory failed: " + e.toString();
}
// begin
try {
connection = connectionFactory.createQueueConnection();
connection.start();
} catch (JMSException jmse) {
//System.out.println("Error:JMS Exception occurred: " + jmse.toString());
return "Error:JMS Exception occurred Create Queue Connection: " + jmse.toString();
} catch (Exception e) {
//System.out.println("JNDI API lookup failed: " + e.toString());
//e.printStackTrace();
return "Error:JNDI API lookup failed Create Queue Connectio: " + e.toString();
}
try {
session = connection.createQueueSession( transacted,Session.AUTO_ACKNOWLEDGE);
// check this instead of using JNDI
destRequ = session.createQueue(destNameReq);
destResp = session.createQueue(destNameResp);
} catch (JMSException jmse) {
//System.out.println("Error:JMS Exception occurred: " + jmse.toString());
return "Error:JMS Exception occurred createQueueSession: " + jmse.toString();
} catch (Exception e) {
//System.out.println("JNDI API lookup failed: " + e.toString());
//e.printStackTrace();
return "Error:JNDI API lookup failed createQueueSession: " + e.toString();
}
///
try {
queueSender = session.createSender(destRequ);
outMessage = session.createTextMessage(XMLmessage);
// Sets other properties of the message
outMessage.setJMSPriority(7);
outMessage.setJMSReplyTo(destResp);
outMessage.setJMSDeliveryMode(JMSDeliveryMode);
//outMessage.setJMSType("Interval"); Interval
outMessage.setJMSType(OperationType); // ODR , Interval, Ping
System.out.println("Sending message.: " + outMessage.getText());
} catch (JMSException jmse) {
//System.out.println("Error:JMS Exception occurred: " + jmse.toString());
return "Error:JMS Exception occurred createSender: " + jmse.toString();
} catch (Exception e) {
//System.out.println("JNDI API lookup failed: " + e.toString());
//e.printStackTrace();
return "Error:JNDI API lookup failed: createSender " + e.toString();
}
// Here we are sending the message!
try {
queueSender.send(outMessage);
System.out.println("Message Sent....: " + outMessage.getText() + "'");
// Receiving
messageID = outMessage.getJMSMessageID();
String selector = "JMSCorrelationID = '"+messageID+"'";
System.out.println("JMSCorrelationID = '"+messageID+"'");
queueReceiver = session.createReceiver(destResp, selector);
System.out.println("Receiving Message.");
Message inMessage = queueReceiver.receive(2000);
if ( inMessage instanceof TextMessage ) {
replyString = ((TextMessage) inMessage).getText();
System.out.println("Message Received: " + replyString + "'");
}
else
replyString = "Error: TextMessage is empty";
} catch (JMSException jmse) {
//System.out.println("Error:JMS Exception occurred: " + jmse.toString());
return "Error:JMS Exception occurred Receiving: " + jmse.toString();
} catch (Exception e) {
//System.out.println("JNDI API lookup failed: " + e.toString());
//e.printStackTrace();
return "Error:JNDI API lookup failed Receiving: " + e.toString();
} finally {
queueReceiver.close();
queueSender.close();
session.close();
connection.close();
}
return replyString;
}
}
This is th pl/sql wrapper
create or replace
function ActiveMQRequest( url in varchar2,
destNameReq in varchar2,
destNameResp in varchar2,
OperationType in varchar2,
XMLmessage in varchar2) return varchar2
as language java
name 'ActiveMQRequest.Request( java.lang.String,java.lang.String, java.lang.String , java.lang.String , java.lang.String ) return java.lang.String';
and this is the JDeveloper Output
Sending message.:
<Message>
<Header>
<SourceID >sourceid</SourceID>
<TransactionID>11111111111</TransactionID><MeterID>AAAAAAA</MeterID><REPID>41679178</REPID><TransactionDate>2010-10-08T02:00:00</TransactionDate><UserID>Sensus</UserID><CustomerID>Customer</CustomerID></Header><Body><StarDate>2010-10-01T14:00:00</StartDate><EndDate>2010-10-06T14:00:00</EndDate><IntervalFlag>Y</IntervalFlag><MeterFlag>Y</MeterFlag></Body>
JMSCorrelationID = 'ID:W05834007-3793-1286901259437-0:0:1:1:1'
Receiving Message.
Message Received: <Message>
<Header>
<TransactionID>11111111111</TransactionID>
<SourceID>sourceid</SourceID>
</Header>
<Body>
<TransactionStatus>Acknowledge</TransactionStatus>
<TransactionMessage>Interval Flag null is not Y or N</TransactionMessage>
</Body>
</Message>'
Result is :<Message>
<Header>
<TransactionID>4444444444444444</TransactionID>
<SourceID>RNI</SourceID>
</Header>
<Body>
<TransactionStatus>Acknowledge</TransactionStatus>
<TransactionMessage>Interval Flag null is not Y or N</TransactionMessage>
</Body>
</Message>
When I run in Oracle Sqldeveloper the output was
Error:JMS Exception occurred Create Queue Connection: javax.jms.JMSException: Could not create Transport. Reason: java.io.IOException: Transport scheme NOT recognized: [tcp]
Do you know what do I do in the Oracle 11gR2 configuration for making this work. I would appreciate your help.
Thanks