Axis2
  1. Axis2
  2. AXIS2-3297

Service classloading issues when undeploying and redeploying a service with the same name.

    Details

    • Type: Bug Bug
    • Status: Reopened
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 1.3
    • Fix Version/s: None
    • Component/s: kernel
    • Labels:
      None
    • Environment:
      Windows XP/Jboss 4.2.

      Description

      I have a service called 'Maker' that generates new services upon client requests. If it creates and deploys a new service called 'myService' for instance and then later removes this service (deletes from repository), and then generates an entirely new service with the same name, but with totally different functionality (ie., class name is the same, but has different functionality, the service.xml is similar, and the wsdl is totally different), it appears that when the client invokes the new service that the original service's (the service that was removed) class is executed instead of the class that is associated with the new service. It appears that Axis2 is performing some service caching that is not getting replaced by new service deployment. If I stop and restart the jboss server such that Axis2 is started from scratch, it loads everything just fine and the new class for that service is executed when the service is invoked by the client just as expected.

        Activity

        Hide
        Deepal Jayasinghe added a comment -

        I tested similar scenario and it worked for me. Will you be able to provide a test case or smt to regenerate the issue.

        Thanks
        Deepal

        Show
        Deepal Jayasinghe added a comment - I tested similar scenario and it worked for me. Will you be able to provide a test case or smt to regenerate the issue. Thanks Deepal
        Hide
        Tony Dean added a comment -

        I'm sorry I never provided feedback. I had some time today to look at this again and have determined the root cause.

        If you enable "application" scope for your service, Axis2 caches the serviceGroupContext in the configurationContext so there is only one instance per service. The serviceContext is associated with the serviceGroupContext and contains the actual service implementation class.

        The problem comes into play when the serviceGroup is removed from the system. Well, you think it is removed since the service is not longer callable. However, the serviceGroupContext and therefore the serviceContext are still assoicated with the system's configurationContext. Therefere, if someone comes along and creates a new serviceGroup by the same name, the same "old" serviceGroupContext and serviceContext will be used... and therefore, the old service implemenation class will try to be used with the new service... this causes big problems.

        The only remedy is to restart Axis2 and/or the application server.

        The fix for this problem is to remove the serviceGroupContext from the configurationContext when the serviceGroup is deleted. This can be done by updating the ApplicationSessionServiceGroupContexts map.

        Show
        Tony Dean added a comment - I'm sorry I never provided feedback. I had some time today to look at this again and have determined the root cause. If you enable "application" scope for your service, Axis2 caches the serviceGroupContext in the configurationContext so there is only one instance per service. The serviceContext is associated with the serviceGroupContext and contains the actual service implementation class. The problem comes into play when the serviceGroup is removed from the system. Well, you think it is removed since the service is not longer callable. However, the serviceGroupContext and therefore the serviceContext are still assoicated with the system's configurationContext. Therefere, if someone comes along and creates a new serviceGroup by the same name, the same "old" serviceGroupContext and serviceContext will be used... and therefore, the old service implemenation class will try to be used with the new service... this causes big problems. The only remedy is to restart Axis2 and/or the application server. The fix for this problem is to remove the serviceGroupContext from the configurationContext when the serviceGroup is deleted. This can be done by updating the ApplicationSessionServiceGroupContexts map.
        Hide
        Tony Dean added a comment -

        Deepal, were you able to verify this bug? The fix appears to be simple.

        Show
        Tony Dean added a comment - Deepal, were you able to verify this bug? The fix appears to be simple.
        Hide
        k s added a comment -

        The environment i have is win2000, jdk6.0.20, tomcat5.0.28 and axis2 (1.5.1) included in our web application. After the first deployment, any change to the service class of the .aar file does not show in the wsdl. Even if restarting tomcat or the computer, cleaning temp, work files. Its amazing. The same does not happen for us in any other operating system.

        Show
        k s added a comment - The environment i have is win2000, jdk6.0.20, tomcat5.0.28 and axis2 (1.5.1) included in our web application. After the first deployment, any change to the service class of the .aar file does not show in the wsdl. Even if restarting tomcat or the computer, cleaning temp, work files. Its amazing. The same does not happen for us in any other operating system.

          People

          • Assignee:
            Unassigned
            Reporter:
            Tony Dean
          • Votes:
            1 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:

              Development