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

Spring Java Discussion :

probleme d'acces concurrent


Sujet :

Spring Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 32
    Points : 22
    Points
    22
    Par défaut probleme d'acces concurrent
    Bonjour,


    je suis débutant avec Spring, et je tente de l'utiliser pour créer un Job scannant un répertoire.

    Lorsque ce job trouve un fichier xml ds ce repertoire, il doit l'envoyer dans une BlockingQueue, effectuer son traitement(3-4sec) puis l'effacer.

    Probleme:
    D'autres jobs concurrents se lancent pendant le 1er traitement, et tentent apres coup d'acceder au fichier maintenant effacé, d'où plantage...


    Mon but ici serait de faire tourner uniquement un seul Job, mais le threadCount=1 n'a pas suffit.


    voici mon applicationContext.xml:
    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
     
    	<bean name="ScanFileScheduler" class="org.springframework.scheduling.quartz.JobDetailBean">
    	  <property name="jobClass" value="fr.orex.OxOpenReport.filesTraitement.ScanFileScheduler" />
    	  <property name="jobDataAsMap">
    	    <map>
    	     <!-- <entry key="message" value="traitement en cours" /> -->
    	    </map>
    	  </property>
    	</bean>
     
    	<bean id="ScanTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
              <property name="jobDetail" ref="ScanFileScheduler" />
              <property name="startDelay" value="0" />
              <property name="repeatInterval" value="500" />
        </bean>
     
    	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    		<property name="quartzProperties">
    			<props>
    				<!-- ThreadPool -->
    				<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
    				<prop key="org.quartz.threadPool.threadCount">1</prop>
    				<prop key="org.quartz.threadPool.threadPriority">9</prop>
    			</props>
    		</property>
    		<property name="triggers">
    	        <list>
    	            <ref bean="ScanTrigger" />
    	        </list>
    	    </property>
    	</bean>
    Si vous avez des idées je suis preneur ^^
    Merci

  2. #2
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Ton problème vient plutôt de Quartz pas de Spring. Par contre je ne trouve pas l'erreur. Normalement si tu mets le nombre de thread à 1, il ne devrait pas y avoir plusieurs threads et donc pas de problème de concurrence.

    Sauf si tu crées un thread dans le ScanFileScheduler et à ce moment là, il pourrait y avoir un soucis. Car le 1 signifie seulement, qu'il y a un seul disponible pour le Scheduler de Quartz.

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 143
    Points : 157
    Points
    157
    Par défaut
    As-tu jeté un coup d'oeil à Spring Batch?
    http://static.springframework.org/spring-batch/

    C'est un projet Spring fait exactement pour ce type de problèmatique (et qui d'ailleurs utilise généralement Quartz comme scheduler).
    En particulier, il te garantit qu'un fichier est pris une fois et une seule fois dans répertoire.
    Julien Dubois

    http://www.ippon.fr

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    sinon synchroniser devrait faire l'affaire même si c'est un peu lourd

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class ScanFileScheduler {
        private static final Integer lock = 1;
     
        public void run() {
            synchronized (lock) {
                //traitment
     
            }
        }
    }

Discussions similaires

  1. SMSLib Probleme d'acces concurrent
    Par herguem dans le forum Multimédia
    Réponses: 0
    Dernier message: 06/10/2009, 18h48
  2. Réponses: 5
    Dernier message: 22/04/2008, 15h26
  3. probleme de doublons, accès concurrent ?
    Par kossistus dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2007, 13h39
  4. Probleme d'acces a show table status
    Par arcane dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/11/2003, 09h05
  5. [EJB] Accès concurrents à la base de données
    Par cameleon2002 dans le forum Java EE
    Réponses: 10
    Dernier message: 23/09/2003, 11h31

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