IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Méthode @Schedule et transaction timeout


Sujet :

Java EE

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut Méthode @Schedule et transaction timeout
    Bonjour à tous,

    J'ai besoin d'un petit coup de main chers confrères!

    Voilà dans mon projet j'ai un Session Bean @Stateless dont une méthode @Scheduled s'exécute tout les lundi à minuit.
    Ce Bean s'appuie sur un autre Bean style service permettant la création d'objet en base.
    La méthode est assez longue à se terminer et fait beaucoup d'appels au service pour créer des objets avec JPA.

    Voici mes objets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    @Stateless
    public class TachePlanifiee implements TachePlanifieeLocal {
     
    @Inject
    private transient Logger logger;
     
    @EJB
    AppelService serviceAppel;
     
     
    @Schedule(second = "0", minute = "0", hour = "0", dayOfWeek = "Mon", dayOfMonth = "*", month = "*", year = "*", info = "MyTimer", persistent = false)
    	private void scheduledTimeout() throws DAOException {
     
            //... code métier boucles etc.
            serviceAppel.createAppel(a, idClient);
            // ... code métier
     
    }
     
     
    }
     
     
    @Stateless
    public class AppelServiceImpl implements AppelService {
     
     
    	@Inject
    	ProspectionDAO daoP;
     
    	@Inject 
    	AppelDAO daoA;
     
    	@Inject 
    	@Mapper(businessObject=BusinessObject.APPEL)
    	IMapper mapper;
     
     
    	@Override
    	public Appel createAppel(Appel a, Long prospectionId) throws DAOException {
    		Prospection prospect = daoP.find(prospectionId);
    		a.setProspection(prospect);
    		a.setCommercialEnCharge(prospect.getCommercial().getCommercialEnCharge());
    		prospect.getAllAppels().add(a);
    		return daoA.create(a);
    	}
    }
    Le problème est que la méthode planifiée est trop longue, la transaction contenant les persist des objets se met en timeout et du coup, aucune requête SQL ne s’exécute.
    Ce que je voudrais, c'est désactiver la transaction de la méthode planifiée et utiliser uniquement les transactions des méthodes du service.
    J'ai lu que les méthodes planifiées sont obligatoirement transactionnelles par contre... Y aurait-il peut être une autre façon de faire avec CDI?

    Merci beaucoup!

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu peux jouer avec l'annotation @TransactionAttribute sur tes méthodes ou sur ton session bean.
    La valeur NEVER semble etre ce que tu recherches, ou peut etre SUPPORTS.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Salut fr1man,

    Il me semble avoir lu que ce n'était pas possible: https://www.java.net/forum/topic/gla...not-compatible.
    Par contre ce problème peut-être apparemment résolu en mettant la transaction Bean Managed sur l'EJB mais je ne sais plus vraiment ce que cela veut dire...

    Edit:
    Après un peu de lecture, je viens de comprendre qu'il faut soit même injecter un manager de transactions et les gérer programmatiquement.
    Sachant que mes beans services sont automatiquement transactionnels, peut-être qu'en mettant un @TransactionManagement(TransactionManagementType.BEAN) sans pour autant utiliser de transaction, cela marchera... Pas sur...

    Seule la ligne createAppel(a,clientID) doit être transactionnelle, le reste m'importe peu.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Ben apparemment, ajouter @TransactionManagement(TransactionManagementType.BEAN) m'a résolu le problème.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je ne connaissais pas la contrainte sur une méthode scheduled.

    Mais du coup, tu gères tes commit et rollback manuellement ?
    Car c'est ce que tu es censé faire ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [BO XI R2] - Schedule Webi doc: Session Timeout
    Par philou80 dans le forum Launchpad (ex-Infoview)
    Réponses: 5
    Dernier message: 12/06/2008, 13h58
  2. [Data] Problème de transaction - imbrication de méthodes
    Par barol dans le forum Spring
    Réponses: 1
    Dernier message: 28/02/2008, 20h03
  3. Réponses: 2
    Dernier message: 09/01/2008, 11h18
  4. Timeout des transactions
    Par triozen dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 19/10/2007, 10h09
  5. Déclencher une méthode sur un timeout
    Par hugsdan dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 19/02/2007, 13h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo