Page 1 sur 1

controler ordre des actions

MessagePublié: 31 Jan 2010 à 15:31
par seroa
Bonjour à tous,

Je voudrais savoir s'il est possible de contrôler l'ordre d'action avec un agent en java sur un serveur domino.

Par exemple, mon agent lance une première méthode qui fait une pause de 10 seconde (Thread.sleep) puis enregistre un document A et une methode qui enregistre directement un document B.

Dans cette exemple, le document A est enregistré avant le document B, c'est à dire qu'il exécute une méthode après l'autre et pas les deux en même temps.

Je voudrais savoir s'il est possible qu'il exécute les deux en même temps. Je précise que Domino est installé sous linux, peut etre que cela a une influance ?

Merci

MessagePublié: 31 Jan 2010 à 17:48
par [In://ForM]
Comme en langage C je suppose, faire du multi-thread en Java. Et rendez-vous au tas de sable en fin des traitements.....

MessagePublié: 02 Fév 2010 à 08:37
par seroa
Bonjour,

J'ai mis en place le multi thread.

Tout vas bien lorsque je fais un affichage sur la console, par contre, lorsque j'utilise des objets, la le serveur plante complètement avec l'erreur suivante : HTTP JVM: JVMDG303: JVM Requesting Java core file

Je suis obligé de redémarrer le serveur.

Voila ma classe principale :

Code : Tout sélectionner
public class TestThreadSynchro extends AbstractDominoAgent {
   
   protected Database db;

   
   public TestThreadSynchro(final Session session, final Database db) {
      super(session);
      this.db = db;
   }

   public void run() throws NotesException {
      
      SecondActivity act2 = new SecondActivity();
      Thread t = new Thread(act2);
      t.start();
      
      try {
            Thread.sleep(5000);
      } catch (InterruptedException e) {
             
      }
      
      ObjectFactory factory = new ObjectFactory(db);
      Object ts =  factory.load("1","doc n°1");
      System.out.print(ts.getNum() + ":" + ts.getName() + " is saved" );
      
      
      try {
         t.join();
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
      
      
   }
   
}


Ma classe seconde activité :

Code : Tout sélectionner
public class SecondActivity implements Runnable {
   

   public SecondActivity () {

   }
   
   public void run() {

      ObjectFactory factory = new ObjectFactory(db);
      Object ts =  factory.load("2","doc n°2");
      System.out.print(ts.getNum() + ":" + ts.getName() + " is saved" );
               
   }
}


Est-ce que vous voyez d'où le problème pourrait venir s'il vous plait ?

Merci

MessagePublié: 02 Fév 2010 à 11:49
par LSong
ce que je lit la quand tu lances le start de la classe TestThreadSynchro tu vas lancer dans la foulé le thread contenant SecondActivity
qui lui sans attendre va traiter son doc
5s apres le TestThreadSynchro traite le sien


les deux ne sont pas en meme temps
a mon avis ce n'est pas un probleme d'accé en meme temps

si tu veux un traitement // (je vois pas pourquoi ce besoin mais bon)
il faut que tu lance plusieurs fois SecondActivity avec un parametre (dans le constructuer ou un syseme de producteur/consomateur)

MessagePublié: 02 Fév 2010 à 17:45
par seroa
Merci,

en effet ça n'était pas un problème d'accès en même temps, je ne vois toujours pas pourquoi le serveur plante.

Quoi qu'il en soit en lançant plusieurs fois mon thread SecondACtivity, ça fonctionne.

MessagePublié: 03 Fév 2010 à 09:36
par LSong
il faudrait voir ce que fait ta factory pour cherche la raison de ton plantage

personnellement je prefaire heriter de la classe Thread que d'implementé runnable c'est plus simple je trouve