Ignore:
Timestamp:
2014-04-10T14:39:33+12:00 (10 years ago)
Author:
kjdon
Message:

Lots of changes. Mainly to do with removing this.doc from everywhere. Document is not thread safe. Now we tend to create a new Document everytime we are starting a new page/message etc. in service this.desc_doc is available as teh document to create service info stuff. But it should only be used for this and not for other messages. newDOM is now static for XMLConverter. method param changes for some GSXML methods.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/ServiceCluster.java

    r27940 r28966  
    8383  protected SimpleMacroResolver macro_resolver = null;
    8484
    85     /** container doc for description elements */
    86     protected Document doc = null;
     85    /** container doc for description elements
     86     only use this document for creating the below stored lists. */
     87        protected Document desc_doc = null;
    8788    /** list of services */
    8889    protected Element service_list = null;
     
    139140        this.converter = new XMLConverter();
    140141        this.macro_resolver = new SimpleMacroResolver();
    141         this.doc = this.converter.newDOM();
    142         this.description = this.doc.createElement(GSXML.CLUSTER_ELEM);
    143         this.display_item_list = this.doc.createElement(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
    144         this.metadata_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    145         this.library_param_list = this.doc.createElement("libraryParamList");
    146         this.service_list = this.doc.createElement(GSXML.SERVICE_ELEM + GSXML.LIST_MODIFIER);
    147         //this.plugin_item_list = this.doc.createElement(GSXML.PLUGIN_ELEM + GSXML.LIST_MODIFIER);
     142        this.desc_doc = XMLConverter.newDOM();
     143        this.description = this.desc_doc.createElement(GSXML.CLUSTER_ELEM);
     144        this.display_item_list = this.desc_doc.createElement(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
     145        this.metadata_list = this.desc_doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
     146        this.library_param_list = this.desc_doc.createElement(GSXML.LIBRARY_PARAM_ELEM+GSXML.LIST_MODIFIER);
     147        this.service_list = this.desc_doc.createElement(GSXML.SERVICE_ELEM + GSXML.LIST_MODIFIER);
     148        //this.plugin_item_list = this.desc_doc.createElement(GSXML.PLUGIN_ELEM + GSXML.LIST_MODIFIER);
    148149    }
    149150
     
    266267
    267268        // get the servlet params
    268         Element param_list = (Element) GSXML.getChildByTagName(service_cluster_info, "libraryParamList");
     269        Element param_list = (Element) GSXML.getChildByTagName(service_cluster_info, GSXML.LIBRARY_PARAM_ELEM+GSXML.LIST_MODIFIER);
    269270        if (param_list != null) {
    270271          if (!addLibraryParams(param_list)) {
     
    286287            for (int k = 0; k < metanodes.getLength(); k++)
    287288            {
    288                 this.metadata_list.appendChild(this.doc.importNode(metanodes.item(k), true));
     289                this.metadata_list.appendChild(this.desc_doc.importNode(metanodes.item(k), true));
    289290            }
    290291        }
     
    294295  /** adds an individual metadata element into the list */
    295296  protected boolean addMetadata(String name, String value) {
    296     return GSXML.addMetadata(this.doc, this.metadata_list, name, value);
     297    return GSXML.addMetadata(this.metadata_list, name, value);
    297298  }
    298299 
     
    324325                if (this_item == null)
    325326                {
    326                     this_item = this.doc.createElement(GSXML.DISPLAY_TEXT_ELEM);
     327                    this_item = this.desc_doc.createElement(GSXML.DISPLAY_TEXT_ELEM);
    327328                    this_item.setAttribute(GSXML.NAME_ATT, name);
    328329                    this.display_item_list.appendChild(this_item);
    329330                }
    330331
    331                 this_item.appendChild(this.doc.importNode(d, true));
     332                this_item.appendChild(this.desc_doc.importNode(d, true));
    332333            }
    333334        }
     
    385386            for (int k = 0; k < paramnodes.getLength(); k++)
    386387            {
    387                 this.library_param_list.appendChild(this.doc.importNode(paramnodes.item(k), true));
     388                this.library_param_list.appendChild(this.desc_doc.importNode(paramnodes.item(k), true));
    388389            }
    389390        }
     
    396397        service_map.clear();
    397398        service_name_map.clear();
    398         this.service_list = this.doc.createElement(GSXML.SERVICE_ELEM + GSXML.LIST_MODIFIER);
     399        this.service_list = this.desc_doc.createElement(GSXML.SERVICE_ELEM + GSXML.LIST_MODIFIER);
    399400    }
    400401
    401402  protected void clearLocalData() {
    402     this.description = this.doc.createElement(GSXML.CLUSTER_ELEM);
    403     this.display_item_list = this.doc.createElement(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
    404     this.metadata_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    405     this.library_param_list = this.doc.createElement("libraryParamList");
     403    this.description = this.desc_doc.createElement(GSXML.CLUSTER_ELEM);
     404    this.display_item_list = this.desc_doc.createElement(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER);
     405    this.metadata_list = this.desc_doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
     406    this.library_param_list = this.desc_doc.createElement(GSXML.LIBRARY_PARAM_ELEM+GSXML.LIST_MODIFIER);
    406407 
    407408  }
     
    422423        }
    423424
     425        // the xml request to send to the serviceRacks to query what
     426        // services they provide
     427        // can send same message to each service rack
     428        Document doc = XMLConverter.newDOM();
     429        Element message = doc.createElement(GSXML.MESSAGE_ELEM);
     430        Element request = GSXML.createBasicRequest(doc, GSXML.REQUEST_TYPE_DESCRIBE, "", new UserContext());
     431        message.appendChild(request);
    424432        for (int i = 0; i < nodes.getLength(); i++)
    425433        {
    426434
    427             // the xml request to send to the serviceRack to query what
    428             // services it provides
    429             Element message = this.doc.createElement(GSXML.MESSAGE_ELEM);
    430             Element request = GSXML.createBasicRequest(this.doc, GSXML.REQUEST_TYPE_DESCRIBE, "", new UserContext());
    431             message.appendChild(request);
    432435
    433436            Element n = (Element) nodes.item(i);
     
    499502                    this.service_map.put(service, s);
    500503                    // also add info to the ServiceInfo XML element
    501                     this.service_list.appendChild(this.doc.importNode(typenodes.item(j), true));
     504                    this.service_list.appendChild(this.desc_doc.importNode(typenodes.item(j), true));
    502505                }
    503506            }
     
    532535    public Node process(Node message_node)
    533536    {
    534         Element message = this.converter.nodeToElement(message_node);
     537        Element message = GSXML.nodeToElement(message_node);
    535538
    536539        NodeList requests = message.getElementsByTagName(GSXML.REQUEST_ELEM);
    537540        Document mess_doc = message.getOwnerDocument();
    538         Element mainResult = this.doc.createElement(GSXML.MESSAGE_ELEM);
     541        Document result_doc = XMLConverter.newDOM();
     542        Element mainResult = result_doc.createElement(GSXML.MESSAGE_ELEM);
    539543        if (requests.getLength() == 0)
    540544        {
     
    560564            if (to.equals(""))
    561565            { // this command is for me
    562                 Element response = processMessage(request);
     566              Element response = processMessage(result_doc, request);
    563567                mainResult.appendChild(response);
    564568
     
    606610                    from = GSPath.prependLink(from, this.cluster_name);
    607611                    response.setAttribute(GSXML.FROM_ATT, from);
    608                     mainResult.appendChild(this.doc.importNode(response, true));
     612                    mainResult.appendChild(result_doc.importNode(response, true));
    609613                }
    610614
     
    622626     * @return the result Element - should be <response>
    623627     */
    624     protected Element processMessage(Element request)
    625     {
    626         Element response = this.doc.createElement(GSXML.RESPONSE_ELEM);
     628  protected Element processMessage(Document result_doc, Element request)
     629    {
     630
     631        Element response = result_doc.createElement(GSXML.RESPONSE_ELEM);
    627632        response.setAttribute(GSXML.FROM_ATT, this.cluster_name);
    628633        String type = request.getAttribute(GSXML.TYPE_ATT);
     
    633638        {
    634639            // create the collection element
    635             Element description = (Element) this.description.cloneNode(false);
     640          Element description = (Element) result_doc.importNode(this.description, false);
    636641            // set collection type : mg, mgpp, lucene or solr
    637642            //description.setAttribute(GSXML.TYPE_ATT, col_type);
     
    644649            {
    645650                addAllDisplayInfo(description, lang);
    646                 description.appendChild(this.service_list);
    647                 description.appendChild(this.metadata_list);
    648                 description.appendChild(this.library_param_list);
     651                description.appendChild(result_doc.importNode(this.service_list, true));
     652                description.appendChild(result_doc.importNode(this.metadata_list, true));
     653                description.appendChild(result_doc.importNode(this.library_param_list, true));
    649654                //description.appendChild(this.plugin_item_list);
    650655                return response;
     
    663668                    if (info.equals(GSXML.SERVICE_ELEM + GSXML.LIST_MODIFIER))
    664669                    {
    665                         description.appendChild(this.service_list);
     670                      description.appendChild(result_doc.importNode(this.service_list, true));
    666671                    }
    667672                    else if (info.equals(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER))
    668673                    {
    669                         description.appendChild(this.metadata_list);
     674                      description.appendChild(result_doc.importNode(this.metadata_list, true));
    670675                    }
    671676                    else if (info.equals(GSXML.DISPLAY_TEXT_ELEM + GSXML.LIST_MODIFIER))
     
    673678                        addAllDisplayInfo(description, lang);
    674679                    }
    675                     else if (info.equals("libraryParamlist"))
     680                    else if (info.equals(GSXML.LIBRARY_PARAM_ELEM+GSXML.LIST_MODIFIER))
    676681                    {
    677                       description.appendChild(this.library_param_list);
     682                      description.appendChild(result_doc.importNode(this.library_param_list, true));
    678683                    }
    679684                }
     
    778783    protected Element processSystemRequest(Element request)
    779784    {
    780 
    781         Element response = this.doc.createElement(GSXML.RESPONSE_ELEM);
     785      Document result_doc = XMLConverter.newDOM();
     786        Element response = result_doc.createElement(GSXML.RESPONSE_ELEM);
    782787        response.setAttribute(GSXML.FROM_ATT, this.cluster_name);
    783788        response.setAttribute(GSXML.TYPE_ATT, GSXML.REQUEST_TYPE_SYSTEM);
     
    801806                    if (this.configure())
    802807                    {
    803                         Element s = GSXML.createTextElement(this.doc, GSXML.STATUS_ELEM, this.cluster_name + " reconfigured");
     808                        Element s = GSXML.createTextElement(result_doc, GSXML.STATUS_ELEM, this.cluster_name + " reconfigured");
    804809                        response.appendChild(s);
    805810
     
    807812                    else
    808813                    {
    809                         Element s = GSXML.createTextElement(this.doc, GSXML.STATUS_ELEM, this.cluster_name + " could not be reconfigured");
     814                        Element s = GSXML.createTextElement(result_doc, GSXML.STATUS_ELEM, this.cluster_name + " could not be reconfigured");
    810815                        response.appendChild(s);
    811816                    }
     
    813818                else if (this.configureSubset(subset))
    814819                {
    815                     Element s = GSXML.createTextElement(this.doc, GSXML.STATUS_ELEM, this.cluster_name + " " + subset + " reconfigured");
     820                    Element s = GSXML.createTextElement(result_doc, GSXML.STATUS_ELEM, this.cluster_name + " " + subset + " reconfigured");
    816821                    response.appendChild(s);
    817822                }
    818823                else
    819824                {
    820                     Element s = GSXML.createTextElement(this.doc, GSXML.STATUS_ELEM, this.cluster_name + " " + subset + " could not be reconfigured");
     825                    Element s = GSXML.createTextElement(result_doc, GSXML.STATUS_ELEM, this.cluster_name + " " + subset + " could not be reconfigured");
    821826                    response.appendChild(s);
    822827                }
     
    828833            if (action.equals(GSXML.SYSTEM_TYPE_ACTIVATE))
    829834            {
    830                 Element s = GSXML.createTextElement(this.doc, GSXML.STATUS_ELEM, "activate action not yet implemented - does it even make sense in this context??");
     835                Element s = GSXML.createTextElement(result_doc, GSXML.STATUS_ELEM, "activate action not yet implemented - does it even make sense in this context??");
    831836                response.appendChild(s);
    832837            }
     
    846851                    message = "Can't deactivate " + module_type + " type modules!";
    847852                }
    848                 Element s = GSXML.createTextElement(this.doc, GSXML.STATUS_ELEM, message);
     853                Element s = GSXML.createTextElement(result_doc, GSXML.STATUS_ELEM, message);
    849854                response.appendChild(s);
    850855            }
     
    897902        else if (subset.equals(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER))
    898903        {
    899             this.metadata_list = this.doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
     904            this.metadata_list = this.desc_doc.createElement(GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    900905            Element metadata_list = (Element) GSXML.getChildByTagName(cluster_config_elem, GSXML.METADATA_ELEM + GSXML.LIST_MODIFIER);
    901906            return addMetadata(metadata_list);
     
    923928    protected boolean addAllDisplayInfo(Element description, String lang)
    924929    {
    925 
     930      Document doc = description.getOwnerDocument();
    926931        NodeList items = this.display_item_list.getChildNodes();
    927932        for (int i = 0; i < items.getLength(); i++)
     
    940945                new_m = (Element) GSXML.getChildByTagName(m, GSXML.DISPLAY_TEXT_ELEM);
    941946            }
    942             description.appendChild(new_m.cloneNode(true));
     947            description.appendChild(doc.importNode(new_m, true));
    943948        }
    944949        return true;
Note: See TracChangeset for help on using the changeset viewer.