Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1471 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java]Controler un service

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java]Controler un service

n°1868128
Subgenk
Posté le 01-04-2009 à 10:19:43  profilanswer
 

Bonjour à tous,
 
Voilà j'ai réaliser une appli que j'ai, grâce aux package org.tanukisoftware.wrapper, transformé en service.
Cette petite application réalise juste à un intervalle de temps (10secondes) une écriture dans un fichier.
 
Ce que j'aimerais faire, c'est réussir à modifier ce servir à l'aide d'un programme java.. Problème je ne vois pas comment (et même après avoir lu la doc de package org.tanukisoftware.wrapper) réussir à me "connecter" à ce service que j'ai créer.
 
Si quelqu'un sait se servir de ce package et connait ce cas, merci de l'aide :).
 
si je n'ai pas était clair, merci de me demander des précisions.
 
PS : http://wrapper.tanukisoftware.org/jdoc/index.html


Message édité par Subgenk le 02-04-2009 à 17:24:45
mood
Publicité
Posté le 01-04-2009 à 10:19:43  profilanswer
 

n°1868194
Subgenk
Posté le 01-04-2009 à 11:37:06  profilanswer
 

La seule info pour le moment que j'ai pu trouver pour tenter de créer un objet qui relierait ma classe à mon service se base sur un port pour le constructeur...

 

Quelqu'un saurait comment connaître le port utiliser par un service windows ?


Message édité par Subgenk le 01-04-2009 à 11:37:41
n°1868364
Subgenk
Posté le 01-04-2009 à 15:57:13  profilanswer
 

Pour plus d'information sur mon programme en mode service, voici les sources :  

Code :
  1. public class BackGroundService implements WrapperListener
  2. {
  3.     private int time,i;
  4.     private boolean isTrue;
  5.     private String text;
  6.     private FileWriter fw;
  7.     public BackGroundService()
  8.     {
  9.         try
  10.         {
  11.             this.fw = new FileWriter("C:\\fichierTest.txt" );
  12.             this.time=10000;
  13.             this.text="test";
  14.             this.i=0;
  15.             this.isTrue = true;
  16.         }
  17.         catch (IOException ex)
  18.         {
  19.             Logger.getLogger(BackGroundService.class.getName()).log(Level.SEVERE, null, ex);
  20.         }
  21.     }
  22.     public void setFichier(String text)
  23.     {
  24.         try
  25.         {
  26.             this.fw = new FileWriter(text);
  27.         }
  28.         catch (IOException ex)
  29.         {
  30.             Logger.getLogger(BackGroundService.class.getName()).log(Level.SEVERE, null, ex);
  31.         }
  32.     }
  33.     public void setText(String text)
  34.     {
  35.         this.text = text;
  36.     }
  37.     public String getText()
  38.     {
  39.         return this.text;
  40.     }
  41.    
  42.     public void setTime(int time)
  43.     {
  44.         this.time = time;
  45.     }
  46.     public int getTime()
  47.     {
  48.         return this.time;
  49.     }
  50.     public void ecrireFichier()
  51.     {
  52.         try
  53.         {           
  54.             try {
  55.                 i++;
  56.                 fw.write("On ecrit dans le fichier: "+text+" "+ i+" fois,"+ " tous les "+time/1000+" secondes.\n" );
  57.                 fw.flush();
  58.                
  59.             }
  60.             catch (IOException ex)
  61.             {             
  62.                 Logger.getLogger(BackGroundService.class.getName()).log(Level.SEVERE, null, ex);
  63.             }
  64.             Thread.sleep(time);
  65.         }
  66.         catch (InterruptedException ex)
  67.         {
  68.             Logger.getLogger(BackGroundService.class.getName()).log(Level.SEVERE, null, ex);
  69.         }
  70.     }
  71.     public static void main(String []arg0)
  72.     {
  73.         BackGroundService BGS = new BackGroundService();
  74.         BGS.start(arg0);
  75.     }
  76.     public Integer start(String[] arg0)
  77.     {
  78.        
  79.         while (isTrue)
  80.         {
  81.             ecrireFichier();
  82.         }
  83.         return 1;
  84.     }
  85.     public int stop(int arg0)
  86.     {
  87.         isTrue = false;
  88.         return arg0;
  89.     }
  90.     public void controlEvent(int arg0)
  91.     {}
  92. }


 
