0

私は、一種の通知を受け取るのに役立つサードパーティの wsdl を使用して Web サービスを作成しています。その通知を DB に保存し、データベースに関連する他のいくつかの操作を実行する必要があります。My persistence.xml には、次の 2 つの永続ユニットがあります。

    <persistence-unit name="PU1" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/vsDS</jta-data-source>
    <class>com.Response</class>
    <class>com.Request</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="eclipselink.logging.level" value="INFO"/>
    </properties>
</persistence-unit>


<persistence-unit name="PU2" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/vdDS</jta-data-source>
    <class>com.LogRequest</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="eclipselink.logging.level" value="INFO"/>
    </properties>
</persistence-unit>

まだDBで実行する必要があるすべての機能を持つ Service.java という名前のクラスを次のように作成しました:

public class Service {

private static Logger logger = Logger.getLogger(Service.class);

private EntityManagerFactory PU1;
private EntityManagerFactory PU2;


public Service(){
    System.out.println("in service's constructer");
    PU1=Persistence.createEntityManagerFactory("PU1");
    PU2=Persistence.createEntityManagerFactory("PU2");
}
public void logSubRequest(String msg){
    EntityManager em= PU1.createEntityManager();
    try{
        em.getTransaction().begin();
        Request req=new Request();
        req.setMessage(msg);
        req.setStatus("Y");
        em.persist(req);

        em.getTransaction().commit();
    }catch(Exception e){
        logger.error("In logSubRequest="+e.getMessage()); 
        e.printStackTrace();
    }finally{
        if(em.isOpen()){
            em.close();
        }
    }
}
   // there are several other methods of such kind that either persist entities or executeUpdate
   }

私の質問は次のとおりです。WebサービスでJPAを実装するための標準的なアプローチを使用していますか、それとも他のテクノロジー/方法を使用する必要がありますか。私が標準外のことをしている場合は、親切に提案し、ガイドしてください。

4

1 に答える 1

0

Web サービスと JPA の組み合わせがよく使用されますが、他の永続化メカニズムを選択する理由はないと思います。要件がより複雑になるまで、現在の設計に固執することをお勧めします。

Request オブジェクトに相当するものがより複雑で、結果として生じるビジネス ロジックがより困難な大規模なアプリケーションでは、構造を制御して再利用を可能にするために、オブジェクトのレイヤーを追加します。

私は次のように考える傾向があります。Web サービス インターフェイスは、ビジネス ロジックへの 1 つの可能な「方法」にすぎません。したがって、RESTful サービスまたは JMS インターフェースもあるかもしれません。したがって、私はビジネス ロジックを EJB 内に配置する傾向があり、単純なケースでは「インターフェースなし」EJB です。私は、分離してテストできるビジネス ロジックの再利用可能な部分として、EJB に焦点を当てています。すべての JPA 作業を行います。次に、私の Web サービスはその EJB を使用して作業を行います。EJB がトランザクションを処理するので、トランザクション制御コードを記述する必要はありません。

于 2011-08-17T06:57:43.417 に答える