2011-08-17 1 views
0

Je crée un service web en utilisant wsdl 3ème partie qui m'aide à obtenir une sorte de notification. maintenant je dois enregistrer cette notification dans DB et effectuer plusieurs autres opérations liées à DataBase. Mon persistence.xml il y a deux unités persistance comme suit:Quelle est la meilleure façon d'utiliser JPA dans WEBSERVICES?

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

jusqu'à ce que j'ai encore fait une classe nommée Service.java qui ont toutes les fonctions i besoin d'effectuer sur DB comme suit:

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 
    } 

Ma question est: Est-ce que je vais avec l'approche standard pour mettre en œuvre JPA avec webservice ou devrais-je aller avec une autre technologie/méthode. Bien vouloir suggérer et guider si je fais quelque chose hors de la norme.

Répondre

0

La combinaison d'un service Web et JPA est souvent utilisée, je ne vois aucune raison de choisir un autre mécanisme de persistance. Je vous recommande de conserver votre design actuel jusqu'à ce que vos besoins deviennent plus complexes.

Les applications plus grandes où l'équivalent de votre objet Request est plus complexe et la logique métier qui en résulte plus difficile ajouteront plus de couches d'objets afin de contrôler la structure et permettre la réutilisation.

J'ai tendance à penser comme ceci: L'interface de service Web est juste un "chemin" possible dans la logique de mon entreprise. Donc, je pourrais aussi avoir un service RESTful, ou une interface JMS. Par conséquent, j'ai tendance à mettre ma logique métier à l'intérieur d'un EJB, dans des cas simples, un EJB "No Interface". Je me concentre sur l'EJB en tant que morceau de logique métier réutilisable que je peux tester seul. Il fera tout le travail de l'APP. Ensuite, mon service Web utilise simplement cet EJB pour faire son travail. L'EJB s'occupe des transactions, donc je n'ai pas besoin d'écrire le code de contrôle de transaction que vous avez.

Questions connexes