1

シンプルなRest Service + EJBを使用してエンティティをDB2データベースに挿入するのにWAS8.5で苦労しています。トランザクションは必要ないため、選択は正常に機能します。エンティティには正しく注釈が付けられています。(成功した選択は、少なくともそれを証明します)

私は常に次の例外を受け取ります。

javax.persistence.TransactionRequiredException: No active transaction for PuId=project.ear#included.war#persistence-unit-name
[29.08.13 15:14:59:714 CEST] 00000071 SystemErr     R   at com.ibm.ws.jpa.management.JPATxEntityManager.getEMInvocationInfo(JPATxEntityManager.java:221)
[29.08.13 15:14:59:714 CEST] 00000071 SystemErr     R   at com.ibm.ws.jpa.management.JPATxEntityManager.getEMInvocationInfo(JPATxEntityManager.java:179)
[29.08.13 15:14:59:714 CEST] 00000071 SystemErr     R   at com.ibm.ws.jpa.management.JPAEntityManager.persist(JPAEntityManager.java:143)
[29.08.13 15:14:59:714 CEST] 00000071 SystemErr     R   at com.TestFacade.testEMInsert(TestFacade.java:72)

私のpersistence.xml(META-INFに配置):

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit
              name="persistence-unit-name"
              transaction-type="JTA">

        <!-- <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> -->
        <!-- <provider>com.ibm.websphere.persistence.PersistenceProviderImpl</provider> -->
        <jta-data-source>jdbc/test-services-ds</jta-data-source>

        <class>com.EntityTest</class>

        <properties>
            <!--<property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>-->
            <property name="openjpa.Log" value="SQL=TRACE"/>
            <!-- PrintParameters will show query parameters, remove when development has been finished -->
            <!-- <property name="openjpa.ConnectionFactoryProperties"  value="PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true"/> -->
            <property name="openjpa.jdbc.Schema" value="LKWSQL"/>
            <property name="openjpa.TransactionMode" value="managed"/>
            <property name="openjpa.ConnectionFactoryMode" value="managed"/>
            <property name="openjpa.jdbc.DBDictionary" value="db2"/>
        </properties>
    </persistence-unit>
</persistence>

persistence.xml が読み込まれるので、耳のパッケージングは​​問題ないようです。JavaEE6では戦争で十分であることは知っていますが、それはすでに既存のプロジェクト設定でした。私たちの前のチームはユーザー管理トランザクションに切り替えましたが、誰かが間違いを指摘するのを手伝ってくれることを願っています.

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED) // default, but was worth a try
@Path("servicepath")
public class TestFacade implements ITestFacade {

    @Inject
    private SearchService searchService;
    @PersistenceContext(unitName="persistence-unit-name")
    private EntityManager em;

検索サービスが最初の問題を引き起こしました。@EJB では常に null でした。CDIからの@Injectが機能しました。多分それは手がかりですか?

@GET
@Path("testInsert/")
@Produces({ MediaType.TEXT_PLAIN })
public String testEMInsert() {
try{
    System.out.println("testing Insert: " + em.isOpen()); // open is true
    EntityTest e = new EntityTest("name");
            em.persist(e);

} catch (Exception e){
    e.printStackTrace();
    return e.getMessage();
}

return "OK";
 }

私が何をチェックできるか、誰かが知っていることを願っています。ファサードとサービスの名前を変更する必要がありました。:-/ ご挨拶

4

2 に答える 2