⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agentserverconfiggenerator.java

📁 一个类似于openJMS分布在ObjectWeb之下的JMS消息中间件。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//         if (serverName == null || serverName.equals("")){//           serverName = instanceName;//           System.out.println("-2- " + serverName);//           if (serversNb > 1)//             serverName += ("." + serverPrefixName ++);//           System.out.println("-3- " + serverName);//         }        serverElt.setAttribute(NAME, serverName);        Short id = new Short(nextId ++);        // does this server have a relativeId ?        Node idNode =  serverElt.getAttributes().getNamedItem(ID);        if (idNode != null){          String relId = idNode.getNodeValue();          if (relId != null && (! relId.equals("")))            relativeIds.put(relId, id);        }        serverElt.setAttribute(ID, id.toString());        NodeList serverChilds = sNode.getChildNodes();        for (int j=0; j<serverChilds.getLength(); j++){          if (serverChilds.item(j).getNodeType() == Node.ELEMENT_NODE)            serverElt.appendChild(instantiateElement(root.getOwnerDocument(),                                                     instanceName,                                                      serverChilds.item(j),                                                      p));        }        root.appendChild(serverElt);      }    }        for (int i=0; i<childs.getLength(); i++){      Node tNode = childs.item(i);      if (tNode.getNodeType() == Node.ELEMENT_NODE &&          tNode.getNodeName().equals(TRANSIENT_TAG)){        Element transientElt = instantiateElement(root.getOwnerDocument(),                                                  instanceName, tNode, p);        // check if name have been defined (eg was in a var)        String transientName =           transientElt.getAttributes().getNamedItem(NAME).getNodeValue();        if (transientName == null || transientName.equals("")){          transientName = instanceName + ".transient";          if (transientNb > 1)            transientName += ("." + transientPrefixName ++);          transientElt.setAttribute(NAME, transientName);        }        // generate id        Short id = new Short(nextId ++);        transientElt.setAttribute(ID, id.toString());        // associated server        Node serverNode = transientElt.getAttributes().getNamedItem(SERVER);        String associatedServer = null;        Short serverId = null;        if (serverNode != null)          associatedServer = serverNode.getNodeValue();        if (associatedServer == null || associatedServer.equals("")){          // this was not a var associate to first server          serverId = firstServer;        }else{          serverId = (Short)relativeIds.get(associatedServer);        }        if (serverId == null){          throw new A3configException("transient " + transientName +                                        " has no associated server");        }        transientElt.setAttribute(SERVER, serverId.toString());        NodeList serverChilds = tNode.getChildNodes();        for (int j=0; j<serverChilds.getLength(); j++){          if (serverChilds.item(j).getNodeType() == Node.ELEMENT_NODE)            transientElt.appendChild(              instantiateElement(root.getOwnerDocument(),                                 instanceName, serverChilds.item(j), p));        }        root.appendChild(transientElt);      }    }    return nextId;  }  private int countChilds(Node currentElt, String tagName){    int nb = 0;    NodeList childs = currentElt.getChildNodes();    for (int i=0; i<childs.getLength(); i++){      Node currentNode = childs.item(i);      if (currentNode.getNodeType() == Node.ELEMENT_NODE &&           currentNode.getNodeName().equals(tagName))        nb++;    }    return nb;  }  private void buildSimpleElement(String tagName, Element root, Properties p)    throws A3configException{    // check if default values for global vars have been initialized    if (varsSet.get(GLOBALS) == null)      getVariables(templateRoot, false);    NodeList childs = templateRoot.getChildNodes();    for (int i=0; i<childs.getLength(); i++){      Node currentNode = childs.item(i);      if (currentNode.getNodeType() == Node.ELEMENT_NODE &&           currentNode.getNodeName().equals(tagName)){        root.appendChild(instantiateElement(root.getOwnerDocument(),                                            null, currentNode, p));      }    }  }  // only for one level  private Element instantiateElement(Document doc,                                     String instance,                                     Node model,                                     Properties p) throws A3configException{    Element instanceElt = (Element) doc.importNode(model, false);    NamedNodeMap attrs = model.getAttributes();    for (int j=0; j<attrs.getLength(); j++){      Node attrNode =  attrs.item(j);      String attr = attrs.item(j).getNodeName();      String attrValue = attrs.item(j).getNodeValue();      if (attrNode.getNodeValue().startsWith(VAR_MARK)){        String varName = attrValue.substring(1, attrValue.length());        attrValue = null;        // get config in properties        if (instance != null)          attrValue = p.getProperty(instance + "." + varName);        if (attrValue == null)          // it may be a global variable          attrValue = p.getProperty(varName);            if (attrValue == null)          // get default          attrValue = (String)defaultValues.get(varName);        if (attrValue == null)          throw new A3configException("Variable " +                                       ((instance!=null) ? instance+"." : "")                                     +  varName +                                       " not defined, no defaultValue");      }      // add domain info if any      if (merge && (! attrValue.equals(TRANSIENT_TAG)) &&          ((model.getNodeName().equals(NETWORK_TAG)             && attr.equals(DOMAIN_TAG)) ||           (model.getNodeName().equals(DOMAIN_TAG) && attr.equals(NAME)))){        attrValue = currentDomain + "." + attrValue;      }      instanceElt.setAttribute(attr, attrValue);    }    return instanceElt;  }  private ConfigVariable[] getVariables(Node node, boolean type)     throws A3configException{    NodeList childs = node.getChildNodes();    Vector v = new Vector();    for (int i=0; i<childs.getLength(); i++){      Node currentNode = childs.item(i);      if (currentNode.getNodeType() == Node.ELEMENT_NODE &&             currentNode.getNodeName().equals(VAR_TAG)){        NamedNodeMap attrs = currentNode.getAttributes();        String name = attrs.getNamedItem(NAME).getNodeValue();        Node valueNode =  attrs.getNamedItem(VALUE);        String defaultValue = null;        if (valueNode != null){          defaultValue = valueNode.getNodeValue();          defaultValues.put(name, defaultValue);        }        if (!type)          continue;        Node infoNode =  attrs.getNamedItem(INFO);        String info = null;        if (infoNode != null)        info = infoNode.getNodeValue();        try{          Class c = ConfigVariable.getClass(            attrs.getNamedItem(TYPE).getNodeValue());          Object defaultObject = null;          if (defaultValue != null){            defaultObject = ConfigVariable.getObject(c, defaultValue);          }          v.addElement(new ConfigVariable(name, c, defaultObject, info));        }catch(Exception e){          throw new A3configException("Error parsing variable type, variable "                                      + name + " has not a valid type");        }      }    }    ConfigVariable[] res = new ConfigVariable[v.size()];    v.copyInto(res);    return res;  }    private void updateConfs(Element localRoot,Element previousRoot, Properties p)    throws A3configException{    // add general previous config properties to new config if not re-defined    NodeList childs = previousRoot.getChildNodes();    for (int i=0; i<childs.getLength(); i++){      Node currentNode = childs.item(i);      if (currentNode.getNodeType() == Node.ELEMENT_NODE &&            currentNode.getNodeName().equals(PROPERTY_TAG)){        try{          Element oldPropr = getChild(localRoot, PROPERTY_TAG, NAME,                                      ((Element)currentNode).getAttribute(NAME));        }catch(Exception e){          // this property is not redefined in new conf -> redefine it          updateImport((Element)currentNode);          localRoot.insertBefore(            localRoot.getOwnerDocument().importNode(currentNode, true),             localRoot.getFirstChild());        }      }    }    // get main domain from D0    Element D0Domain = getChild(previousRoot, DOMAIN_TAG, NAME, ADMIN_DOMAIN);    updateImport(D0Domain);    // get s0 server     Element s0server =       getChild(previousRoot, SERVER_TAG, NAME, ADMIN_SERVER_NAME);    updateImport(s0server);    // get first domain, common to admin an this appli    Element newDomain = null;    childs = localRoot.getChildNodes();    for (int i=0; i<childs.getLength(); i++){      Node currentNode = childs.item(i);      if (currentNode.getNodeType() == Node.ELEMENT_NODE &&          currentNode.getNodeName().equals(DOMAIN_TAG)){        newDomain = (Element)currentNode;        break;      }    }    if (newDomain == null)      throw new A3configException("No domain defined");    String newDomainName = newDomain.getAttribute(NAME);    // get port for s0 to route new domain    String routePort = p.getProperty("domain.port");    if (routePort == null || Integer.parseInt(routePort)<1)      throw new A3configException(        "No port defined for admin server to route new application");    //check this port is not already defined for a router    // (appends when deploy 2 instances with same values    checkRouterValid(previousRoot, routePort);      // update s0server    Element newDomainNetwork =       previousRoot.getOwnerDocument().createElement(NETWORK_TAG);    newDomainNetwork.setAttribute(DOMAIN_TAG, newDomainName);    newDomainNetwork.setAttribute(PORT, routePort);    s0server.insertBefore(newDomainNetwork, s0server.getFirstChild());    // add new servers to previousconfig    Element firstNewServer = null;    for (int i=0; i<childs.getLength(); i++){      Node currentNode = childs.item(i);      if (currentNode.getNodeType() == Node.ELEMENT_NODE &&          currentNode.getNodeName().equals(SERVER_TAG) ||          currentNode.getNodeName().equals(TRANSIENT_TAG)){        if (firstNewServer == null)          firstNewServer = (Element)currentNode;        updateImport((Element)currentNode);        previousRoot.appendChild(          previousRoot.getOwnerDocument().importNode(currentNode, true));      }    }    // add domain element to previous config    updateImport(newDomain);    previousRoot.insertBefore(      previousRoot.getOwnerDocument().importNode(newDomain, true), s0server);    // import s0server in local config and remove useless domains    updateImport(s0server);    Element localS0server =       (Element)(localRoot.getOwnerDocument().importNode(s0server, true));    childs = localS0server.getChildNodes();    for (int i=0; i<childs.getLength(); i++){      Node currentNode = childs.item(i);       if (currentNode.getNodeType() == Node.ELEMENT_NODE &&           currentNode.getNodeName().equals(NETWORK_TAG) &&           ! currentNode.getAttributes().getNamedItem(DOMAIN_TAG).           getNodeValue().equals(ADMIN_DOMAIN) &&           ! currentNode.getAttributes().getNamedItem(DOMAIN_TAG).               getNodeValue().equals(newDomainName)){         localS0server.removeChild(currentNode);       }    }    localRoot.insertBefore(localS0server, firstNewServer);    updateImport(D0Domain);    localRoot.insertBefore(      localRoot.getOwnerDocument().importNode(D0Domain, true), localS0server);  }  private void checkRouterValid(Element previousRoot, String port)     throws A3configException{    Element s0elt = getChild(previousRoot, "server", "id", "0");    NodeList childs = s0elt.getChildNodes();    for (int i=0; i<childs.getLength(); i++){      Node currentNode = childs.item(i);      if (currentNode.getNodeType() == Node.ELEMENT_NODE &&          currentNode.getNodeName().equals(NETWORK_TAG) &&          currentNode.getAttributes().getNamedItem(PORT).getNodeValue().          equals(port))        throw new A3configException(          "The port " + port + " is already defined for domain " +          currentNode.getAttributes().getNamedItem(DOMAIN_TAG).getNodeValue());    }  }  public static void deleteApplicationConfig(InputStream totalConfig,                                             InputStream localConfig,                                              String res)    throws Exception{    DOMParser parser = new DOMParser();    parser.parse(new InputSource(totalConfig));    Document resDoc = parser.getDocument();    Element totalRoot = resDoc.getDocumentElement();    parser.parse(new InputSource(localConfig));    Element localRoot = parser.getDocument().getDocumentElement();    // get s0 server of old config    Element s0server =  getChild(totalRoot, SERVER, NAME, ADMIN_SERVER_NAME);    // parse local Element    NodeList childs = localRoot.getChildNodes();    for (int i=0; i<childs.getLength(); i++){      Node child = childs.item(i);      if (child.getNodeType() == Node.ELEMENT_NODE){        if (child.getNodeName().equals(DOMAIN_TAG)){          String domainName =             child.getAttributes().getNamedItem(NAME).getNodeValue();          if (! domainName.equals(ADMIN_DOMAIN)){            // remove domain from total config            removeChild(totalRoot, DOMAIN_TAG, NAME, domainName);            // remove network from s0server            removeChild(s0server, NETWORK_TAG, DOMAIN_TAG, domainName);          }        }else if (child.getNodeName().equals(SERVER_TAG)                   || child.getNodeName().equals(TRANSIENT_TAG)){          //remove this server from total config          String sid = child.getAttributes().getNamedItem(ID).getNodeValue();          if (! sid.equals("0"))            removeChild(totalRoot, child.getNodeName(), ID, sid);        }      }    }    // write new config    OutputFormat format  = new OutputFormat(resDoc);    //format.setIndent(indent);    FileOutputStream fos = new FileOutputStream(res);    XMLSerializer  serial = new XMLSerializer(fos, format);    serial.asDOMSerializer();    serial.serialize(resDoc);    fos.flush();    fos.close();  }  private static void removeChild(Element parent, String tagName,                                  String attrName, String attrValue)     throws Exception{    NodeList childs = parent.getChildNodes();    for (int i=0; i<childs.getLength(); i++){      Node child = childs.item(i);      if (child.getNodeType() == Node.ELEMENT_NODE &&            child.getNodeName().equals(tagName)){        // check attributes        if (child.getAttributes().getNamedItem(attrName).            getNodeValue().equals(attrValue)){          parent.removeChild(child);          return;        }      }    }    throw new Exception("Unable to find tag " + tagName + " with attr " +                        attrName + "=" + attrValue);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -