在 JBoss 7.1 上使用 JPA / Hibernate / JAVA 访问 AS/400 数据库

Access AS/400 data base using JPA / Hibernate / JAVA on JBoss 7.1

-ORIGINAL_POST-

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

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

英语:

For this file no library has been found in the SQL/ODBC files. The file was not found in the *CURLIB, *LIBL or the default library of the data base source. There is no OVRDBF or a OVRDBF has not been set. [...] PCSACC/400

德文原文:

Für diese Datei wurde keine Bibliothek in den SQL/ODBC-Daten ermittelt. 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 版本:

数据源的JBoss-Web-Configuration

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

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

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

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

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

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

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

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

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