【问题标题】:Access AS/400 data base using JPA / Hibernate / JAVA on JBoss 7.1在 JBoss 7.1 上使用 JPA/Hibernate/JAVA 访问 AS/400 数据库
【发布时间】:2017-06-05 14:24:41
【问题描述】:

-ORIGINAL_POST-

我目前正在开发一个在 JBoss 7 上运行的 JAVA (1.7) 服务器应用程序。使用 Spring 和 Hibernate 这并不奇怪,但我必须将旧的 AS/400 DB 连接到系统。到目前为止,我已经调整了应用服务器的驱动程序,并且已经建立了数据库连接。应用程序服务器已记录已找到数据库。

现在我尝试使用 JPA 和 Hibernate 访问数据。但是我的库似乎有问题。他就是服务器正在记录的内容。

英语:

对于这个文件,在 SQL/ODBC 文件中没有找到任何库。这 在 *CURLIB、*LIBL 或默认库中找不到文件 数据库来源。没有 OVRDBF 或未设置 OVRDBF。 [...] PCSACC/400

德语原文:

Für diese Datei wurde keine Bibliothek in den SQL/ODBC-Datan 厄米特尔特。 Die Datei wurde nicht in der *CURLIB, *LIBL oder in der Default-Bibliothek der Datenquelle gefunden。 Es besteht kein OVRDBF oder in einem OVRDBF wurde keine Bibliothek angegeben。 [..] PCSACC/400

我的假设是否正确,我必须在我的 EAR 中添加一个额外的库才能运行查询?另一种情况是,必须以不同的方式访问 AS/400 - 也许应用程序已连接到数据库,但没有连接到我需要访问的实例。

还有一个问题——我可以模拟这种类型的数据库吗?

-EDIT_ONE-

JBoss 'urn:jboss:domain:datasources:1.0' 子系统的数据源配置:

<xa-datasource jta="true" jndi-name="java:/asdb" pool-name="asdb" enabled="true" use-java-context="true" use-ccm="true">
  <xa-datasource-property name="ServerName">192.168.1.666</xa-datasource-property>
  <xa-datasource-property name="databaseName">A1B2C3D4</xa-datasource-property>
  <xa-datasource-property name="Libraries">DMS7_0</xa-datasource-property>
  <xa-datasource-property name="User">myuser</xa-datasource-property>
  <xa-datasource-property name="Password">myuser</xa-datasource-property>
  <xa-datasource-property name="naming">system</xa-datasource-property>
  <xa-datasource-property name="translateBinary">true</xa-datasource-property>
  <xa-datasource-property name="errors">full</xa-datasource-property>
  <driver>com.ibm.as400</driver>
</xa-datasource>

以及可能的驱动因素:

<drivers>
  <driver name="net.sourceforge.jtds" module="net.sourceforge.jtds">
    <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
    <xa-datasource-class>net.sourceforge.jtds.jdbcx.JtdsDataSource</xa-datasource-class>
  </driver>
  <driver name="com.ibm.db2" module="com.ibm.db2">
    <driver-class>com.ibm.db2.jcc.DB2Driver</driver-class>
    <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
  </driver>
  <driver name="com.ibm.as400" module="com.ibm.as400">
    <driver-class>com.ibm.as400.access.AS400JDBCDriver</driver-class>
    <xa-datasource-class>com.ibm.as400.access.AS400JDBCXADataSource</xa-datasource-class>
  </driver>
</drivers>

Hibernate 版本:

  • 休眠核心 3.6.9
  • 休眠 JPA API 2.0

数据源的 JBoss-Web-Configuration

<resource-ref>
  <res-ref-name>jdbc/ASdb</res-ref-name>
  <jndi-name>java:/asdb</jndi-name>
</resource-ref>

【问题讨论】:

  • 您能否发布显示您的 AS/400 (IBM i) 连接以及其中一两个文件的 Hibernate 配置文件片段?具体来说,我正在寻找 JDBC URL——可以随意屏蔽您的 IP 地址/用户/密码以确保隐私——以及一个或两个 DB2/400 表的 规范。
  • 我目前正在收集所有必要的信息。
  • 所有表都在 DMS7_0 库中吗?在您的 中,在 标记中,您是否有一个 table="xxxxxx"?表名是表名还是用斜杠或点指定库/模式(如 DMS7_0.MYTABLE 或 DMS7_0/MYTABLE 还是只是 MYTABLE)?

标签: hibernate jakarta-ee jboss ibm-midrange


【解决方案1】:

您不太可能连接到 AS/400;这些机器已有数十年历史。但是,您的同事可能仍会这样称呼它。当前的操作系统称为 IBM i,这对于互联网搜索返回现代结果很重要。

DB2 for i 有两种命名风格:SYSTEM 和 SQL。看起来这个连接正在使用 SYSTEM 命名。也许有一种方法可以将其更改为 SQL 命名,以便连接使用所需的库/模式。

在给定的 IBM i 副本上只有一个 DB2 实例。

我所做的是通过设置用户配置文件使用的作业描述来设置库列表(系统命名)。因此,与用户 QA 连接使用 QA 库运行,与用户 PRODUCTION 连接的完全相同的客户端使用生产库运行。这由 IBM i 系统管理员处理。

如果加载 DB2 LUW,您几乎可以模拟这个 DB。 DB2 for i 和 LUW 之间有许多相似之处。但它们并不相同!在 IBM i 上,我可以在 HLL 中编写存储过程、函数和触发器。 LUW 只允许用 SQL 编写它们。因此,将 IBM i 的副本“移动”到 Linux 可能需要大量工作。然后它们之间存在语法差异。如果 IBM i 版本是最新版本(2017 年 1 月为 7.3),那么您成功的机会就更大。

【讨论】:

  • 管理员只告诉我们无法建立连接,并不是说他删除了旧数据库并使用新名称创建了另一个数据库。但是这篇文章给出了很好的见解,所以我想通过接受它作为答案来赞扬它。谢谢
【解决方案2】:

我通常必须引用数据源 URL jdbc:as400://{SERVERNAME}:{PORTNUMBER}/{LIBRARY} 内的库。

但是,您提到了 Hibernate,您可能在其中使用了实体。如果您使用实体,我会在完全不同的系统(Tomcat、Jersey)上遇到类似的错误,除非我确保在实体本身内部指定表和库(架构):

@Entity
@Table(name = "TABLENAME", schema = "LIBRARYNAME")
@XmlRootElement
public class TextMessageList {
    private String id;
    private String name;
    ...

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    相关资源
    最近更新 更多