KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > glassfish > deployment > util > JMXDeploy


1 /*
2  * The contents of this file are subject to the terms
3  * of the Common Development and Distribution License
4  * (the License). You may not use this file except in
5  * compliance with the License.
6  *
7  * You can obtain a copy of the license at
8  * https://glassfish.dev.java.net/public/CDDLv1.0.html or
9  * glassfish/bootstrap/legal/CDDLv1.0.txt.
10  * See the License for the specific language governing
11  * permissions and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL
14  * Header Notice in each file and include the License file
15  * at glassfish/bootstrap/legal/CDDLv1.0.txt.
16  * If applicable, add the following below the CDDL Header,
17  * with the fields enclosed by brackets [] replaced by
18  * you own identifying information:
19  * "Portions Copyrighted [year] [name of copyright owner]"
20  *
21  * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
22  */

23 package org.glassfish.deployment.util;
24
25 import java.io.ObjectInputStream JavaDoc;
26 import java.io.ObjectOutputStream JavaDoc;
27 import java.net.URL JavaDoc;
28 import java.net.URLConnection JavaDoc;
29 import java.util.HashMap JavaDoc;
30 import java.util.Map JavaDoc;
31 import javax.management.MBeanServerConnection JavaDoc;
32 import javax.management.ObjectName JavaDoc;
33 import javax.management.remote.JMXConnector JavaDoc;
34 import javax.management.remote.JMXConnectorFactory JavaDoc;
35 import javax.management.remote.JMXServiceURL JavaDoc;
36
37
38 /**
39  * Small Util to reload/restart a WebModule using JMX.
40  *
41  * @author Jeanfrancois Arcand
42  */

43 public class JMXDeploy{
44
45     private final static String JavaDoc mBeanName = "com.sun.appserv:"
46              + "J2EEApplication=null,J2EEServer=server,"
47              + "j2eeType=WebModule,name=//server";
48     
49     private static URLConnection JavaDoc conn = null;
50     private static URL JavaDoc url;
51     private static ObjectOutputStream JavaDoc objectWriter = null;
52     private static ObjectInputStream JavaDoc objectReader = null;
53     private static String JavaDoc adminUser = null;
54     private static String JavaDoc adminPassword = null;
55     private static int adminPort = 4848;
56     private static String JavaDoc contextRoot= "";
57     private static String JavaDoc host = "localhost";
58     
59     public static void main(String JavaDoc args[]) throws Exception JavaDoc{
60         try{
61             String JavaDoc command = args[0];
62             host = args[1];
63             contextRoot = "/" + args[2];
64             adminUser = args[3];
65             adminPassword = args[4];
66             adminPort = Integer.parseInt(args[5]);
67
68             if ( command.equals("--restart")){
69                 restart(mBeanName + contextRoot);
70             } else if (command.equals("--reload")){
71                 reload(mBeanName + contextRoot);
72             }
73             System.out.println("DEPLOYMENT SUCCESS");
74         } catch(Throwable JavaDoc ex){
75             System.out.println("Usage\n");
76             System.out.println("jmxReload --reload|restart");
77             System.out.print(" [contextRoot]");
78             ex.printStackTrace();
79             System.out.println("DEPLOYMENT FAILED");
80         }
81     }
82
83     
84     private static void restart(String JavaDoc oName) throws Throwable JavaDoc{
85         ObjectName JavaDoc appMBean = new ObjectName JavaDoc(oName);
86         
87         try {
88             restartHttp(appMBean);
89         } catch (Throwable JavaDoc t){
90             restartHttps(appMBean);
91         }
92     }
93
94
95     private static void reload(String JavaDoc oName) throws Throwable JavaDoc{
96         ObjectName JavaDoc appMBean = new ObjectName JavaDoc(oName);
97
98         try {
99             reloadHttp(appMBean);
100         } catch (Throwable JavaDoc t){
101             t.printStackTrace();
102             reloadHttps(appMBean);
103         }
104      }
105
106
107     /**
108      * Reload the Context using JMX and HTTP.
109      */

110     private static void reloadHttp(ObjectName JavaDoc appMBean) throws Throwable JavaDoc {
111
112         Object JavaDoc[] params = new Object JavaDoc[0];
113         String JavaDoc[] signature = new String JavaDoc[0];
114         System.out.println("Reload Context: " + contextRoot);
115
116         Object JavaDoc o= getMBeanServerConnection().
117             invoke(appMBean, "reload", params, signature);
118     }
119
120
121     /**
122      * Reload the Context using JMX and HTTP.
123      */

124     private static void restartHttp(ObjectName JavaDoc appMBean) throws Throwable JavaDoc {
125         Object JavaDoc[] params = new Object JavaDoc[0];
126         String JavaDoc[] signature = new String JavaDoc[0];
127         System.out.println("Stopping Context: " + contextRoot);
128
129         Object JavaDoc o= getMBeanServerConnection().
130             invoke(appMBean, "stop", params, signature);
131
132         System.out.println("Starting Context: " + contextRoot);
133
134         o= getMBeanServerConnection()
135             .invoke(appMBean, "start", params, signature);
136     }
137
138     
139     /**
140      * Local the MBeanServer.
141      */

142     private static MBeanServerConnection JavaDoc getMBeanServerConnection()
143                                                             throws Throwable JavaDoc{
144         return getMBeanServerConnection(host,adminPort,adminUser,adminPassword);
145     }
146
147
148     /**
149      * Get an Server Connection.
150      */

151     private static MBeanServerConnection JavaDoc getMBeanServerConnection
152                                             (String JavaDoc host,
153                                              int port,
154                                              String JavaDoc user,
155                                              String JavaDoc password) throws Throwable JavaDoc{
156
157         final JMXServiceURL JavaDoc url =
158             new JMXServiceURL JavaDoc("service:jmx:s1ashttp://" + host + ":" + port);
159         final Map JavaDoc env = new HashMap JavaDoc();
160         final String JavaDoc PKGS = "com.sun.enterprise.admin.jmx.remote.protocol";
161         
162         env.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, PKGS);
163         env.put(ADMIN_USER_ENV_PROPERTY_NAME, user );
164         env.put( ADMIN_PASSWORD_ENV_PROPERTY_NAME, password);
165         env.put(HTTP_AUTH_PROPERTY_NAME, DEFAULT_HTTP_AUTH_SCHEME);
166         final JMXConnector JavaDoc conn = JMXConnectorFactory.connect(url, env);
167         return conn.getMBeanServerConnection();
168     }
169
170
171     /**
172      * Reload the Context using JMX and HTTPs
173      */

