Patent Publication Number: US-9888092-B2

Title: System and method for executing third party module with web servers

Description:
CLAIM OF PRIORITY 
     This application claims the benefit of priority to U.S. Provisional patent application titled “SYSTEM AND METHOD FOR EXECUTING THIRD PARTY MODULE WITH WEB SERVERS”, Application No. 61/048,484 filed Apr. 28, 2008, and incorporated herein by reference. 
    
    
     COPYRIGHT NOTICE 
     A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever. 
     FIELD OF THE INVENTION 
     This invention relates to the field of executing third party module with web servers. 
     BACKGROUND 
     Web servers are widely used in the IT industry. In a typical case, a web server can receive request from a web client or a web browser, such as a HTTP request. The web server can then serve the web client or the web browser with responses along with optional data contents such as web pages. In addition, the web servers can interact with application servers and other third party modules to provide important function features. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is an illustration of an exemplary framework of an Execution environment in accordance with one embodiment of the present invention. 
         FIG. 2A  is an exemplary illustration of the apache wrapper that represents the Apache web server instance in accordance with one embodiment of the invention. 
         FIG. 2B  is an exemplary illustration of a class diagram for apache wrapper that represents the configuration file of the Apache web server instance in accordance with one embodiment of the invention. 
         FIG. 3A  is an exemplary illustration of the SunJS wrapper that represents the SUN JS web server instance in accordance with one embodiment of the invention. 
         FIG. 3B  is an exemplary illustration of a class diagram for SunJS wrapper that represents the configuration file of the SUN JS web server instance in accordance with one embodiment of the invention. 
     
    
    
     DETAILED DESCRIPTION 
     The invention is illustrated by way of example and not by way of limitation in the figures of the accompanying drawings in which like references indicate similar elements. It should be noted that references to “an” or “one” or “some” embodiment(s) in this disclosure are not necessarily to the same embodiment, and such references mean at least one. 
     In accordance with one embodiment, third party modules and the application servers can be tested together with the web servers to insure the quality of performance. 
     One example of the third party module is a web server plugin for an application server, such as a web server plugin for Weblogic Server. (Weblogic Server is a product of BEA Systems, Inc). With the plugin configured on the web server, the web server can act as proxy, load balancer and failover controller of the backend application servers. However, most of the web servers available in the market now, such as Apache Http Server, Sun Java System Web Server, and Microsoft Internet Information Server (IIS), do not provide object oriented configuration Abstract Programming Interface (API). Hence, it is very difficult to execute or test web server plugin with the web servers automatically. 
     In order to correctly perform the testing task, one can configure the web server with the web server plugin, including changing of the configurable parameter&#39;s values of a web server and control the lifecycle of the web server. One way to achieve this end is by directly performing string replacement and directly calling external start/stop command. The following are exemplary steps one can take to perform testing of the web server plugin with the web server:
         Read in a web server configuration file of web server;   Search for specific match string in the web server configuration files; and   Do string replacement and overwrite the web server configuration file.       

     In this case, for every new testing job, there can be a different configuration. For each new configuration, one needs to search the web server configuration files again and do the replacement. In some cases, this can result in very complex regular expression in order to find the right matching. 
     In accordance with an embodiment, by adopting an object oriented wrapping, the web server related testing can be made much easier and efficient. Since these web servers have different configuration files and syntax, the search logic and replacement become more and more complex. In accordance with an embodiment, by adopting an object oriented wrapping, the web server related testing can be made much easier and efficient. 
     In this case, the web server wrapper object provides standard interface to do configuration and control. The configuration files can also be parsed and wrapped into object which eliminates the need to the web server configuration file every time for a new testing job. The web server wrapper is an object orient encapsulation of web server. By doing the object orient encapsulation of web server, new configuration task can be added with much less work. The following are exemplary steps one can take to perform testing of the web server plugin with the web server:
         Create a web server wrapper instance by passing the home dir and type.   Call specific method of the web server wrapper instance to do configuration.   Call specific lifecycle method of the web server wrapper to start/stop the web server.       

       FIG. 1  is an illustration of an exemplary framework of an Execution environment in accordance with one embodiment of the present invention. 
     In accordance with an embodiment, the system supports executing a third party module with Web Servers. As shown in  FIG. 1 , the system includes one or more web server instances  102 ; a third party module  108  that interacts with the one or more web server instances  102 ; and an execution environment  101  that contains a web server wrapper instance  103  that can encapsulate a web server instance of the one or more web server instances  102 , wherein the web server wrapper instance  103  is associated with a web server configuration tool  104  that can configure the one or more web server instances  102  based on the third party module  108 . 
     In some cases, each web server instances  102  can include one or more web server configuration files  106  and web server binaries and script  105 . In some cases, the third party module  108  can interact with both the web server instance  102  and an application server  107 . In some cases, there exists a direct mapping relationship between the web server wrapper instance  103  and the web server binaries and script  105 . 
     In accordance with an embodiment, general web server abstraction of the web server instance  102  or the web server binaries and script  105  includes the most often used functions web servers that include loading module, changing listening port, start/stop. In one example, the abstract general web server is an interface and all web server wrappers implement the abstract general web server interface. In some cases, there can be an individual wrapper for each available individual web server. 
     The Apache Wrapper 
     In accordance with an embodiment, one example of such a web server wrapper is an Apache Wrapper for an Apache web server. In this case, the Apache Wrapper wrap the apache web server in an object oriented way. 
       FIG. 2A  shows the major class for apache wrapper that represents the Apache web server instance. 
     The configuration files of Apache web server are “httpd.conf” and “mime.types”. In one instance, the apache wrapper can parse and wrap these two files into objects. For instances, container directives are wrapped as object and the values that are associated with the directives are wrapped as attributes. 
       FIG. 2B  shows the three classes are used to represent the “httpd.conf” file: ApacheHttpdConf, ApacheDirective and ApacheContainerDirective. 
     The following provides an example for using the Apache Wrapper to configure an Apache web server. 
     
       
         
           
               
             
               
                   
               
             
            
               
                 Apache2WebServer apache = new Apache2WebServer(“C:/Apache”); 
               
               
                 apache.addModule(“weblogic_handler”, “mod_wl_20.so”); 
               
               
                   
               
            
           
         
       
         
         
           
             The corresponding “httpd.conf” configuration for an Apache web server is LoadModule weblogic_module mod_wl_20.so 
           
         
       
    
     In this example, the input is the httpd.conf file path. After the ApacheWebServer instance was created and the loadConfiguration method is invoked, it can read the httpd.conf and build a ApacheHttpdConf object and store the object as an attribute of ApacheWebServer. In some examples, there also exists container directive that can contain other directives, such as Files and Location. 
     The following is another example that demonstrates how to add the below contents into the Apache web server configuration file, httpd.conf. 
     
       
         
           
               
               
             
               
                   
                   
               
             
            
               
                   
                 LoadModule weblogic_module mod_wl_20.so 
               
               
                   
                 &lt;IfModule mod_weblogic.c&gt; 
               
               
                   
                  WebLogicCluster haili01:8110,haili01:8120 
               
               
                   
                  &lt;Location /proxy_qapath&gt; 
               
               
                   
                  SetHandler weblogic-handler 
               
               
                   
                  &lt;/Location&gt; 
               
               
                   
                 &lt;/IfModule&gt; 
               
               
                   
                   
               
            
           
         
       
     
     The Apache Wrapper can work as the following, 
     
       
         
           
               
             
               
                   
               
             
            
               
                 Apache2WebServer apache = new Apache2WebServer(“C:/Apache”); 
               
               
                   apache.loadConfiguration( ); 
               
               
                  //  loadModule 
               
               
                   ApacheDirective loadModule = new 
               
               
                   ApacheDirective(“loadModule”); 
               
               
                   loadModule.addValue(“weblogic_module”); 
               
               
                   loadModule.addValue(“mod_wl_20.so”); 
               
               
                   apache.addDirective(loadModule); 
               
               
                  //  IfModule 
               
               
                   ApacheContainerDirective ifModule = new 
               
               
                   ApacheContainerDirective(“IfModule”); 
               
               
                   directive.addValue(“mod_weblogic.c”); 
               
               
                  //  WebLogicCluster 
               
               
                   ApacheDirective directive = new 
               
               
                   ApacheDirective(“WebLogicCluster”); 
               
               
                   directive.addValue(“haili01:8110,haili01:8120”); 
               
               
                   ifModule.addDirective(directive); 
               
               
                  //  Location 
               
               
                   ApacheContainerDirective location = new 
               
               
                   ApacheContainerDirective(“Location”); 
               
               
                   location.addValue(“/proxy_qapath”); 
               
               
                   ifModule.addDirective(location); 
               
               
                  //  SetHandler 
               
               
                  directive = new ApacheDirective(“SetHandler”); 
               
               
                  directive.addValue(“weblogic-handler”); 
               
               
                  location.addDirective(directive); 
               
               
                  apache.saveConfiguration( ); 
               
               
                   
               
            
           
         
       
     
     In addition, there can also be a MimeType class that represents an entry of the mime.types file. The MimeType class can be a very simple class which has only two attributes, one is the extension and the other is the type string. 
     The SunJS Wrapper 
     In accordance with an embodiment, another example of web server wrapper is a SunJS Wrapper. Again, the SunJS Wrapper wrap the SUN JS web server in an object oriented way. All the configuration files can be parsed and wrapped into objects. 
       FIG. 3A  shows the major class for apache wrapper that represents the SUN JS web server instance. 
     The configuration files of SUN JS web server are “obj.conf”, “magnus.conf” and “server.xml”. The main task of apache wrapper is parsing and wrapping these two files. All the configuration files can be parsed and wrapped into objects. For instances, container directives are wrapped as object and others as attributes. 
       FIG. 3B  shows the three classes are used to represent the “httpd.conf” file: SunJSObjConf, SunJSMagnusConf, SunJSServerConf, SunJSObject and SunJSInit. 
     The following provides an example for using the SunJS JS Wrapper to configure an SUN JS web server. 
     
       
         
           
               
               
             
               
                   
                   
               
             
            
               
                   
                   SunJS6WebServer sunjs = new 
               
               
                   
                 SunJS6WebServer(“C:/Sun/WebServer6.1/https-haili01”); 
               
               
                   
                   Map map = new HashMap( ); 
               
               
                   
                   map.set(“fn”, “load-module”); 
               
               
                   
                   map.set(“funcs”, “wl-proxy,wl-init”); 
               
               
                   
                   map.set(“shlib”, “C:/proxy61.dll”); 
               
               
                   
                   sunjs.AddInit(new SunJSInit(map)); 
               
               
                   
                   map = new HashMap( ); 
               
               
                   
                   map.set(“fn”, ”wl-init”); 
               
               
                   
                   sunjs.AddInit(new SunJSInit(map)); 
               
               
                   
                   
               
            
           
         
       
     
     The corresponding “magnus.conf” configuration for a SunJS web server is 
     
       
         
           
               
             
               
                   
               
             
            
               
                 Init fn=“load-modules” funcs=“wl-proxy,wl-init” shlib=“C:/proxy61.dll” 
               
               
                 Init fn=“wl-init” 
               
               
                   
               
            
           
         
       
     
     Again, there can also be a MimeType class for the SunJS Wrapper that represents an entry of the mime.types file. The MimeType class can be a very simple class which has only two attributes, one is the extension and the other is the type string. 
     In accordance with an embodiment, yet another example of web server wrapper is a IIS Wrapper. Again, the IIS Wrapper wrap the IIS web server in an object oriented way. All the configuration files can be parsed and wrapped into objects. The following provides an example for using the IIS Wrapper to configure an IIS web server. 
     
       
         
           
               
               
             
               
                   
                   
               
             
            
               
                   
                 IIS6WebServer iis = new IIS6WebServer( ); 
               
               
                   
                 iis.getScriptMapping( ).set(“*.jsp”, “C:/iisproxy.dll”); 
               
               
                   
                   
               
            
           
         
       
     
     The corresponding WSH script for the IIS web server can be, 
     
       
         
           
               
               
             
               
                   
                   
               
             
            
               
                   
                 Set IIsWebServerObj = GetObject(“IIS://localhost/W3SVC/1”) 
               
               
                   
                 maps = IIsWebVDirObj.ScriptMaps 
               
               
                   
                 maps.Put “*.jsp”, “C:/iisproxy.dll” 
               
               
                   
                 IIsWebVDirObj.Put “ScriptMaps”, maps 
               
               
                   
                   
               
            
           
         
       
     
     One embodiment includes a computer program product which is a storage medium (media) having instructions stored thereon/in which can be used to program a computer to perform any of the features present herein. The storage medium can include, but is not limited to, any type of disk including floppy disks, optical discs, DVD, CD-ROMs, micro drive, and magneto-optical disks, ROMs, RAMs, EPROMs, EEPROMs, DRAMs, flash memory of media or device suitable for storing instructions and/or data stored on any one of the computer readable medium (media), the present invention can include software for controlling both the hardware of the general purpose/specialized computer or microprocessor, and for enabling the computer or microprocessor to interact with a human user or other mechanism utilizing the results of the present invention. Such software may include, but is not limited to, device drivers, operating systems, execution environments/containers, and user applications. 
     Embodiments of the present invention can include providing code for implementing processes of the present invention. The providing can include providing code to a user in any manner. For example, the providing can include transmitting digital signals containing the code to a user; providing the code on a physical media to a user; or any other method of making the code available. 
     Embodiments of the present invention can include a computer implemented method for transmitting code which can be executed at a computer to perform any of the processes of embodiments of the present invention. The transmitting can include transfer through any portion of a network, such as the Internet; through wires, the atmosphere or space; or any other type of transmission. The transmitting can include initiating a transmission of code; or causing the code to pass into any region or country from another region or country. For example, transmitting includes causing the transfer of code through a portion of a network as a result of previously addressing and sending data including the code to a user. A transmission to a user can include any transmission received by the user in any region or country, regardless of the location from which the transmission is sent. 
     The forgoing description of preferred embodiments of the present invention has been provided for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations will be apparent to one of ordinary skill in the relevant arts. For example, steps preformed in the embodiments of the invention disclosed can be performed in alternate orders, certain steps can be omitted, and additional steps can be added. The embodiments were chosen and described in order to best explain the principles of the invention and its practical application, thereby enabling others skilled in the art to understand the invention for various embodiments and with various modifications that are suited to the particular used contemplated. It is intended that the scope of the invention be defined by the claims and their equivalents.