2011-08-17 31 views
0

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

<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,或者我应该去一些其他的技术/方法。如果我在标准之外做任何事情,请好好建议和指导。

回答

0

经常使用Web服务和JPA的组合,我没有理由选择其他持久性机制。我建议坚持使用您当前的设计,直到您的要求变得更加复杂。

更大的应用程序,其中您的请求对象的等价物更复杂,并且最终的业务逻辑更具挑战性,会添加更多对象层以控制结构并启用重用。

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

相关问题