KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > console > util > PortletManager


1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17 package org.apache.geronimo.console.util;
18
19 import java.io.File JavaDoc;
20 import java.util.Map JavaDoc;
21 import java.util.regex.Pattern JavaDoc;
22
23 import javax.enterprise.deploy.spi.DeploymentManager JavaDoc;
24 import javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException JavaDoc;
25 import javax.naming.InitialContext JavaDoc;
26 import javax.naming.NamingException JavaDoc;
27 import javax.portlet.PortletRequest;
28 import javax.portlet.PortletSession;
29 import javax.portlet.RenderResponse;
30 import javax.security.auth.Subject JavaDoc;
31 import javax.security.auth.login.LoginException JavaDoc;
32 import javax.security.auth.spi.LoginModule JavaDoc;
33 import javax.servlet.http.HttpServletRequest JavaDoc;
34 import javax.servlet.http.HttpSession JavaDoc;
35
36 import org.apache.commons.logging.Log;
37 import org.apache.commons.logging.LogFactory;
38 import org.apache.geronimo.deployment.plugin.factories.DeploymentFactoryImpl;
39 import org.apache.geronimo.gbean.AbstractName;
40 import org.apache.geronimo.gbean.GBeanData;
41 import org.apache.geronimo.kernel.Kernel;
42 import org.apache.geronimo.kernel.KernelRegistry;
43 import org.apache.geronimo.kernel.config.ConfigurationModuleType;
44 import org.apache.geronimo.kernel.proxy.GeronimoManagedBean;
45 import org.apache.geronimo.kernel.repository.Artifact;
46 import org.apache.geronimo.kernel.repository.Repository;
47 import org.apache.geronimo.management.J2EEDeployedObject;
48 import org.apache.geronimo.management.geronimo.J2EEDomain;
49 import org.apache.geronimo.management.geronimo.J2EEServer;
50 import org.apache.geronimo.management.geronimo.JCAAdminObject;
51 import org.apache.geronimo.management.geronimo.JCAManagedConnectionFactory;
52 import org.apache.geronimo.management.geronimo.JCAResource;
53 import org.apache.geronimo.management.geronimo.JMSBroker;
54 import org.apache.geronimo.management.geronimo.JMSConnector;
55 import org.apache.geronimo.management.geronimo.JMSManager;
56 import org.apache.geronimo.management.geronimo.JVM;
57 import org.apache.geronimo.management.geronimo.ResourceAdapter;
58 import org.apache.geronimo.management.geronimo.ResourceAdapterModule;
59 import org.apache.geronimo.management.geronimo.WebAccessLog;
60 import org.apache.geronimo.management.geronimo.WebConnector;
61 import org.apache.geronimo.management.geronimo.WebContainer;
62 import org.apache.geronimo.management.geronimo.WebManager;
63 import org.apache.geronimo.system.logging.SystemLog;
64
65 /**
66  * @version $Rev: 476229 $ $Date: 2006-11-17 12:48:02 -0500 (Fri, 17 Nov 2006) $
67  */

