2010-10-20 21 views
1

classe decalaration:J'ai un slsb en ejb3.0 avec un certain nombre de méthodes, ai-je besoin d'annoter chaque méthode avec des attributs de transaction?

@Stateless 
@Local({ IMyLocalSLSB.class }) 
@Remote({ IMyRemoteSLSB.class }) }) 
public class mySLSB implements IMySLSB { 

private EntityManager em; 

et maintenant des méthodes d'insertion/mise à jour et la suppression d'enregistrements db sont des annotations de transactions nécessaires, je pensais qu'ils ne sont pas aussi jboss et EJB3.0 les traiter à l'aide de valeurs par défaut:

public void crud(MyEntity myEntity) { 
    em.merge(myEntity);// inserts or updates  
} 

public void deleteInsert(MyEntity myEntity) { 

    MyEntity found = em.find(MyEntity.class, myEntity.getMyEntityPK()); 

    if (found == null) { 
     em.merge(myEntity); 
    } else { 
     em.remove(found); 
    } 
} 

Et enfin, est-ce la meilleure façon de retourner un enregistrement/une entité, mais ne pas persister d'autres changements. Je prends un dossier et de modifier les données et l'affichage (je pourrais mettre en DTO mais cela semble des objets plus propre/moins)

public MyEntity getAnEntity(integer id){ 

    MyEntity myEntity = em.find(MyEntity.class, id); 
    org.hibernate.Session session = (Session) em.getDelegate(); 
    session.evict(myEntity); 
    return myEntity; 
} 

Pour résume sont annotations requried sur les méthodes pour les transactions dans un SLSB, et est session. expulser le meilleur moyen d'empêcher la persistance de tout changement?

Merci!

Répondre

3

Pour l'annotation sont nécessaires résume sur les méthodes pour les transactions dans un SLSB

Non, ils ne sont pas tenus . Vous pouvez appliquer l'annotation @TransactionAttribute au niveau de la classe pour spécifier l'attribut de transaction par défaut pour toutes les méthodes métier du bean enterprise. Si vous ne le faites pas, votre bean par défaut sera @TransactionAttribute(REQUIRED) (c'est-à-dire que toutes les méthodes sont traitées par défaut).

et session.evict est le meilleur moyen d'empêcher la persistance de tout changement?