| 1 25 26 package org.objectweb.jonas.webapp.jonasadmin; 27 28 import java.net.URLEncoder ; 29 import java.util.ArrayList ; 30 import java.util.Collection ; 31 import java.util.Collections ; 32 import java.util.HashMap ; 33 import java.util.Iterator ; 34 import java.util.List ; 35 import java.util.StringTokenizer ; 36 37 import javax.management.MBeanAttributeInfo ; 38 import javax.management.MBeanInfo ; 39 import javax.management.MBeanOperationInfo ; 40 import javax.management.MalformedObjectNameException ; 41 import javax.management.ObjectName ; 42 import javax.servlet.http.HttpServletRequest ; 43 44 import org.allesta.wsabi.j2ee.Handler; 45 import org.allesta.wsabi.j2ee.PortComponent; 46 import org.allesta.wsabi.j2ee.WebServiceDescription; 47 import org.allesta.wsabi.j2ee.provider.GenericDomainCapableProvider; 48 import org.allesta.wsabi.j2ee.provider.jonas.JonasProvider; 49 import org.apache.struts.Globals; 50 import org.apache.struts.action.ActionServlet; 51 import org.apache.struts.util.MessageResources; 52 import org.objectweb.jonas.jmx.CatalinaObjectName; 53 import org.objectweb.jonas.jmx.J2eeObjectName; 54 import org.objectweb.jonas.jmx.JonasManagementRepr; 55 import org.objectweb.jonas.jmx.JonasObjectName; 56 import org.objectweb.jonas.jmx.JoramObjectName; 57 import org.objectweb.jonas.webapp.jonasadmin.catalina.ConnectorItem; 58 import org.objectweb.jonas.webapp.jonasadmin.catalina.ConnectorItemByPort; 59 import org.objectweb.jonas.webapp.jonasadmin.common.BeanComparator; 60 import org.objectweb.jonas.webapp.jonasadmin.joramplatform.ItemDestination; 61 import org.objectweb.jonas.webapp.jonasadmin.logging.LoggerItem; 62 import org.objectweb.jonas.webapp.jonasadmin.mbean.J2eeMbeanItem; 63 import org.objectweb.jonas.webapp.jonasadmin.mbean.MbeanItem; 64 import org.objectweb.jonas.webapp.jonasadmin.mbean.OwnerMbeanItem; 65 import org.objectweb.jonas.webapp.jonasadmin.service.container.ContainerItem; 66 import org.objectweb.jonas.webapp.jonasadmin.service.container.ContainerItemByFile; 67 import org.objectweb.jonas.webapp.jonasadmin.service.container.WebAppItem; 68 import org.objectweb.jonas.webapp.jonasadmin.service.container.WebAppItemByPathContext; 69 import org.objectweb.jonas.webapp.jonasadmin.service.ejb.EjbItem; 70 import org.objectweb.jonas.webapp.jonasadmin.service.ejb.EjbItemByNameComparator; 71 import org.objectweb.jonas.webapp.jonasadmin.service.resource.ResourceItem; 72 import org.objectweb.jonas.webapp.jonasadmin.service.resource.ResourceItemByFile; 73 import org.objectweb.jonas.webapp.taglib.TreeBuilder; 74 import org.objectweb.jonas.webapp.taglib.TreeControl; 75 import org.objectweb.jonas.webapp.taglib.TreeControlNode; 76 77 85 public class JonasTreeBuilder implements TreeBuilder { 86 87 89 91 100 public void buildTree(TreeControl treeControl, ActionServlet servlet 101 , HttpServletRequest request) { 102 try { 103 TreeControlNode rootNode = treeControl.getRoot(); 104 MessageResources resources = (MessageResources) servlet.getServletContext(). 105 getAttribute(Globals.MESSAGES_KEY); 106 getDomain(rootNode, resources, request); 107 } 108 catch (Throwable t) { 109 t.printStackTrace(System.out); 110 } 111 } 112 113 115 124 protected void getDomain(TreeControlNode p_RootNode, MessageResources p_Resources 125 , HttpServletRequest p_Request) 126 throws Exception { 127 WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. 129 SESSION_NAME); 130 String sDomain = oWhere.getCurrentDomain().toString(); String sDomainName = oWhere.getCurrentDomainName(); String sNodeLabel = p_Resources.getMessage("treenode.jonas.domain") + " ( " + sDomainName 133 + " )"; 134 TreeControlNode domainNode = new TreeControlNode("domain", "icon/domain_jonas.gif" 135 , sNodeLabel, "EditDomain.do?select=" + URLEncoder.encode(sDomain, "UTF-8"), "content", true); 136 p_RootNode.addChild(domainNode); 137 if (JonasAdminJmx.hasMBeanName(JonasObjectName.discoveryService()) && isMaster()) { 139 getDomainDeploy(domainNode, p_Resources, p_Request); 140 } 141 getServer(domainNode, p_Resources, p_Request, sDomainName); 142 getJoramPlatform(domainNode, p_Resources, p_Request); 143 getMBeans(domainNode, p_Resources); 144 } 145 146 150 protected boolean isMaster() { 151 ObjectName oObjectName = JonasObjectName.discoveryService(); 152 Boolean result = (Boolean ) JonasManagementRepr.getAttribute(oObjectName, "IsDiscoveryMaster"); 153 return result.booleanValue(); 154 } 155 156 166 protected void getDomainDeploy(TreeControlNode p_DomainNode, MessageResources p_Resources 167 , HttpServletRequest p_Request) 168 throws Exception { 169 170 TreeControlNode nodeDeployments = new TreeControlNode(p_DomainNode.getName() 171 + WhereAreYou.NODE_SEPARATOR + "deployments", "icon/deployDomainManage.gif" 172 , p_Resources.getMessage("treenode.jonas.server.deployments"), null, "content", true); 173 174 p_DomainNode.addChild(0, nodeDeployments); 175 if (JonasAdminJmx.hasMBeanName(JonasObjectName.earService()) == true) { 176 getDomainDeploymentEar(nodeDeployments, p_Resources); 177 } 178 if (JonasAdminJmx.hasMBeanName(JonasObjectName.ejbService()) == true) { 179 getDomainDeploymentEjb(nodeDeployments, p_Resources); 180 } 181 if (JonasAdminJmx.hasMBeanName(JonasObjectName.webContainerService()) == true) { 182 getDomainDeploymentWebAppli(nodeDeployments, p_Resources); 183 } 184 if (JonasAdminJmx.hasMBeanName(JonasObjectName.resourceService()) == true) { 185 getDomainDeploymentRar(nodeDeployments, p_Resources); 186 } 187 } 188 189 197 protected void getDomainDeploymentEar(TreeControlNode p_NodeDeployments, MessageResources p_Resources) 198 throws Exception { 199 TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() 201 + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_EAR, "icon/deployDomain_ear.gif" 202 , p_Resources.getMessage("treenode.jonas.server.deployments." 203 + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_EAR) 204 , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_EAR, "content", false); 205 p_NodeDeployments.addChild(oNode); 206 } 207 208 216 protected void getDomainDeploymentEjb(TreeControlNode p_NodeDeployments, MessageResources p_Resources) 217 throws Exception { 218 TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() 220 + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_JAR, "icon/deployDomain_jar.gif" 221 , p_Resources.getMessage("treenode.jonas.server.deployments." 222 + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_JAR) 223 , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_JAR, "content", false); 224 p_NodeDeployments.addChild(oNode); 225 226 } 229 230 238 protected void getDomainDeploymentWebAppli(TreeControlNode p_NodeDeployments 239 , MessageResources p_Resources) 240 throws Exception { 241 TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() 243 + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_WAR, "icon/deployDomain_war.gif" 244 , p_Resources.getMessage("treenode.jonas.server.deployments." 245 + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_WAR) 246 , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_WAR, "content", false); 247 p_NodeDeployments.addChild(oNode); 248 } 249 250 258 protected void getDomainDeploymentRar(TreeControlNode p_NodeDeployments, MessageResources p_Resources) 259 throws Exception { 260 TreeControlNode oNode = new TreeControlNode(p_NodeDeployments.getName() 262 + WhereAreYou.NODE_SEPARATOR + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_RAR, "icon/deployDomain_rar.gif" 263 , p_Resources.getMessage("treenode.jonas.server.deployments." 264 + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_RAR) 265 , "EditDomainDeploy.do?type=" + WhereAreYou.DOMAIN_DEPLOYMENT_STRING_RAR, "content", false); 266 p_NodeDeployments.addChild(oNode); 267 } 268 269 278 protected void getServer(TreeControlNode p_DomainNode, MessageResources p_Resources 279 , HttpServletRequest p_Request, String p_DomainName) 280 throws Exception { 281 288 WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. 289 SESSION_NAME); 290 String sServer = oWhere.getCurrentJonasServer().toString(); 291 String sServerName = oWhere.getCurrentJonasServerName(); 292 String sNodeLabel = p_Resources.getMessage("treenode.jonas.server") + " ( " + sServerName + " )"; 293 TreeControlNode serverNode = new TreeControlNode(p_DomainNode.getName() 294 + WhereAreYou.NODE_SEPARATOR + sServerName, "icon/BalJonasTree.gif", sNodeLabel 295 , "EditJonasServer.do?select=" + URLEncoder.encode(sServer, "UTF-8"), "content", true); 296 p_DomainNode.addChild(serverNode); 297 getMonitoring(serverNode, p_Resources); 299 getLogging(serverNode, p_Resources, p_Request); 300 getProtocols(serverNode, p_Resources, p_Request); 301 getServices(serverNode, p_Resources, p_Request, p_DomainName, sServerName); 302 getDeployments(serverNode, p_Resources); 303 getResources(serverNode, p_Resources); 304 getSecurity(serverNode, p_Resources, p_Request); 305 } 306 307 316 protected void getMonitoring(TreeControlNode p_ServerNode, MessageResources p_Resources) 317 throws Exception { 318 TreeControlNode node = new TreeControlNode(p_ServerNode.getName() 320 + WhereAreYou.NODE_SEPARATOR + "monitoring", "icon/monitoring.gif" 321 , p_Resources.getMessage("treenode.jonas.server.monitoring"), "EditMonitoring.do" 322 , "content", false); 323 p_ServerNode.addChild(node); 324 } 325 326 335 protected void getLogging(TreeControlNode p_ServerNode, MessageResources p_Resources 336 , HttpServletRequest p_Request) 337 throws Exception { 338 TreeControlNode node = new TreeControlNode(p_ServerNode.getName() 340 + WhereAreYou.NODE_SEPARATOR + "logging", "icon/loggers.gif" 341 , p_Resources.getMessage("treenode.jonas.server.logging"), "ListLoggers.do", "content", false); 342 p_ServerNode.addChild(node); 343 getLoggers(node, p_Resources, p_Request); 345 } 346 347 356 public void getLoggers(TreeControlNode p_LoggingNode, MessageResources p_Resources 357 , HttpServletRequest p_Request) 358 throws Exception { 359 WhereAreYou oWhere = (WhereAreYou) p_Request.getSession().getAttribute(WhereAreYou. 361 SESSION_NAME); 362 ArrayList al = JonasAdminJmx.getLoggers(p_Resources, oWhere, true); 364 LoggerItem oLog; 366 String sIcon = "icon/loggers.gif"; 367 String rootNodeName = p_LoggingNode.getName(); 368 String nodeName; 369 for (int i = 0; i < al.size(); i++) { 370 oLog = (LoggerItem) al.get(i); 371 if (LoggerItem.LOGGER_JONAS.equals(oLog.getType())) { 372 sIcon = "icon/logger_jonas.gif"; 373 nodeName = rootNodeName + WhereAreYou.NODE_SEPARATOR + LoggerItem.LOGGER_JONAS; 374 } else { 375 sIcon = "icon/logger_http.gif"; 376 nodeName = rootNodeName 377 + WhereAreYou.NODE_SEPARATOR 378 + oLog.getType() 379 + WhereAreYou.NODE_SEPARATOR 380 + oLog.getContainerName(); 381 } 382 TreeControlNode node = new TreeControlNode(nodeName, sIcon 384 , oLog.getName() 385 , oLog.getForward() 386 , "content", false); 387 p_LoggingNode.addChild(node); 388 } 389 } 390 391 399 protected void getServices(TreeControlNode p_ServerNode, MessageResources p_Resources 400 , HttpServletRequest p_Request, String p_DomainName, String p_ServerName) 401 throws Exception { 402 TreeControlNode nodeAllServices = new TreeControlNode(p_ServerNode.getName() 404 + WhereAreYou.NODE_SEPARATOR + "services", "icon/services.gif" 405 , p_Resources.getMessage("treenode.jonas.server.services"), "ListServices.do" 406 , "content", true); 407 p_ServerNode.addChild(nodeAllServices); 408 409 if (JonasAdminJmx.hasMBeanName(JonasObjectName.earService()) == true) { 411 getServiceApp(nodeAllServices, p_Resources, p_DomainName, p_ServerName); 412 } 413 if (JonasAdminJmx.hasMBeanName(JonasObjectName.ejbService()) == true) { 414 getServiceEjbContainer(nodeAllServices, p_Resources, p_DomainName, p_ServerName); 415 } 416 if (JonasAdminJmx.hasMBeanName(JonasObjectName.webContainerService()) == true) { 417 getServiceWeb(nodeAllServices, p_Resources, p_Request, p_DomainName, p_ServerName); 418 } 419 if (JonasAdminJmx.hasMBeanName(JonasObjectName.databaseService()) == true) { 420 getServiceDatabase(nodeAllServices, p_Resources, p_DomainName, p_ServerName); 421 } 422 if (JonasAdminJmx.hasMBeanName(JonasObjectName.resourceService()) == true) { 423 getServiceResourceAdapter(nodeAllServices, p_Resources, p_DomainName, p_ServerName); 424 } 425 if (JonasAdminJmx.hasMBeanName(JonasObjectName.transactionService()) == true) { 426 getServiceTransaction(nodeAllServices, p_Resources, p_DomainName, p_ServerName); 427 } 428 if (JonasAdminJmx.hasMBeanName(JonasObjectName.jmsService()) == true) { 429 getServiceJms(nodeAllServices, p_Resources, p_DomainName, p_ServerName); 430 } 431 if (JonasAdminJmx.hasMBeanName(JonasObjectName.mailService()) == true) { 432 getServiceMail(nodeAllServices, p_Resources, p_Request, p_DomainName, p_ServerName); 433 } 434 if (JonasAdminJmx.hasMBeanName(JonasObjectName.securityService()) == true) { 435 getServiceSecurity(nodeAllServices, p_Resources, p_DomainName, p_ServerName); 436 } 437 if (JonasAdminJmx.hasMBeanName(JonasObjectName.discoveryService()) == true) { 438 getServiceDiscovery(nodeAllServices, p_Resources, p_DomainName, p_ServerName); 439 } 440 if (JonasAdminJmx.hasMBeanName(JonasObjectName.wsService()) == true) { 441 getServiceWebService(nodeAllServices, p_Resources, p_Request, p_DomainName, p_ServerName); 442 } 443 } 444 445 453 protected void getServiceApp(TreeControlNode p_NodeServices, MessageResources p_Resources, String p_DomainName, String p_ServerName) 454 throws Exception { 455 TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() 457 + WhereAreYou.NODE_SEPARATOR + "ear", "icon/service_application.gif" 458 , p_Resources.getMessage("treenode.jonas.server.services.ear") 459 , "ListAppContainers.do" 460 , "content", false); 461 p_NodeServices.addChild(nodeService); 462 463 getAppContainers(nodeService, p_Resources, p_DomainName, p_ServerName); 465 } 466 467 475 public void getAppContainers(TreeControlNode p_NodeParent, MessageResources p_Resources, String p_DomainName, String p_ServerName) 476 throws Exception { 477 String sPath; 478 String sFile; 479 String sNodeName; 480 String sName; 481 ArrayList al = new ArrayList (); 482 483 ObjectName ons = J2eeObjectName.J2EEApplications(p_DomainName, p_ServerName); 485 Iterator itNames = JonasManagementRepr.queryNames(ons).iterator(); 486 while (itNames.hasNext()) { 487 ObjectName it_on = (ObjectName ) itNames.next(); 488 sPath = (String ) JonasManagementRepr.getAttribute(it_on, "earUrl").toString(); 489 sFile = JonasAdminJmx.extractFilename(sPath); 490 sNodeName = p_NodeParent.getName() + WhereAreYou.NODE_SEPARATOR + sFile; 491 sName = it_on.getKeyProperty("name"); 492 if (sFile != null) { 493 al.add(new ContainerItem(sFile, sPath, sNodeName, it_on.toString(), sName)); 494 } 495 } 496 Collections.sort(al, new ContainerItemByFile()); 498 ContainerItem oItem; 500 for (int i = 0; i < al.size(); i++) { 501 oItem = (ContainerItem) al.get(i); 502 TreeControlNode node = new TreeControlNode(oItem.getNodeName(), "icon/ear.gif" 503 , oItem.getFile(), "EditEar.do?select=" + oItem.getObjectName(), "content", false); 504 p_NodeParent.addChild(node); 505 } 506 } 507 508 517 protected void getServiceEjbContainer(TreeControlNode p_NodeServices 518 , MessageResources p_Resources, String p_DomainName, String p_ServerName) 519 throws Exception { 520 TreeControlNode nodeService = new TreeControlNode(p_NodeServices.getName() 522 + WhereAreYou.NODE_SEPARATOR + "ejbContainers", "icon/service_ejb.gif" 523 , p_Resources.getMessage("treenode.jonas.server.services.ejbContainers") 524 , "ListContainers.do" 525 , "content", false); 526 p_NodeServices.addChild(nodeService); 527 getContainers(nodeService, p_Resources, p_DomainName, p_ServerName); 529 } 530 531 539 public void getContainers(TreeControlNode p_NodeParent, MessageResources p_Resources, String p_DomainName, String p_ServerName) 540 throws Exception { 541 String sPath; 542 String sFile; 543 String sName; 544 String sNodeName; 545 ObjectName onContainer; 546 ArrayList al = new ArrayList (); 547 548 Iterator itNames = JonasManagementRepr.queryNames(J2eeObjectName.getEJBModules(p_DomainName, p_ServerName)).iterator(); 550 while (itNames.hasNext()) { 551 ObjectName it_on = (ObjectName ) itNames.next(); 552 sPath = (String ) JonasManagementRepr.getAttribute(it_on, "fileName"); 553 sFile = JonasAdminJmx.extractFilename(sPath); 554 sNodeName = p_NodeParent.getName() + WhereAreYou.NODE_SEPARATOR + sFile; 555 sName = it_on.getKeyProperty("name"); 556 if (sFile != null) { 557 al.add(new ContainerItem(sFile, sPath, sNodeName, it_on.toString(), sName)); 558 } 559 } 560 561 Collections.sort(al, new ContainerItemByFile()); 563 ContainerItem oItem; 565 for (int i = 0; i < al.size(); i++) { 566 oItem = (ContainerItem) al.get(i); 567 TreeControlNode node = new TreeControlNode(oItem.getNodeName(), "icon/jar.gif" 568 , oItem.getFile(), "EditContainer.do?select=" + oItem.getObjectName(), "content", false); 569 p_NodeParent.addChild(node); 570 getEjbs(node, p_Resources, oItem.getPath(), p_DomainName, p_ServerName, oItem.getName()); 572 } 573 } 574 575 584 protected void getEjbs(TreeControlNode p_NodeParent, MessageResources p_Resources 585 , String p_Filename, String p_DomainName, String p_ServerName, String p_moduleName) 586 throws Exception { 587 Iterator itNames; 589 ObjectName on; 590 ArrayList al = new ArrayList (); 591 592 on = J2eeObjectName.getEntityBeans(p_DomainName, p_moduleName, p_ServerName); 593 594 itNames = JonasAdminJmx.getListMbean(on).iterator(); 595 while (itNames.hasNext()) { 596 al.add(new EjbItem((ObjectName ) itNames.next())); 597 } 598 on = J2eeObjectName.getStatefulSessionBeans(p_DomainName, p_moduleName, p_ServerName); 599 itNames = JonasAdminJmx.getListMbean(on).iterator(); 600 while (itNames.hasNext()) { 601 al.add(new EjbItem((ObjectName ) itNames.next())); 602 } 603 on = J2eeObjectName.getStatelessSessionBeans(p_DomainName, p_moduleName, p_ServerName); 604 itNames = JonasAdminJmx.getListMbean(on).iterator(); 605 while (itNames.hasNext()) { 606 al.add(new EjbItem((ObjectName ) itNames.next())); 607 } 608 on = J2eeObjectName.getMessageDrivenBeans(p_DomainName, p_moduleName, p_ServerName); 609 itNames = JonasAdminJmx.getListMbean(on).iterator(); 610 while (itNames.hasNext()) { 611 al.add(new EjbItem((ObjectName ) itNames.next())); 612 } 613 614 Collections.sort(al, new EjbItemByNameComparator()); 616 617 String sNodeName; 619 String sAction; 620 TreeControlNode nodeEjb; 621 EjbItem oEjb; 622 for (int i = 0; i < al.size(); i++) { 623 oEjb = (EjbItem) al.get(i); 624 sNodeName = p_NodeParent.getName() + WhereAreYou.NODE_SEPARATOR + oEjb.getName(); 625 sAction = "EditEjb" + oEjb.getTypeString() + ".do?select=" + oEjb.getObjectName(); 626 nodeEjb = new TreeControlNode(sNodeName, "icon/bean.gif", oEjb.getName(), sAction 628 , "content", false); 629 p_NodeParent.addChild(nodeEjb); 630 } 631 } 632 633 642 protected void getServiceDatabase(TreeControlNode pNodeServices, MessageResources pResources, String pDomainName, String pServerName) 643 throws Exception { 644 TreeControlNode nodeService = new TreeControlNode(pNodeServices.getName() 646 + WhereAreYou.NODE_SEPARATOR + "database", "icon/service_database.gif" 647 , pResources.getMessage("treenode.jonas.server.services.database"), "ListDatabases.do" 648 , "content", false); 649 pNodeServices.addChild(nodeService); 650 getDatasources(nodeService, pResources, pDomainName, pServerName); 652 } 653 654 664 public void getDatasources(TreeControlNode pNodeParent, MessageResources pResources, String pDomainName, String pServerName) 665 throws Exception { 666 667 ArrayList al = JonasAdminJmx.getDatasourceFilesDeployed(pDomainName, pServerName); 668 for (int i = 0; i < al.size(); i++) { 670 TreeControlNode node = new TreeControlNode(pNodeParent.getName() 671 + WhereAreYou.NODE_SEPARATOR + al.get(i).toString(), "icon/Datasource.gif" 672 , al.get(i).toString(), "EditDatasource.do?name=" + al.get(i), "content", false); 673 pNodeParent.addChild(node); 674 } 675 } 676 677 688 protected void getServiceWeb(TreeControlNode pNodeServices, MessageResources pResources 689 , HttpServletRequest pRequest, String pDomainName, String pServerName) 690 throws Exception { 691 TreeControlNode nodeService = new TreeControlNode(pNodeServices.getName() 693 + WhereAreYou.NODE_SEPARATOR + "web", "icon/service_web.gif" 694 , pResources.getMessage("treenode.jonas.server.services.web"), "ListWebContainers.do" 695 , "content", false); 696 pNodeServices.addChild(nodeService); 697 getWebContainers(nodeService, pResources, pRequest); 699 } 700 701 710 public void getWebContainers(
|