0 Replies Latest reply on Aug 21, 2012 11:41 AM by ngthphat

    httpd  - mod_cluster 1.2 in Jboss 7.1.1 - Problem with endpoint webService

    ngthphat

      Hi everyone,

       

       

      I'm trying install cluster for jboss. I followed the instructions as described in the following documents: https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto.

      I have one master and one slave defined. I can start-up the master and when I start-up the slaves, the correctly authenticate to the master.

      My problem is I cannot request to my web service when I stop one of my nodes.

      I deployed cluster-demo and my_ear-xxx.ear (my web services).

       

       

      This is my enviroment:

      _ Jboss AS 7.1.1

      _ mod_cluster 1.2.0 : (win-x86)  (I cannot use win-x64 version, I can start httpd, however when I try access to mod_cluster_manager, httpd alway crash)

      _ Windows 7 64bit (all nodes)

      _ MS SQL 2008

      _ SOAPSonar Personal for test web services

       

       

      This is some section I config:

      Master node:

      - domain.xml

       

      <server-groups>
              <server-group name="cluster-server-group" profile="full-ha">
                  <jvm name="default">
                      <heap size="64m" max-size="512m"/>
                  </jvm>
      </server-group>
      
      
      
      
       <profile name="full-ha">
       ...
                      <subsystem xmlns="urn:jboss:domain:modcluster:1.0">
                                    <mod-cluster-config advertise-socket="modcluster" proxy-list="192.168.72.101:8888">
                                                   <dynamic-load-provider>
                                                                  <load-metric type="busyness"/>
                                                   </dynamic-load-provider>
                                    </mod-cluster-config>
        
                     </subsystem>
      
      
                     <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="${jboss.node.name}" native="false">
                                    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
                                    <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp"/>
                                    <virtual-server name="default-host" enable-welcome-root="true">
                                                   <alias name="xcrm.com"/>
                                    </virtual-server>
                     </subsystem>
      
      
                      <subsystem xmlns="urn:jboss:domain:webservices:1.1">
                                    <modify-wsdl-address>true</modify-wsdl-address>
                                    <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
                                    <endpoint-config name="Standard-Endpoint-Config"/>
                                    <endpoint-config name="Recording-Endpoint-Config">
                                                   <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
                                                                  <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
                                                   </pre-handler-chain>
                                    </endpoint-config>
                     </subsystem>
      ...
      </profile>
      

       

      -host.xml

       

      <host name="master" xmlns="urn:jboss:domain:1.2">
          <servers>
        
                          <server name="full-ha-server-1" group="cluster-server-group" auto-start="true">
                  <socket-bindings port-offset="100"/>
              </server>
          </servers>
                ...
      </host>
      

       

      Slave1 node:

       

       

      -Domain.xml

       

      <subsystem xmlns="urn:jboss:domain:webservices:1.1">
                      <modify-wsdl-address>true</modify-wsdl-address>
                      <wsdl-host>${jboss.bind.address:127.0.0.1}</wsdl-host>
                      <endpoint-config name="Standard-Endpoint-Config"/>
                      <endpoint-config name="Recording-Endpoint-Config">
                          <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
                              <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
                          </pre-handler-chain>
                      </endpoint-config>
      </subsystem>
      

       

      -host.xml

      <host name="slave1" xmlns="urn:jboss:domain:1.2">
                <security-realms>
        
                  <security-realm name="ManagementRealm">
                                              <server-identities>
                                                 <secret value="MTIzMTIz="/>
                                       </server-identities>
                                    </security-realm>
                          ...
                </security-realms>
                ...
                 <domain-controller>
             <remote host="${jboss.domain.master.address:192.168.73.12}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
             <!-- Alternative remote domain controller configuration with a host and port -->
             <!-- <remote host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}"/> -->
          </domain-controller>
                ...
                 <servers>
        
                          <server name="full-ha-server-2" group="cluster-server-group" auto-start="true">
                  <socket-bindings port-offset="100"/>
             </server>
      
      
          </servers>
      </host>
      

       

      And this is my httpd.conf

       

      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
      LoadModule slotmem_module modules/mod_slotmem.so
      LoadModule manager_module modules/mod_manager.so
      LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
      LoadModule advertise_module modules/mod_advertise.so
      LoadModule authz_host_module modules/mod_authz_host.so
      
      
      Listen 192.168.72.101:8888
      <VirtualHost 192.168.72.101:8888>
      
      
                <Location />
                  Order deny,allow
                  Allow from all
                </Location>
                <Location /mod_cluster_manager>
                          SetHandler mod_cluster-manager
                          Order deny,allow
                          Allow from all
                </Location>
                KeepAliveTimeout 60
                MaxKeepAliveRequests 0
                AllowDisplay On
                ManagerBalancerName cluster-server-group
                ServerAdvertise On
                EnableMCPMReceive
      
      
      </VirtualHost>
      

       

      Then I start master node with this param:

       

       

      domain.bat -b 192.168.73.12

       

       

      After Master node is started. I open one in my wsdl files to check soap:address , follow this path:

      \domain\servers\full-ha-server-2\data\wsdl\my_ear-1.01.20-SNAPSHOT.ear\my_service-1.01.20-SNAPSHOT.jar\TestService.wsdl
      

       

       

      soap:address in master node

      <soap:address location="http://192.168.73.12:8180/my_service-1.01.20-SNAPSHOT/TestService/TestService"/>
      

       

       

      After that, I start slave1 node with this param:

      domain.bat -b 192.168.72.101
      

       

      and this is soap:address is slave1 node

      <soap:address location="http://192.168.72.101:8180/my_service-1.01.20-SNAPSHOT/TestService/TestService"/>
      

       

       

      I can use SOAPSonar Personal and test direct on above addresses --> work fine

      Because I just have 2 pc, so I installed Apache httpd on 192.168.72.101 (slave1)

       

       

      Test with cluster-demo:

      - Start master and slave1 node

      - Access to 192.168.72.101:8888/cluster-demo. --> work fine (request is redirect to master node)

      - Stop master node in Jboss Management

      - Request to 192.168.72.101:8888/cluster-demo. --> work fine (request is redirect to slave1 node)

       

       

      Test session replication with cluster-demo:

      - Start master and slave1 node

      - Access to 192.168.72.101:8888/cluster-demo/put.jsp --> work fine (request is redirect to master node)

      - Stop master node

      - Access to 192.168.72.101:8888/cluster-demo/get.jsp --> It doesn't work, I got session Null

       

       

      Test with my web services:

      - Restart master node in Jboss Management

      - Use SOAPSonar Personal invoke to httpd, (http://192.168.72.101:8888/my_service-1.01.20-SNAPSHOT/TestService/TestService) - request go to slave1 node --> Work fine

      - Stop slave1 node

      - Re-invoke that service, - It dose not work as my expectation, I see a message "Unable connect to....".

       

       

       

       

      Finally, I have some question:

      session replication:

      - I followed on the guide on https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto, but the result is difference. Do I miss something?

      - Do somebody know which module Jboss use for session replication? HornetQ or something....?

       

       

      And about my web service:

      - Is possible invoke the endpoint web service through httpd? I think yes but I don't know how to config?

      - I deployed my_ear to Glassfish 3, but the soap:address is quite difference. I can invoke soap:address without the name "my_service-1.01.20-SNAPSHOT". Can I config on jboss to get the result like Glassfiss? like this:

      http://192.168.72.101:8888/TestService/TestService
      

       

       

      Any Ideas Welcome.