3
ストアドプロシージャを呼び出すことによって、ejbメソッドで非同期トランザクションアクションを実行します。私は、エラーの下に与えるmethot呼び出すとき:persistence.xmlのJTA EntityManagerはストアドプロシージャコールでgetTransaction()を使用できません
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="FileSearchPU" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/FileSearchDS</jta-data-source>
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.transaction.jta.platform"
value="${hibernate.transaction.jta.platform}"/>
</properties>
</persistence-unit>
</persistence>
@Stateless
public class FileSearchDAO {
private static Logger logger = LoggerFactory.getLogger(FileSearchDAO.class);
@PersistenceContext(unitName = "FileSearchPU")
private EntityManager entityManager;
@Asynchronous
public Future<String> saveFile(String fileNo, List<String> runningFiles) {
try {
entityManager.getTransaction().begin();
entityManager.createNativeQuery(
" BEGIN prc_save_file (:fileNo); END;")
.setParameter("fileNo", fileNo).executeUpdate();
entityManager.getTransaction().commit();
runningFiles.remove(fileNo);
return new AsyncResult<>(fileNo);
} catch (Exception ex) {
ex.printStackTrace();
return new AsyncResult<>(ex.getMessage());
}
}
豆
java.lang.IllegalStateException: A JTA EntityManager cannot use getTransaction()
を私は任意のEntityクラスを持っていません。私はちょうどいくつかのテーブルを更新するストアドプロシージャを呼び出したい。
おかげのようなトランザクションを使用し、それを使用するには
UserTransaction
を使用する必要があります。 em.joinTransaction()も必要ですか? –
@ mohammad_1m2永続コンテキストがストアドプロシージャで何が起こっているのか分からない可能性があるので、必要ではないか、あなたのケースでは問題ではないと思います。しかし、エンティティを処理している場合は、そうです。まだ使用しても害にならないと思います。 – pirho