0

我正在使用 3rd 方 wsdl 创建一个 Web 服务,它可以帮助我获得某种通知。现在我必须将该通知保存在数据库中并执行与数据库相关的其他几个操作。在我的 persistence.xml 中有两个持久性单元如下:

    <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>

到目前为止,我已经创建了一个名为 Service.java 的类,它具有我需要在 DB 上执行的所有功能,如下所示:

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 的组合,我认为没有理由选择其他一些持久性机制。我建议坚持您当前的设计,直到您的要求变得更加复杂。

更大的应用程序,如果您的请求对象的等价物更复杂,并且由此产生的业务逻辑更具挑战性,将添加更多的对象层,以控制结构并实现重用。

我倾向于这样想:Web 服务接口只是我的业务逻辑的一种可能的“途径”。所以我可能还有一个 RESTful 服务或 JMS 接口。因此,我倾向于将我的业务逻辑放在一个 EJB 中,在简单的情况下是一个“无接口”EJB。我专注于将 EJB 作为一个可重用的业务逻辑,我可以单独测试它。它将完成所有 JPA 工作。然后我的 Web 服务只使用该 EJB 来完成它的工作。EJB 负责处理事务,因此我不需要编写您拥有的事务控制代码。

于 2011-08-17T06:57:43.417 回答