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

Tomcat et TomEE Java Discussion :

Déploiement d'un virtual Host "à chaud" avec JMX


Sujet :

Tomcat et TomEE Java

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut Déploiement d'un virtual Host "à chaud" avec JMX
    Bonjour,
    dans le cadre de mon projet de Stage "Déploiement de comptes clients à travers différetns serveurs", je souhaite créer un module permettant d'ajouter un virtual host "à chaud" car redémarrer un serveur applicatif n'est pas terrible car on doit attendre que plus aucun client ne soit connecté pour pouvoir le faire.
    J'ai commencé donc à faire du JMX et c'est très puissant, masi je n'arrive pas à bien gérer pour l'ajout de virtual host.
    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
    50
    51
    52
    53
    54
    55
    try {
    
                JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://192.168.2.25:8999/jmxrmi");
                JMXConnector conn = JMXConnectorFactory.connect(url, null);
                MBeanServerConnection mbsc = conn.getMBeanServerConnection();
    
                ObjectName objectName = new ObjectName("Catalina:type=Engine");
    
                if (mbsc.getAttribute(objectName, "baseDir") != null) {
                    System.out.println("connexion réussie, baseDir= "+mbsc.getAttribute(objectName, "baseDir"));
                    //ceci sert àvérifier que la connection ait bien été faite
                } else {
                    System.out.println("connexion ratée");
                }
                org.apache.catalina.Container Sh = new StandardHost();
      
                ((StandardHost) Sh).setAppBase("test2");
              ((StandardHost) Sh).setName("test21.appli.fr");
        
                ((StandardHost) Sh).addAlias("yoyoyo");
                ((StandardHost) Sh).setAutoDeploy(false);
                ((StandardHost) Sh).setDeployOnStartup(true);
                ((StandardHost) Sh).setUnpackWARs(false);
                
                org.apache.catalina.Container Sc = new StandardContext();
                    //creation du contexte du virtual host
                ((StandardContext) Sc).setDocBase("/data/apache-tomcat-6.0.16/webapps/examples");
                ((StandardContext) Sc).setPath("/examples");
                ((StandardContext) Sc).setDisplayName("nomCont");
    
                ((StandardHost) Sh).addChild(Sc);
                
                Object[] params = {Sh};
                String[] signature = {new String("org.apache.catalina.Container")};
                mbsc.invoke(objectName, "addChild", params, signature);
                //invocation de la méthode addchild(Container) de Engine
                conn.close();
    
            } catch (MBeanException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (AttributeNotFoundException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstanceNotFoundException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ReflectionException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    
            } catch (NullPointerException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            } catch (MalformedObjectNameException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
    L'erreur vient donc de la méthode invoke qui appelle la méthode addchild(Container) du Engine.

    java.io.NotSerializableException: org.apache.catalina.util.LifecycleSupport
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
    at java.util.HashMap.writeObject(HashMap.java:1001)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
    at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
    at java.rmi.MarshalledObject.<init>(MarshalledObject.java:101)
    at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.invoke(RMIConnector.java:975)
    at testjmx2.Main.main(Main.java:81)
    BUILD SUCCESSFUL (total time: 1 second)
    des idées?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 13
    Points : 13
    Points
    13
    Par défaut
    bon après pleins de tests et recherche, je me suis aperçu que mon probleme venait du fait que apparemment la méthode invoke(...) n'apprécie pas d'avoir un org.​apache.​catalina.​core.ContainerBase ou un classe héritant de celle-ci...
    personne n'a eu ce genre de probleme en jmx?

Discussions similaires

  1. Virtual host sur IP local avec IP publique dynamique
    Par guytou13 dans le forum Apache
    Réponses: 2
    Dernier message: 02/05/2010, 21h48

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