174     private static void reloadHttps(ObjectName JavaDoc appMBean) throws Throwable JavaDoc {
175         Object JavaDoc[] params = new Object JavaDoc[0];
176         String JavaDoc[] signature = new String JavaDoc[0];
177         System.out.println("Reloading Context: " + contextRoot);
178
179         Object JavaDoc o= getSecureMBeanServerConnection()
180                     .invoke(appMBean, "reload", params, signature);
181
182     }
183
184
185     /**
186      * Reload the Context using JMX and HTTPs
187      */

188     private static void restartHttps(ObjectName JavaDoc appMBean) throws Throwable JavaDoc {
189         Object JavaDoc[] params = new Object JavaDoc[0];
190         String JavaDoc[] signature = new String JavaDoc[0];
191         System.out.println("Stopping Context: " + contextRoot);
192
193         Object JavaDoc o= getSecureMBeanServerConnection()
194                     .invoke(appMBean, "stop", params, signature);
195
196         System.out.println("Starting Context: " + contextRoot);
197
198         o= getSecureMBeanServerConnection().invoke(
199             appMBean, "start", params, signature);
200     }
201
202     
203     /**
204      * Get a secure JMX connection.
205      */

206     private static MBeanServerConnection JavaDoc getSecureMBeanServerConnection()
207                                                             throws Throwable JavaDoc{
208        return getSecureMBeanServerConnection(host,adminPort,adminUser,
209                 adminPassword);
210     }
211
212
213     /**
214      * Get a secure JMX connection.
215      */

216     private static MBeanServerConnection JavaDoc
217         getSecureMBeanServerConnection(String JavaDoc host,
218                                        int port,
219                                        String JavaDoc user,
220                                        String JavaDoc password) throws Throwable JavaDoc{
221
222         final JMXServiceURL JavaDoc url = new JMXServiceURL JavaDoc("service:jmx:s1ashttps://" +
223                                   host + ":" + port);
224         final Map JavaDoc env = new HashMap JavaDoc();
225         final String JavaDoc PKGS = "com.sun.enterprise.admin.jmx.remote.protocol";
226                                                                             
227         env.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, PKGS);
228         env.put(ADMIN_USER_ENV_PROPERTY_NAME, user );
229         env.put( ADMIN_PASSWORD_ENV_PROPERTY_NAME, password);
230         env.put(HTTP_AUTH_PROPERTY_NAME, DIGEST_HTTP_AUTH_SCHEME);
231         final JMXConnector JavaDoc conn = JMXConnectorFactory.connect(url, env);
232         return conn.getMBeanServerConnection();
233     }
234     
235 // --------------------------------------------------------------- AMX related
236

237
238     public static final String JavaDoc ADMIN_USER_ENV_PROPERTY_NAME = "USER";
239     public static final String JavaDoc ADMIN_PASSWORD_ENV_PROPERTY_NAME = "PASSWORD";
240     public static final String JavaDoc TRUST_MANAGER_PROPERTY_NAME = "TRUST_MANAGER_KEY";
241     public static final String JavaDoc KEY_MANAGER_PROPERTY_NAME= "KEYMANAGER_KEY";
242     public static final String JavaDoc SSL_SOCKET_FACTORY = "SSL_SOCKET_FACTORY";
243     public static final String JavaDoc HOSTNAME_VERIFIER_PROPERTY_NAME = "HOSTNAME_VERIFIER_KEY";
244     public static final String JavaDoc STRING_MANAGER_CLASS_NAME = "STRING_MANAGER_CLASS_KEY";
245     public static final String JavaDoc DEFAULT_TRUST_MANAGER = "com.sun.enterprise.security.trustmanager.SunOneBasicX509TrustManager";
246     public static final String JavaDoc SERVLET_CONTEXT_PROPERTY_NAME = "com.sun.enterprise.as.context.root";
247     public static final String JavaDoc HTTP_AUTH_PROPERTY_NAME = "com.sun.enterprise.as.http.auth";
248     public static final String JavaDoc DEFAULT_SERVLET_CONTEXT_ROOT = "/web1/remotejmx"; /* This is to be in sync with the web.xml */
249     public static final String JavaDoc DEFAULT_HTTP_AUTH_SCHEME = "BASIC";
250     public static final String JavaDoc DIGEST_HTTP_AUTH_SCHEME = "Digest";
251     
252     public static final String JavaDoc S1_HTTP_PROTOCOL = "s1ashttp";
253     public static final String JavaDoc S1_HTTPS_PROTOCOL = "s1ashttps";
254 }
255
Popular Tags