J'ai implémenter dernièrement l'interface "WrapperListener", sans réussir à changer quelque chose...
Personne ne s'y connait sur ce Wrapper Service ? :x

n°1868376
Riokmij
Blink and you're dead
Posté le 01-04-2009 à 16:14:21  profilanswer
 

Il y a un problème avec ta méthode "start". Je cite la Javadoc : "This method call is expected to return, so a new thread should be launched if necessary"
 
Tu ne peux donc pas avoir une boucle comme ça dans cette méthode, tout ce qu'elle devrait faire, c'est créer un Thread, le lancer, et retourner.

n°1868386
Subgenk
Posté le 01-04-2009 à 16:28:22  profilanswer
 

le problème n'est pas dans le service en lui même (vu que j'arrive à le faire tourner manuellement) le problème est que je n'arrive pas, par exemple à le lancer, en passant par un programme java.

 

Mais ceci dit je vais modifier ma méthode ^^

 

EDIT : Hum... Je vais peut-être passer pour un débutant... Mais je vois pas comment implémenter un new thread là-dedans :x !


Message édité par Subgenk le 01-04-2009 à 16:40:11
n°1868392
Riokmij
Blink and you're dead
Posté le 01-04-2009 à 16:43:14  profilanswer
 

Je comprends pas vraiment ton problème, tu pourrais essayer de décrire plus précisément ce que tu essaies de faire ? D'après ce que je devine, tu veux pouvoir arrêter et redémarrer les écritures dans ton fichier depuis un autre programme Java, c'est ça ? Et tu as quoi dans ton fichier wrapper.conf ?
 

Citation :

EDIT : Hum... Je vais peut-être passer pour un débutant... Mais je vois pas comment implémenter un new thread là-dedans :x !


 
C'est facile : il faut que ta classe implémente l'interface "Runnable", qui défini une seule méthode "public void run()". Dans cette méthode, tu mets la boucle que tu as actuellement dans "start". Dans "start", tu mets simplement ça :

Code :
  1. Thread t = new Thread(this);
  2. t.start();


Message édité par Riokmij le 01-04-2009 à 16:48:01
n°1868424
Subgenk
Posté le 01-04-2009 à 17:43:29  profilanswer
 

Hum laissez tomber.. Je viens de me rendre compte que je ne peux pas contrôler mon service, tout simplement parce que j'ai la version gratuite de l'application.. u_u
 
Quelqu'un n'aurait pas un API/pattern qui permettrait de créer des services Windows et de pouvoir les contrôler (modifier des valeurs dedans) à l'aide d'une application java ?
 
PS : un API/pattern récent, donc le RMI bof :p

n°1868429
Riokmij
Blink and you're dead
Posté le 01-04-2009 à 17:53:34  profilanswer
 

