简体   繁体   English

JBoss EJB transactions don't generate Oracle SQL Statements from JPA java persistence objetcs (eclipselink)

[英]JBoss EJB transactions don't generate Oracle SQL Statements from JPA java persistence objetcs (eclipselink)

I'm trying to migrate a J2EE heavy application (jnlp) from Oracle OC4j (OAS) using Toplink, to RH JBoss using Eclipselink (without changing functional code of Beans).我正在尝试使用 Toplink 将 J2EE 重型应用程序 (jnlp) 从 Oracle OC4j (OAS) 迁移到使用 Eclipselink 的 RH JBoss (不更改 Beans 的功能代码)。

If read-only java instructions are correctly translated in a SELECT SQL statement:如果只读 java 指令在 SELECT SQL 语句中正确翻译:

Session session = getSession();
ReadAllQuery query = new ReadAllQuery(Employee.class);
ExpressionBuilder builder = new ExpressionBuilder();
Expression criteres = builder.get("nom").equal("Smith");
query.setSelectionCriteria(criteres);
Vector employees = (Vector) session.executeQuery(query);
Employee employeeSmith = employees.elementAt(0);

==> ==>

SELECT * FROM employee WHERE nom='Smith';

But, write java instructions seem not to be translated in corresponding SQL statements:但是,写 java 指令似乎没有在相应的 SQL 语句中翻译:

session.acquireUnitOfWork().deleteObject(employeeSmith);

==> ==>

DELETE employee WHERE nom='Smith';

(the same for session.acquireUnitOfWork().registerObject(employeeSmith) doesn't generate neither INSERT nor UPDATE SQL statements) (对于 session.acquireUnitOfWork().registerObject(employeeSmith) 相同,既不会生成 INSERT 也不会生成 UPDATE SQL 语句)

Is there any setup in JBoss or parameter for Eclipselink to activate this "translation" when EJB commit its transaction? JBoss 或 Eclipselink 参数中是否有任何设置以在 EJB 提交其事务时激活此“翻译”?

I want to specify that I'm using "native" Oracle JDBC connection protocol with sessions.xml and a XML mapping file (correspondences between Oracle database tables/columns and Java classes/attributes objects), AND NOT persistence units (with persistence.xml definition file and entity managers). I want to specify that I'm using "native" Oracle JDBC connection protocol with sessions.xml and a XML mapping file (correspondences between Oracle database tables/columns and Java classes/attributes objects), AND NOT persistence units (with persistence.xml定义文件和实体管理器)。

Thanks a lot in advance for your help and advices.非常感谢您的帮助和建议。

Regards问候

Current configuration: Oracle OC4j 10.1.3.5.0 using Toplink 11.1.1.2.0 JPA implementation当前配置:Oracle OC4j 10.1.3.5.0 使用Toplink 11.1.1.2.0 JPA实现

Target configuration: RedHat JBoss EAP 7.4 using Eclipselink 2.7.0 JPA implementation目标配置:RedHat JBoss EAP 7.4 使用 Eclipselink 2.7.0 JPA 实现

just a quick post to share with the community a way to solve my issue: in the toplink -> eclipselink migration process, some of connection setup are moved from the Java<->Oracle XML mapping file (XXX.xml) and the sessions.xml file:只是一个与社区分享解决我的问题的方法的快速帖子:在 toplink -> eclipselink 迁移过程中,一些连接设置从 Java<->Oracle XML 映射文件 (XXX.xml) 和会话中移动。 xml文件:

<sessions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4.2">
  <session xsi:type="server-session">
    <name>XXX_session</name>
    <logging xsi:type="eclipselink-log">...</logging>
    <primary-project xsi:type="xml">XXX.xml</primary-project>
    <login xsi:type="database-login">...</login>
  </session>
</sessions>

I had to add/move the following tags:我必须添加/移动以下标签:

<server-platform xsi:type="jboss-platform">
   <enable-jta>true</enable-jta>
</server-platform>

and

<login xsi:type="database-login">
   <platform-class>org.eclipse.persistence.platform.database.OraclePlatform</platform-class>
   <external-connection-pooling>true</external-connection-pooling>
   <external-transaction-controller>true</external-transaction-controller>
   <sequencing>
      <default-sequence xsi:type="native-sequence">
         <preallocation-size>1</preallocation-size>
      </default-sequence>
   </sequencing>
   ...
</login>

By this way, the write Oracle statements are correctly generated by the JPA provider during the commit phase of the container.通过这种方式,JPA 提供程序在容器的提交阶段正确生成了写入 Oracle 语句。

For information, the XSD dictionnary for sessions.xml is: /org/eclipse/persistence/eclipselink_sessions_2.1.xsd in eclipselink-2.7.11 library有关信息,会话的 XSD 字典。xml 是:/org/eclipse/persistence/eclipselink_sessions_2.1.Z24788D7B62B899D08B0253802B8.7.1918 链接库中的链接

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM