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



-ORIGINAL_POST-

我目前正在开发一个运行在JBoss7上的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 Datenermittelt。模具日期不在*CURLIB、*LIBL或默认日期参考书目。最好是OVRDBF或者在OVRDBF中,我们将参考文献。[..]PCSACC/400

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

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

-编辑(_O)-

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配置

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

您不太可能连接到AS/400;那些机器已有几十年的历史了。然而,您的同事可能仍然会这样称呼它。目前的操作系统被称为IBMi,这对于互联网搜索返回现代结果非常重要。

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

给定的IBMi.副本上只有一个DB2实例

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

如果加载DB2LUW,您几乎可以模拟这个DB。DB2fori和LUW之间有许多相似之处。但它们并不完全相同!在IBMi上,我可以在HLL中编写存储过程、函数和触发器。LUW只允许用SQL编写它们。因此,将一个拷贝从IBMi"移动"到Linux可能是一项艰巨的工作。然后他们之间还有语法上的差异。如果IBM i版本是最新的(2017年1月的7.3),那么你就有更好的成功机会。

我通常必须引用数据源URLjdbc:as400://{SERVERNAME}:{PORTNUMBER}/{LIBRARY}内部的Library。

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

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

相关内容

  • 没有找到相关文章

最新更新