jms在java中发送数据_Oracle:发送JMS消息的Java存储过程

我试图从oracle数据库存储过程发送点对点JMS消息到java应用程序.这两个“点”位于不同的机器上,我已经确认可以通过ping相互通信.

我创建了一个java应用程序,能够成功地将消息从应用程序服务器中的队列中取出.该应用程序在JBoss v4.2.3服务器中运行.我已经能够从远程Java应用程序成功发送JMS消息,所以我确信在服务器中运行的代码是可以的.

我从工作的远程java应用程序中获取代码并将其成功加载到oracle存储过程中.我还设法(我相信!)使用loadjava实用程序将所需的jar文件加载到oracle中.我加载的三个jar文件是:

* jms-1.1

* jbossmq-3.2.3

* jboss-client-4.0.2

这三个jar在工作的远程java应用程序中使用,看起来就是所有需要的.包含在存储过程中的代码如下:

package com.base.jms.client;

import java.util.Hashtable;

import javax.jms.JMSException;

import javax.jms.Queue;

import javax.jms.QueueConnection;

import javax.jms.QueueConnectionFactory;

import javax.jms.QueueSender;

import javax.jms.QueueSession;

import javax.jms.TextMessage;

import javax.naming.Context;

import javax.naming.InitialContext;

public class StandAloneClient {

public static String send() throws Exception {

String result = "Starting -> ";

try {

Hashtable env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");

env.put(Context.PROVIDER_URL,"192.168.111.242:1099");

env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");

result = result + "Environment -> ";

// set up stuff

Context ic = new InitialContext(env);

result = result + "Context -> ";

QueueConnectionFactory connectionFactory = (QueueConnectionFactory) ic.lookup("ConnectionFactory");

result = result + "Factory -> ";

Queue queue = (Queue) ic.lookup("queue/A");

result = result + "Queue -> ";

QueueConnection connection = connectionFactory.createQueueConnection();

result = result + "Connection -> ";

QueueSession session = connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);

result = result + "Session -> ";

QueueSender sender = session.createSender(queue);

connection.start();

result = result + "Sender -> ";

TextMessage myMessage = session.createTextMessage();

myMessage.setText(result);

sender.send(myMessage);

result = result + "Sending Message -> ";

sender.close();

session.close();

connection.close();

result = result + "Close";

} catch (JMSException e) {

result = result + "JMS Exception";

/*

if(e.getMessage() != null) {

result = result + ":" + e.getMessage();

}*/

} catch (Exception e) {

result = result + "Exception";

/*

if(e.getMessage() != null) {

result = result + ":" + e.getMessage();

}*/

}

return result;

}

}

我已经添加了结果字符串,所以我可以尝试确定它在代码中的位置.要创建并测试此过程,我在sqlplus中执行以下命令:

create or replace function send_jms return VARCHAR2 as language java name 'com.base.jms.client.StandAloneClient.send() return java.lang.String';

variable myString varchar2(20);

call send_jms() into :myString;

Call completed.

print myString;

似乎所有东西都被正确加载和编译,但是没有发送消息.返回的结果字符串表示它在尝试从InitialContext中检索QueueConnectionFactory类时会崩溃.返回的结果字符串是:

Starting -> Environment -> Context -> Exception

我不知道为什么这不起作用,并且无法从抛出的异常中收集到更多信息.任何人都可以确认我这样做是正确的,如果我这样做,看看我做错了什么?

为长篇文章道歉,但提前感谢您的关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值