![](/img/trans.png)
[英]Accessing multiple database from a Java web application using JPA/EclipseLink/EJB
[英]JBoss EJB transactions don't generate Oracle SQL Statements from JPA java persistence objetcs (eclipselink)
我正在嘗試使用 Toplink 將 J2EE 重型應用程序 (jnlp) 從 Oracle OC4j (OAS) 遷移到使用 Eclipselink 的 RH JBoss (不更改 Beans 的功能代碼)。
如果只讀 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';
但是,寫 java 指令似乎沒有在相應的 SQL 語句中翻譯:
session.acquireUnitOfWork().deleteObject(employeeSmith);
==>
DELETE employee WHERE nom='Smith';
(對於 session.acquireUnitOfWork().registerObject(employeeSmith) 相同,既不會生成 INSERT 也不會生成 UPDATE SQL 語句)
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定義文件和實體管理器)。
非常感謝您的幫助和建議。
問候
當前配置:Oracle OC4j 10.1.3.5.0 使用Toplink 11.1.1.2.0 JPA實現
目標配置:RedHat JBoss EAP 7.4 使用 Eclipselink 2.7.0 JPA 實現
只是一個與社區分享解決我的問題的方法的快速帖子:在 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>
我必須添加/移動以下標簽:
<server-platform xsi:type="jboss-platform">
<enable-jta>true</enable-jta>
</server-platform>
和
<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>
通過這種方式,JPA 提供程序在容器的提交階段正確生成了寫入 Oracle 語句。
有關信息,會話的 XSD 字典。xml 是:/org/eclipse/persistence/eclipselink_sessions_2.1.Z24788D7B62B899D08B0253802B8.7.1918 鏈接庫中的鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.