【问题标题】:Java Stored Procedure using MQ使用 MQ 的 Java 存储过程
【发布时间】:2012-07-04 06:56:29
【问题描述】:

我需要在 Oracle 中创建一个 Java 存储过程。我使用 IBM 的示例类从 Java EE 环境之外的简单类创建 MQ 消息。我已经单独测试了这个类并且它正在工作。

我的 Oracle 版本是 11i。

当我尝试添加简单应用程序中使用的 jar 以与我的简单类一起加载到 Oralce 时,我收到有关找不到类的错误,即使相同的 jar 可用于测试用例。我被这个问题困扰了一个多星期,非常希望有人能够帮助我。

我遇到的各种错误是来自客户端上带有 loadjava 实用程序的 -v 标志

在第 326 / 327 行,您会看到:

创建:类 com/ibm/mq/jms/admin/AP 加载:类 com/ibm/mq/jms/admin/AP

然后从第6224行开始到end,表示上述类无法解析:

com/ibm/mq/jms/admin/APRCXI:ORA-29534:引用的对象 xxxx.com/ibm/mq/jms/admin/AP 无法解决 com/ibm/mq/jms/admin/APDX:ORA-29534:引用的对象 xxxx.com/ibm/mq/jms/admin/AP 无法解决退出:错误 解析类 com/ibm/mq/jms/admin/AP

我使用的命令是:

c:\Oracle\product\11.2.0\client_1\bin\loadjava.bat -f -jarsasdbobjects -prependjarnames -stoponerror -u xxxx/yyyy@SID -v -resolve lib\jms.jar lib\com.ibm.mqjms.jar lib\com.ibm.mq.jmqi.jar lib\dhbcore.jar lib\fscontext.jar src\com\test\javasp\mq\JmsProducer.java

我还尝试使用 -genmissing 选项和一些额外的 jars(我找到的列表 here),但对于不同的类仍然会出现类似的错误。

我面临的其他问题是,如果我收到错误并尝试使用 Oracle 的 dropjava 命令,它也不起作用。

我也从this链接看到,这个人成功了,可惜他/她没有说明他们是如何使用loadjava加载jar的。

如果我可以提供任何其他信息,请告诉我。

如果有人对如何获取 Java 存储过程以使用 IBM MQ 与 Oracle 11i 一起使用有任何想法,我将非常感谢您的帮助。

【问题讨论】:

  • IBM WMQ 类已多次重新打包。您使用的是哪个版本的 WMQ 客户端?
  • 如果您安装完整的 WMQ 客户端,那么您将拥有 dspmqver、trace 和 JMSAdmin(用于创建和编辑管理对象)以及应用维护和补丁的能力。请参阅stackoverflow.com/questions/10957612/… 获取下载位置。与其他应用程序捆绑在一起的 WMQ 类不一定是完整的功能或您可以对其进行维护的东西。如果您不想安装完整的客户端,我无法帮助,但也许这里的其他人可以。
  • 我没有做太多 MQ 开发(这是第一个,也是使用示例)所以,如果我的问题听起来有点奇怪,请原谅我。我得到了这个项目的项目交换,其中包括 jars,但我认为(被告知)它们适用于 MQ 7。所以,我认为这将使它成为客户端版本 7.0。有办法让我确认吗?
  • 抱歉,当您回复我之前的评论时,我正在编辑评论。您的第二条评论有几个问题 - 我需要从该客户端获取所有 jar,还是只需要让我当前的程序作为 java 应用程序运行的那些 jar。另外,我下载 WMQ 7 jar 中的哪个次要版本是否重要。如果为真,我如何从我的应用程序中找出我需要使用哪一个来进行 MQ 安装?非常感谢您的帮助
  • IBM 支持的方法是运行安装程序,然后将您的 CLASSPATH 指向安装客户端 jar 的目录。如果您获得 v7.1 或 v7.5,那么您可以选择在主机上的任何位置安装(尽管您仍然需要是 root 或管理员才能执行安装)。我会选择v7.5。它可以连接到任何版本的 WMQ 并包含对已知错误的修复以及提供最佳性能。有关安装和验证指南,请参阅上一条评论中的信息中心链接。正确设置 CLASSPATH 的一种简单方法是运行 setjmsenv 命令,然后运行 ​​echo CLASSPATH

标签: java oracle jms ibm-mq procedure


【解决方案1】:

this博客条目中找到了详细答案。我试过了,它对我有用。

【讨论】:

  • 我确实按照博客中的说明进行操作,但不幸的是,我仍然遇到 java.lang.ExceptionInInitializerError 或 classnotfound 错误异常。除了博客中描述的内容之外,您还做了什么?谢谢!
【解决方案2】:

Oracle 中没有 CLASSPATH 的概念,所以标准的 MQ 客户端安装是没有用的。您只能在数据库架构中加载应用程序引用的 jars。使用 -r 选项加载类时会解析类。您可以使用-r -Resolver(模式)进一步指定您自己的解决方案。 (查看 Oracle 文档以了解确切的格式)。所以实际上数据库模式变成了类路径。

使用 Java 的 Websphere MQ 类会带来许多问题,您必须确保 Oracle JDK 版本处于适当的支持级别才能连接到所选的 MQ 服务器版本。检查 websphere MQ Vx.x 的系统要求。您应该找到 IBM 的 Web 参考资料。检查对 MQ classed for java 的支持。

目前我在尝试使用 Oracle 10 和 JDK 1.4.2 连接到 Mq 时遇到这样的问题。我不得不使用 JDK 1.4.x 重新编译我的 Java 代码。这不起作用,我认为这是因为我连接到 MQ 7.0.1.7,它至少需要 JRE 1.7。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 2012-07-12
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2020-03-30
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多