Pour contrôler ton service, regarde du côté de JMX, ça me semble être exactement ce que tu cherches (c'est fourni en standard avec le JRE)

n°1868562
Subgenk
Posté le 02-04-2009 à 09:11:51  profilanswer
 

merci, je vais fouiner de ce coté là :D

n°1868663
Subgenk
Posté le 02-04-2009 à 12:15:35  profilanswer
 

hum J'ai un petit problème avec l'installation de mon service via java service..
J'ai eu les cas suivants :
- mon service s'arrete tout de suite
- mon service ne se démarre pas et me fait planter <.>

 

voici le code de mes 3 classes contenue dans mon service

Code :
  1. package ServiceJVXTest;
  2. public class Main
  3. {
  4.     public static void main(String[] args) throws Exception {
  5.         // Get the Platform MBean Server
  6.         MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
  7.         // Construct the ObjectName for the MBean we will register
  8.         ObjectName name = new ObjectName("ServiceJVXTest:type=BackGroundService" );
  9.         // Create the Hello World MBean
  10.         BackGroundService mbean = new BackGroundService();
  11.         // Register the Hello World MBean
  12.         mbs.registerMBean(mbean, name);
  13.         Thread.sleep(Long.MAX_VALUE);
  14.     }
  15. }
 
Code :
  1. package ServiceJVXTest;
  2. public interface BackGroundServiceMBean
  3. {
  4.     // Methodes accessibles
  5.    
  6.     public void setText(String text);
  7.     public void setTime(int time);
  8.     public void ecrireFichier();
  9.     public void setFichier(String text);
  10.     // Méthodes pour la Jconsole
  11.     public String getName();
  12.     public int getCacheSize();
  13.     public void setCacheSize(int size);
  14. }
 
Code :
  1. package ServiceJVXTest;
  2. public class BackGroundService implements BackGroundServiceMBean
  3. {
  4.     private int time,i;
  5.     private boolean isTrue;
  6.     private String text;
  7.     private FileWriter fw;
  8.     private final String name = "BackGroundService";
  9.     private int cacheSize = DEFAULT_CACHE_SIZE;
  10.     private static final int DEFAULT_CACHE_SIZE = 200;
  11.     public BackGroundService()
  12.     {
  13.         try
  14.         {
  15.             this.fw = new FileWriter("C:\\fichierTest.txt" );
  16.             this.time=10000;
  17.             this.text="test";
  18.             this.i=0;
  19.             this.isTrue = true;
  20.         }
  21.         catch (IOException ex)
  22.         {
  23.             Logger.getLogger(BackGroundService.class.getName()).log(Level.SEVERE, null, ex);
  24.         }
  25.     }
  26.     public void setFichier(String text)
  27.     {
  28.         try
  29.         {
  30.             this.fw = new FileWriter(text);
  31.         }
  32.         catch (IOException ex)
  33.         {
  34.             Logger.getLogger(BackGroundService.class.getName()).log(Level.SEVERE, null, ex);
  35.         }
  36.     }
  37.     public void setText(String text)
  38.     {
  39.         this.text = text;
  40.     }
  41.     public String getText()
  42.     {
  43.         return this.text;
  44.     }
  45.    
  46.     public void setTime(int time)
  47.     {
  48.         this.time = time;
  49.     }
  50.     public int getTime()
  51.     {
  52.         return this.time;
  53.     }
  54.     public void ecrireFichier()
  55.     {
  56.         try
  57.         {           
  58.             try {
  59.                 i++;
  60.                 fw.write("On ecrit dans le fichier: "+text+" "+ i+" fois,"+ " tous les "+time/1000+" secondes.\n" );
  61.                 fw.flush();
  62.                
  63.             }
  64.             catch (IOException ex)
  65.             {             
  66.                 Logger.getLogger(BackGroundService.class.getName()).log(Level.SEVERE, null, ex);
  67.             }
  68.             Thread.sleep(time);
  69.         }
  70.         catch (InterruptedException ex)
  71.         {
  72.             Logger.getLogger(BackGroundService.class.getName()).log(Level.SEVERE, null, ex);
  73.         }
  74.     }
  75.     public String getName() {
  76.         return this.name;
  77.     }
  78.     public int getCacheSize() {
  79.         return this.getCacheSize();
  80.     }
  81.     public void setCacheSize(int size) {
  82.         this.cacheSize=size;
  83.         System.out.println("Cache Size is now : "+cacheSize);
  84.     }
  85. }
 

Quand je le lance normalement tout se passe bien (ou presque, parce que je n'ai que ma méthode ecrireFichier() qui apparait dans la JConsole).

 

Je voudrais lancer ce programme en mode service, mais apparament je galère, j'ai mis mes 3 classe en BackGroundService.jar via netBeans, je l'ai mis dans C: et la commande que je tape est la suivante :

 

JavaService -install BackGroundService C:\Program Files\Java\jdk1.6.0_13\jre\bin\server\jvm.dll -Djava.class.path=C:\BackGroundService.jar
-start ServiceJVXTest.Main


Message édité par Subgenk le 02-04-2009 à 12:37:35

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java]Controler un service

 

Sujets relatifs
invocation d'un service web avec une application mobile CDCdeveloppement d'un service web mobile
Probleme de connexion JavaTomcat java.library.path
[javascript]multi clic sur le même bouton (avec Jquery)Se Logguer sur une page sécurisée SSH -Java
Installation d'Axis2 et déploiement de service sous NetBeansj n arrive pas à créer une connexion java vers base de données mysql
[Java] supprimer les cases null d'un ArrayListConfigurer windows pour JAVA
Plus de sujets relatifs à : [java]Controler un service


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR