001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.console.jndiview; 018 019 import org.apache.geronimo.kernel.Kernel; 020 import org.apache.geronimo.gbean.AbstractName; 021 import javax.naming.Context; 022 023 import java.io.IOException; 024 import java.util.ArrayList; 025 import java.util.Iterator; 026 import java.util.Hashtable; 027 import java.util.Map; 028 import java.util.HashMap; 029 import java.util.List; 030 import java.util.Set; 031 import java.util.Collections; 032 033 import org.apache.geronimo.console.BasePortlet; 034 import org.apache.geronimo.console.util.StringTree; 035 036 import javax.portlet.ActionRequest; 037 import javax.portlet.ActionResponse; 038 import javax.portlet.PortletConfig; 039 import javax.portlet.PortletException; 040 import javax.portlet.PortletRequestDispatcher; 041 import javax.portlet.RenderRequest; 042 import javax.portlet.RenderResponse; 043 import javax.portlet.WindowState; 044 045 public class JNDIViewPortlet extends BasePortlet { 046 047 private static final String NORMALVIEW_JSP = "/WEB-INF/view/jndiview/view.jsp"; 048 049 private static final String MAXIMIZEDVIEW_JSP = "/WEB-INF/view/jndiview/view.jsp"; 050 051 private static final String HELPVIEW_JSP = "/WEB-INF/view/jndiview/help.jsp"; 052 053 private PortletRequestDispatcher normalView; 054 055 private PortletRequestDispatcher maximizedView; 056 057 private PortletRequestDispatcher helpView; 058 059 public void processAction(ActionRequest actionRequest, 060 ActionResponse actionResponse) throws PortletException, IOException { 061 } 062 063 protected void doView(RenderRequest renderRequest, 064 RenderResponse renderResponse) throws IOException, PortletException { 065 if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) { 066 return; 067 } 068 069 try { 070 renderRequest.getPortletSession().setAttribute("jndiTree", 071 getJSONTrees()); 072 } catch (Exception ex) { 073 throw new PortletException(ex); 074 } 075 if (WindowState.NORMAL.equals(renderRequest.getWindowState())) { 076 normalView.include(renderRequest, renderResponse); 077 } else { 078 maximizedView.include(renderRequest, renderResponse); 079 } 080 } 081 082 protected void doHelp(RenderRequest renderRequest, 083 RenderResponse renderResponse) throws PortletException, IOException { 084 helpView.include(renderRequest, renderResponse); 085 } 086 087 public void init(PortletConfig portletConfig) throws PortletException { 088 super.init(portletConfig); 089 normalView = portletConfig.getPortletContext().getRequestDispatcher( 090 NORMALVIEW_JSP); 091 maximizedView = portletConfig.getPortletContext().getRequestDispatcher( 092 MAXIMIZEDVIEW_JSP); 093 helpView = portletConfig.getPortletContext().getRequestDispatcher( 094 HELPVIEW_JSP); 095 096 } 097 098 public void destroy() { 099 normalView = null; 100 maximizedView = null; 101 helpView = null; 102 super.destroy(); 103 } 104 105 public String getJSONTrees() throws Exception { 106 List list = getContextTree(); 107 if (list == null) 108 return "[]"; 109 110 StringBuffer stb = new StringBuffer(); 111 stb.append("["); 112 for (int i = 0; i < list.size(); i++) { 113 StringTree node = (StringTree) list.get(i); 114 if (i != 0) 115 stb.append(","); 116 stb.append(node.toJSONObject("" + i)); 117 } 118 stb.append("]"); 119 return stb.toString(); 120 } 121 122 private void buildEJBModule(Kernel kernel, List arryList, Hashtable entApp) 123 throws Exception { 124 Map query = new HashMap(); 125 query.put("j2eeType", "EJBModule"); 126 Set setEnt = kernel.listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery(null, query)); 127 Iterator iterator = setEnt.iterator(); 128 129 while (iterator.hasNext()) { 130 AbstractName gb = (AbstractName) iterator.next(); 131 StringTree ejbModule = new StringTree(gb.getNameProperty("name")); 132 133 if (gb.getNameProperty("J2EEApplication") == null 134 || gb.getNameProperty("J2EEApplication").equals("null")) { 135 StringTree treeEnt = (StringTree) entApp.get("EJBModule"); 136 treeEnt.addChild(ejbModule); 137 } else { 138 StringTree treeEnt = (StringTree) entApp.get(gb 139 .getNameProperty("J2EEApplication")); 140 treeEnt = treeEnt.findNode("EJBModule"); 141 treeEnt.addChild(ejbModule); 142 } 143 Map queryEnt = new HashMap(); 144 StringTree entityBean = new StringTree("EntityBeans"); 145 ejbModule.addChild(entityBean); 146 queryEnt.put("j2eeType", "EntityBean"); 147 queryEnt.put("EJBModule", gb.getNameProperty("name")); 148 queryEnt.put("J2EEApplication", gb 149 .getNameProperty("J2EEApplication")); 150 Set setEntBean = kernel 151 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 152 null, queryEnt)); 153 154 Iterator iterEntBean = setEntBean.iterator(); 155 156 while (iterEntBean.hasNext()) { 157 AbstractName gbEntBean = (AbstractName) iterEntBean.next(); 158 StringTree beanNode = new StringTree(gbEntBean 159 .getNameProperty("name")); 160 entityBean.addChild(beanNode); 161 Context jndi = (Context) kernel.getAttribute(gbEntBean, 162 "componentContext"); 163 buildContext(beanNode, jndi, "java:comp"); 164 } 165 166 queryEnt = new HashMap(); 167 StringTree sessionBean = new StringTree("SessionBeans"); 168 ejbModule.addChild(sessionBean); 169 queryEnt.put("j2eeType", "StatelessSessionBean"); 170 queryEnt.put("EJBModule", gb.getNameProperty("name")); 171 queryEnt.put("J2EEApplication", gb 172 .getNameProperty("J2EEApplication")); 173 Set setSessionBean = kernel 174 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 175 null, queryEnt)); 176 177 Iterator iterSessionBean = setSessionBean.iterator(); 178 179 while (iterSessionBean.hasNext()) { 180 AbstractName gbSessionBean = (AbstractName) iterSessionBean 181 .next(); 182 StringTree beanNode = new StringTree(gbSessionBean 183 .getNameProperty("name")); 184 sessionBean.addChild(beanNode); 185 Context jndi = (Context) kernel.getAttribute(gbSessionBean, 186 "componentContext"); 187 buildContext(beanNode, jndi, "java:comp"); 188 } 189 190 queryEnt = new HashMap(); 191 queryEnt.put("j2eeType", "StatefullSessionBean"); 192 queryEnt.put("EJBModule", gb.getNameProperty("name")); 193 queryEnt.put("J2EEApplication", gb 194 .getNameProperty("J2EEApplication")); 195 setSessionBean = kernel 196 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 197 null, queryEnt)); 198 199 iterSessionBean = setSessionBean.iterator(); 200 201 while (iterSessionBean.hasNext()) { 202 AbstractName gbSessionBean = (AbstractName) iterSessionBean 203 .next(); 204 StringTree beanNode = new StringTree(gbSessionBean 205 .getNameProperty("name")); 206 sessionBean.addChild(beanNode); 207 Context jndi = (Context) kernel.getAttribute(gbSessionBean, 208 "componentContext"); 209 buildContext(beanNode, jndi, "java:comp"); 210 } 211 } 212 } 213 214 private void buildWebModule(Kernel kernel, List arryList, Hashtable entApp) 215 throws Exception { 216 Map query = new HashMap(); 217 query.put("j2eeType", "WebModule"); 218 Set setEnt = kernel 219 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 220 null, query)); 221 Iterator iterator = setEnt.iterator(); 222 223 while (iterator.hasNext()) { 224 225 AbstractName gb = (AbstractName) iterator.next(); 226 StringTree webModule = new StringTree(gb.getNameProperty("name")); 227 228 if (gb.getNameProperty("J2EEApplication") == null 229 || gb.getNameProperty("J2EEApplication").equals("null")) { 230 StringTree treeEnt = (StringTree) entApp.get("WebModule"); 231 treeEnt.addChild(webModule); 232 } else { 233 StringTree treeEnt = (StringTree) entApp.get(gb 234 .getNameProperty("J2EEApplication")); 235 treeEnt = treeEnt.findNode("WebModule"); 236 treeEnt.addChild(webModule); 237 } 238 239 Map map = (Map) kernel.getAttribute(gb, "componentContext"); 240 String[] servlets = (String[]) kernel.getAttribute(gb, "servlets"); 241 242 StringTree servletsNode = null; 243 StringTree jspNode = null; 244 245 for (int i = 0; i < servlets.length; i++) { 246 String servlet = servlets[i]; 247 servlet = servlet.substring(servlet.indexOf("name=") + 5); 248 if (servlet.indexOf(",") != -1) 249 servlet = servlet.substring(0, servlet.indexOf(",")); 250 if (!servlet.equals("jsp") && servlet.startsWith("jsp.")) { 251 if (servletsNode == null) { 252 servletsNode = new StringTree("Servlets"); 253 webModule.addChild(servletsNode); 254 } 255 if (jspNode == null) { 256 jspNode = new StringTree("JSP"); 257 servletsNode.addChild(jspNode); 258 } 259 jspNode.addChild(new StringTree(servlet.substring(4))); 260 } else if (!servlet.equals("jsp")) { 261 if (servletsNode == null) { 262 servletsNode = new StringTree("Servlets"); 263 webModule.addChild(servletsNode); 264 } 265 servletsNode.addChild(new StringTree(servlet)); 266 } 267 } 268 Iterator contexts = map.keySet().iterator(); 269 while (contexts.hasNext()) 270 webModule.addChild(new StringTree("java:comp/" + contexts.next())); 271 } 272 } 273 274 private void buildResourceModule(Kernel kernel, List arryList, 275 Hashtable entApp) throws Exception { 276 Map query = new HashMap(); 277 query.put("j2eeType", "ResourceAdapterModule"); 278 Set setEnt = kernel 279 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 280 null, query)); 281 Iterator iterator = setEnt.iterator(); 282 283 while (iterator.hasNext()) { 284 AbstractName gb = (AbstractName) iterator.next(); 285 String resourceModule = gb.getNameProperty("name"); 286 if (gb.getNameProperty("J2EEApplication") == null 287 || gb.getNameProperty("J2EEApplication").equals("null")) { 288 StringTree treeEnt = (StringTree) entApp 289 .get("ResourceAdapterModule"); 290 treeEnt.addChild(new StringTree(resourceModule)); 291 } else { 292 StringTree treeEnt = (StringTree) entApp.get(gb 293 .getNameProperty("J2EEApplication")); 294 treeEnt = treeEnt.findNode("ResourceAdapterModule"); 295 treeEnt.addChild(new StringTree(resourceModule)); 296 } 297 } 298 } 299 300 private void buildAppClientModule(Kernel kernel, List arryList, 301 Hashtable entApp) throws Exception { 302 Map query = new HashMap(); 303 query.put("j2eeType", "AppClientModule"); 304 Set setEnt = kernel 305 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 306 null, query)); 307 Iterator iterator = setEnt.iterator(); 308 309 while (iterator.hasNext()) { 310 AbstractName gb = (AbstractName) iterator.next(); 311 String appClienteModule = gb.getNameProperty("name"); 312 if (gb.getNameProperty("J2EEApplication") == null 313 || gb.getNameProperty("J2EEApplication").equals("null")) { 314 StringTree treeEnt = (StringTree) entApp.get("AppClientModule"); 315 treeEnt.addChild(new StringTree(appClienteModule)); 316 } else { 317 StringTree treeEnt = (StringTree) entApp.get(gb 318 .getNameProperty("J2EEApplication")); 319 treeEnt = treeEnt.findNode("AppClientModule"); 320 treeEnt.addChild(new StringTree(appClienteModule)); 321 } 322 } 323 } 324 325 public void buildContext(StringTree node, Context ctx, String nodeCurr) { 326 try { 327 javax.naming.NamingEnumeration enumName = ctx.list(""); 328 while (enumName.hasMoreElements()) { 329 javax.naming.NameClassPair pair = (javax.naming.NameClassPair) enumName 330 .next(); 331 Object obj = ctx.lookup(pair.getName()); 332 if (obj instanceof Context) { 333 buildContext(node, (Context) obj, nodeCurr + "/" 334 + pair.getName()); 335 } else { 336 node.addChild(new StringTree(nodeCurr + "/" + pair.getName())); 337 } 338 } 339 } catch (Exception e) { 340 e.printStackTrace(); 341 } 342 } 343 344 private void buildGlobal(StringTree tree, Context context, String parent) 345 throws Exception { 346 if (parent == null) 347 parent = ""; 348 if (!parent.equals("")) 349 parent = parent + "/"; 350 javax.naming.NamingEnumeration enum1 = context.list(""); 351 while (enum1.hasMoreElements()) { 352 javax.naming.NameClassPair pair = (javax.naming.NameClassPair) enum1 353 .next(); 354 Object obj = context.lookup(pair.getName()); 355 if (obj instanceof Context) { 356 buildGlobal(tree, (Context) obj, parent + pair.getName()); 357 } else { 358 tree.addChild(new StringTree(parent + pair.getName())); 359 } 360 } 361 } 362 363 public List getContextTree() throws Exception { 364 List arryList = new ArrayList(); 365 Hashtable entApp = new Hashtable(); 366 367 StringTree treeGlobal = new StringTree("Global Context"); 368 arryList.add(treeGlobal); 369 buildGlobal(treeGlobal, 370 org.apache.xbean.naming.global.GlobalContextManager 371 .getGlobalContext(), ""); 372 373 StringTree tree = new StringTree("Enterprise Applications"); 374 arryList.add(tree); 375 376 StringTree treeMod = new StringTree("EJBModule"); 377 entApp.put("EJBModule", treeMod); 378 arryList.add(treeMod); 379 380 treeMod = new StringTree("WebModule"); 381 entApp.put("WebModule", treeMod); 382 arryList.add(treeMod); 383 384 treeMod = new StringTree("ResourceAdapterModule"); 385 entApp.put("ResourceAdapterModule", treeMod); 386 arryList.add(treeMod); 387 388 treeMod = new StringTree("AppClientModule"); 389 entApp.put("AppClientModule", treeMod); 390 arryList.add(treeMod); 391 392 org.apache.geronimo.kernel.Kernel kernel = org.apache.geronimo.kernel.KernelRegistry 393 .getSingleKernel(); 394 395 Set setEnt = kernel 396 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 397 null, 398 Collections.EMPTY_MAP, 399 org.apache.geronimo.j2ee.management.impl.J2EEApplicationImpl.class 400 .getName())); 401 Iterator iterator = setEnt.iterator(); 402 while (iterator.hasNext()) { 403 org.apache.geronimo.gbean.AbstractName gb = (org.apache.geronimo.gbean.AbstractName) iterator 404 .next(); 405 StringTree curr = new StringTree(gb.getNameProperty("name")); 406 tree.addChild(curr); 407 entApp.put(gb.getNameProperty("name"), curr); 408 409 StringTree temp = new StringTree("EJBModule"); 410 curr.addChild(temp); 411 412 temp = new StringTree("WebModule"); 413 curr.addChild(temp); 414 415 temp = new StringTree("ResourceAdapterModule"); 416 curr.addChild(temp); 417 418 temp = new StringTree("AppClientModule"); 419 curr.addChild(temp); 420 } 421 422 buildEJBModule(kernel, arryList, entApp); 423 buildWebModule(kernel, arryList, entApp); 424 buildResourceModule(kernel, arryList, entApp); 425 buildAppClientModule(kernel, arryList, entApp); 426 return arryList; 427 } 428 }