68 public class PortletManager {
69     private final static Log log = LogFactory.getLog(PortletManager.class);
70     // The following are currently static due to having only one server/JVM/etc. per Geronimo
71
private final static String JavaDoc HELPER_KEY = "org.apache.geronimo.console.ManagementHelper";
72     private final static String JavaDoc DOMAIN_KEY = "org.apache.geronimo.console.J2EEDomain";
73     private final static String JavaDoc SERVER_KEY = "org.apache.geronimo.console.J2EEServer";
74     private final static String JavaDoc JVM_KEY = "org.apache.geronimo.console.JVM";
75     private final static String JavaDoc SYSTEM_LOG_KEY = "org.apache.geronimo.console.SystemLog";
76     // The following may change based on the user's selections
77
// nothing yet
78

79     private static ManagementHelper createHelper() {
80         //todo: consider making this configurable; we could easily connect to a remote kernel if we wanted to
81
Kernel kernel = null;
82         try {
83             kernel = (Kernel) new InitialContext JavaDoc().lookup("java:comp/GeronimoKernel");
84         } catch (NamingException JavaDoc e) {
85 // log.error("Unable to look up kernel in JNDI", e);
86
}
87         if (kernel == null) {
88             log.debug("Unable to find kernel in JNDI; using KernelRegistry instead");
89             kernel = KernelRegistry.getSingleKernel();
90         }
91         return new KernelManagementHelper(kernel);
92     }
93
94     public static DeploymentManager JavaDoc getDeploymentManager(PortletRequest request) {
95         DeploymentFactoryImpl factory = new DeploymentFactoryImpl();
96         try {
97             return factory.getDeploymentManager("deployer:geronimo:inVM", null, null);
98         } catch (DeploymentManagerCreationException JavaDoc e) {
99             log.error(e.getMessage(), e);
100             return null;
101         }
102     }
103
104     public static ManagementHelper getManagementHelper(PortletRequest request) {
105         ManagementHelper helper = (ManagementHelper) request.getPortletSession(true).getAttribute(HELPER_KEY, PortletSession.APPLICATION_SCOPE);
106         if (helper == null) {
107             helper = createHelper();
108             request.getPortletSession().setAttribute(HELPER_KEY, helper, PortletSession.APPLICATION_SCOPE);
109         }
110         return helper;
111     }
112
113     public static ManagementHelper getManagementHelper(HttpSession JavaDoc session) {
114         ManagementHelper helper = (ManagementHelper) session.getAttribute(HELPER_KEY);
115         if (helper == null) {
116             helper = createHelper();
117             session.setAttribute(HELPER_KEY, helper);
118         }
119         return helper;
120     }
121
122     public static J2EEDomain getCurrentDomain(PortletRequest request) {
123         J2EEDomain domain = (J2EEDomain) request.getPortletSession(true).getAttribute(DOMAIN_KEY, PortletSession.APPLICATION_SCOPE);
124         if (domain == null) {
125             domain = getManagementHelper(request).getDomains()[0]; //todo: some day, select a domain
126
request.getPortletSession().setAttribute(DOMAIN_KEY, domain, PortletSession.APPLICATION_SCOPE);
127         }
128         return domain;
129
130     }
131
132     public static J2EEServer getCurrentServer(PortletRequest request) {
133         J2EEServer server = (J2EEServer) request.getPortletSession(true).getAttribute(SERVER_KEY, PortletSession.APPLICATION_SCOPE);
134         if (server == null) {
135             server = getCurrentDomain(request).getServerInstances()[0]; //todo: some day, select a server from the domain
136
request.getPortletSession().setAttribute(SERVER_KEY, server, PortletSession.APPLICATION_SCOPE);
137         } else {
138             // to do handle "should not occur" error - message?
139
}
140         return server;
141     }
142
143     public static JVM getCurrentJVM(PortletRequest request) {
144         JVM jvm = (JVM) request.getPortletSession(true).getAttribute(JVM_KEY, PortletSession.APPLICATION_SCOPE);
145         if (jvm == null) {
146             ManagementHelper helper = getManagementHelper(request);
147             jvm = helper.getJavaVMs(getCurrentServer(request))[0]; //todo: some day, select a JVM from the server
148
request.getPortletSession().setAttribute(JVM_KEY, jvm, PortletSession.APPLICATION_SCOPE);
149         }
150         return jvm;
151     }
152
153     public static void testLoginModule(PortletRequest request, LoginModule JavaDoc module, Map JavaDoc options) {
154         ManagementHelper helper = getManagementHelper(request);
155         helper.testLoginModule(getCurrentServer(request), module, options);
156     }
157
158     public static Subject JavaDoc testLoginModule(PortletRequest request, LoginModule JavaDoc module, Map JavaDoc options, String JavaDoc username, String JavaDoc password) throws LoginException JavaDoc {
159         ManagementHelper helper = getManagementHelper(request);
160         return helper.testLoginModule(getCurrentServer(request), module, options, username, password);
161     }
162
163     public static ResourceAdapterModule[] getOutboundRAModules(PortletRequest request, String JavaDoc iface) {
164         ManagementHelper helper = getManagementHelper(request);
165         return helper.getOutboundRAModules(getCurrentServer(request), iface);
166     }
167
168     public static ResourceAdapterModule[] getOutboundRAModules(PortletRequest request, String JavaDoc[] iface) {
169         ManagementHelper helper = getManagementHelper(request);
170         return helper.getOutboundRAModules(getCurrentServer(request), iface);
171     }
172
173     public static ResourceAdapterModule[] getAdminObjectModules(PortletRequest request, String JavaDoc[] ifaces) {
174         ManagementHelper helper = getManagementHelper(request);
175         return helper.getAdminObjectModules(getCurrentServer(request), ifaces);
176     }
177
178     public static JCAManagedConnectionFactory[] getOutboundFactoriesOfType(PortletRequest request, String JavaDoc iface) {
179         ManagementHelper helper = getManagementHelper(request);
180         return helper.getOutboundFactories(getCurrentServer(request), iface);
181     }
182
183     public static JCAManagedConnectionFactory[] getOutboundFactoriesForRA(PortletRequest request, AbstractName resourceAdapterModuleName) {
184         ManagementHelper helper = getManagementHelper(request);
185         return helper.getOutboundFactories((ResourceAdapterModule) helper.getObject(resourceAdapterModuleName));
186     }
187
188     public static JCAManagedConnectionFactory[] getOutboundFactoriesForRA(PortletRequest request, AbstractName resourceAdapterModuleName, String JavaDoc iface) {
189         ManagementHelper helper = getManagementHelper(request);
190         return helper.getOutboundFactories((ResourceAdapterModule) helper.getObject(resourceAdapterModuleName), iface);
191     }
192
193     public static JCAManagedConnectionFactory[] getOutboundFactoriesForRA(PortletRequest request, ResourceAdapterModule module) {
194         ManagementHelper helper = getManagementHelper(request);
195         return helper.getOutboundFactories(module);
196     }
197
198     public static JCAManagedConnectionFactory[] getOutboundFactoriesForRA(PortletRequest request, ResourceAdapterModule module, String JavaDoc iface) {
199         ManagementHelper helper = getManagementHelper(request);
200         return helper.getOutboundFactories(module, iface);
201     }
202
203     public static JCAManagedConnectionFactory[] getOutboundFactoriesForRA(PortletRequest request, ResourceAdapterModule module, String JavaDoc[] iface) {
204         ManagementHelper helper = getManagementHelper(request);
205         return helper.getOutboundFactories(module, iface);
206     }
207
208     //todo: Create an interface for admin objects
209
public static JCAAdminObject[] getAdminObjectsForRA(PortletRequest request, ResourceAdapterModule module, String JavaDoc[] ifaces) {
210         ManagementHelper helper = getManagementHelper(request);
211         return helper.getAdminObjects(module, ifaces);
212     }
213
214     public static WebManager[] getWebManagers(PortletRequest request) {
215         return getCurrentServer(request).getWebManagers();
216     }
217
218     public static WebManager getWebManager(PortletRequest request, AbstractName managerName) {
219         ManagementHelper helper = getManagementHelper(request);
220         return (WebManager) helper.getObject(managerName);
221     }
222
223 // private static String[] namesToStrings(AbstractName[] names) {
224
// String[] result = new String[names.length];
225
// for (int i = 0; i < names.length; i++) {
226
// AbstractName name = names[i];
227
// result[i] = name.toURI().toString();
228
// }
229
// return result;
230
// }
231
//
232

233     public static WebAccessLog getWebAccessLog(PortletRequest request, AbstractName managerName, AbstractName containerName) {
234         ManagementHelper helper = getManagementHelper(request);
235         WebManager manager = (WebManager) helper.getObject(managerName);
236         return manager.getAccessLog((WebContainer) helper.getObject(containerName));
237     }
238
239     public static WebContainer getWebContainer(PortletRequest request, AbstractName containerName) {
240         ManagementHelper helper = getManagementHelper(request);
241         return (WebContainer) helper.getObject(containerName);
242     }
243
244     public static WebConnector createWebConnector(PortletRequest request, AbstractName managerName, AbstractName containerName, String JavaDoc name, String JavaDoc protocol, String JavaDoc host, int port) {
245         ManagementHelper helper = getManagementHelper(request);
246         WebManager manager = (WebManager) helper.getObject(managerName);
247         return manager.addConnector((WebContainer) helper.getObject(containerName), name, protocol, host, port);
248     }
249
250     public static WebConnector[] getWebConnectors(PortletRequest request, AbstractName managerName) {
251         ManagementHelper helper = getManagementHelper(request);
252         WebManager manager = (WebManager) helper.getObject(managerName);
253         return (WebConnector[]) manager.getConnectors();
254     }
255
256     public static WebConnector[] getWebConnectors(PortletRequest request, AbstractName managerName, String JavaDoc protocol) {
257         ManagementHelper helper = getManagementHelper(request);
258         WebManager manager = (WebManager) helper.getObject(managerName);
259         return (WebConnector[]) manager.getConnectors(protocol);
260     }
261
262     public static WebConnector getWebConnector(PortletRequest request, AbstractName connectorName) {
263         ManagementHelper helper = getManagementHelper(request);
264         return (WebConnector) helper.getObject(connectorName);
265     }
266
267     public static WebConnector[] getWebConnectorsForContainer(PortletRequest request, AbstractName managerName, AbstractName containerName, String JavaDoc protocol) {
268         ManagementHelper helper = getManagementHelper(request);
269         WebManager manager = (WebManager) helper.getObject(managerName);
270         return (WebConnector[]) manager.getConnectorsForContainer(containerName, protocol);
271     }
272
273     public static JMSBroker getJMSBroker(PortletRequest request, AbstractName brokerName) {
274         ManagementHelper helper = getManagementHelper(request);
275         return (JMSBroker) helper.getObject(brokerName);
276     }
277
278     public static JMSConnector createJMSConnector(PortletRequest request, JMSManager manager, AbstractName containerName, String JavaDoc name, String JavaDoc protocol, String JavaDoc host, int port) {
279         return manager.addConnector(getJMSBroker(request, containerName), name, protocol, host, port);
280     }
281
282     public static JMSConnector[] getJMSConnectors(PortletRequest request, AbstractName managerName) {
283         ManagementHelper helper = getManagementHelper(request);
284         JMSManager manager = (JMSManager) helper.getObject(managerName);
285         return (JMSConnector[]) manager.getConnectors();
286     }
287
288     public static JMSConnector[] getJMSConnectors(PortletRequest request, AbstractName managerName, String JavaDoc protocol) {
289         ManagementHelper helper = getManagementHelper(request);
290         JMSManager manager = (JMSManager) helper.getObject(managerName);
291         return (JMSConnector[]) manager.getConnectors(protocol);
292     }
293
294     public static JMSConnector[] getJMSConnectorsForContainer(PortletRequest request, AbstractName managerName, AbstractName brokerName) {
295         ManagementHelper helper = getManagementHelper(request);
296         JMSManager manager = (JMSManager) helper.getObject(managerName);
297         return (JMSConnector[]) manager.getConnectorsForContainer(brokerName);
298     }
299
300     public static JMSConnector[] getJMSConnectorsForContainer(PortletRequest request, AbstractName managerName, AbstractName brokerName, String JavaDoc protocol) {
301         ManagementHelper helper = getManagementHelper(request);
302         JMSManager manager = (JMSManager) helper.getObject(managerName);
303         return (JMSConnector[]) manager.getConnectorsForContainer(brokerName, protocol);
304     }
305
306     public static ResourceAdapter[] getResourceAdapters(PortletRequest request, ResourceAdapterModule module) {
307         ManagementHelper helper = getManagementHelper(request);
308         return helper.getResourceAdapters(module);
309     }
310
311     public static JCAResource[] getJCAResources(PortletRequest request, ResourceAdapter adapter) {
312         ManagementHelper helper = getManagementHelper(request);
313         return helper.getRAResources(adapter);
314     }
315
316     public static String JavaDoc getGBeanDescription(PortletRequest request, AbstractName objectName) {
317         ManagementHelper helper = getManagementHelper(request);
318         return helper.getGBeanDescription(objectName);
319     }
320
321     public static SystemLog getCurrentSystemLog(PortletRequest request) {
322         SystemLog log = (SystemLog) request.getPortletSession(true).getAttribute(SYSTEM_LOG_KEY, PortletSession.APPLICATION_SCOPE);
323         if (log == null) {
324             ManagementHelper helper = getManagementHelper(request);
325             log = helper.getSystemLog(getCurrentJVM(request));
326             request.getPortletSession().setAttribute(SYSTEM_LOG_KEY, log, PortletSession.APPLICATION_SCOPE);
327         }
328         return log;
329     }
330
331     public static GeronimoManagedBean[] getManagedBeans(PortletRequest request, Class JavaDoc intrface) {
332         ManagementHelper helper = getManagementHelper(request);
333         Object JavaDoc[] obs = helper.findByInterface(intrface);
334         GeronimoManagedBean[] results = new GeronimoManagedBean[obs.length];
335         for (int i = 0; i < results.length; i++) {
336             results[i] = (GeronimoManagedBean) obs[i];
337         }
338         return results;
339     }
340
341     public static GeronimoManagedBean getManagedBean(PortletRequest request, AbstractName name) {
342         ManagementHelper helper = getManagementHelper(request);
343         return (GeronimoManagedBean) helper.getObject(name);
344     }
345
346     public static Artifact getConfigurationFor(PortletRequest request, AbstractName objectName) {
347         ManagementHelper helper = getManagementHelper(request);
348         return helper.getConfigurationNameFor(objectName);
349     }
350
351     public static AbstractName getNameFor(PortletRequest request, Object JavaDoc component) {
352         ManagementHelper helper = getManagementHelper(request);
353         return helper.getNameFor(component);
354     }
355
356     public static File JavaDoc getRepositoryEntry(PortletRequest request, String JavaDoc repositoryURI) {
357         J2EEServer server = getCurrentServer(request);
358         Repository[] repos = server.getRepositories();
359         Artifact uri = Artifact.create(repositoryURI);
360         if (!uri.isResolved()) {
361             Artifact[] all = server.getConfigurationManager().getArtifactResolver().queryArtifacts(uri);
362             if (all.length == 0) {
363                 return null;
364             } else {
365                 uri = all[all.length - 1];
366             }
367         }
368         for (int i = 0; i < repos.length; i++) {
369             Repository repo = repos[i];
370             if (repo.contains(uri)) {
371                 return repo.getLocation(uri);
372             }
373         }
374         return null;
375     }
376
377     public static J2EEDeployedObject getModule(PortletRequest request, Artifact configuration) {
378         ManagementHelper helper = getManagementHelper(request);
379         return helper.getModuleForConfiguration(configuration);
380     }
381
382     public static ConfigurationData[] getConfigurations(PortletRequest request, ConfigurationModuleType type, boolean includeChildModules) {
383         ManagementHelper helper = getManagementHelper(request);
384         return helper.getConfigurations(type, includeChildModules);
385     }
386     
387     public static Object JavaDoc[] getGBeansImplementing(PortletRequest request, Class JavaDoc iface) {
388         ManagementHelper helper = getManagementHelper(request);
389         return helper.getGBeansImplementing(iface);
390     }
391
392     /**
393      * This methods adds a GBean to an existing configuration.
394      * @param request PortletRequest object to get hold of ManagementHelper
395      * @param configID The configuration to add the GBean to.
396      * @param gbean The data representing the GBean to add.
397      * @param start If true, the GBean should be started as part of this call.
398      */

399     public static void addGBeanToConfiguration(PortletRequest request, Artifact configID, GBeanData gbean, boolean start) {
400         ManagementHelper helper = getManagementHelper(request);
401         helper.addGBeanToConfiguration(configID, gbean, start);
402     }
403
404     /**
405      * Looks up the context prefix used by the portal, even if the thing running
406      * is in one of the portlets. We're kind of hacking our way there, but hey,
407      * it beats hardcoding.
408      */

409     public static String JavaDoc getConsoleFrameworkServletPath(HttpServletRequest JavaDoc request) {
410         String JavaDoc contextPath;
411         Object JavaDoc response = request.getAttribute("javax.portlet.response");
412         if (response != null && response instanceof RenderResponse) { // request came from a portlet
413
String JavaDoc pathInfo = request.getPathInfo();
414             String JavaDoc portletPath = Pattern.compile("/").split(pathInfo)[1];
415             contextPath = ((RenderResponse) response).createRenderURL().toString();
416             contextPath = Pattern.compile("/" + portletPath).split(contextPath)[0];
417         } else { // request did not come from a portlet
418
contextPath = request.getContextPath();
419         }
420         return contextPath;
421     }
422 }
423
Popular Tags