Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-40

AS7.1 jars run against as7.2/eap6.1 cause test case (eclipse) to hang

    XMLWordPrintable

Details

    Description

      Somewhere along the line recently, EAP6.1 / AS 7.2 has a regression in remoting or xnio somehow, and this is causing blocking problems for tools.

      Recall:
      1) JBossTools bundles a set of jars capable of communicating with a running application server
      2) This single set of jars must be capable of communicating with all servers in the 7.x stream
      3) Bundling a second set of jars is not easily accomplished, but could be possible

      And:

      4) Using the as7.1.0 jars against eap6.1 in a specific unit test causes eclipse to hang

      The basic code of our test case (once we get rid of the jbt stuff wrapped around it) is basically as follows:

      		this.client = ModelControllerClient.Factory.create(details.getHost(), details.getManagementPort(),
      				getCallbackHandler());
      		this.manager = ServerDeploymentManager.Factory.create(client);
      		DeploymentPlanBuilder builder = manager.newDeploymentPlan().replace(name, file);
      		try {
      			DeploymentAction action = builder.getLastAction();
      			Future<ServerDeploymentPlanResult> planResult = manager.execute(builder.build());
      			// FREEZE HERE		
      			// This is "DeploymentOperationResult.getStatus() in the stack trace	
      			ServerDeploymentActionResult actionResult = planResult.get().getDeploymentActionResult(action.getId());
      			IStatus status = createStatus(action.getDeploymentUnitUniqueName(), action.getType().name(), actionResult);
      
      		} catch (Exception e) {
      			throw new JBoss7ManangerException(e);
      		}
      

      The actual stack trace is:

      Thread [main] (Suspended)	
      	owns: RunnableLock  (id=461)	
      	waiting for: ActiveOperationSupport$ActiveOperationImpl<T,A>  (id=462)	
      	Object.wait(long) line: not available [native method]	
      	ActiveOperationSupport$ActiveOperationImpl<T,A>(Object).wait() line: 503	
      	ActiveOperationSupport$ActiveOperationImpl<T,A>(AsyncFutureTask<T>).await() line: 192	
      	ActiveOperationSupport$ActiveOperationImpl<T,A>(AsyncFutureTask<T>).get() line: 266	
      	AbstractModelControllerClient$DelegatingCancellableAsyncFuture.get() line: 363	
      	AbstractModelControllerClient$DelegatingCancellableAsyncFuture.get() line: 317	
      	ServerDeploymentPlanResultFuture.get() line: 76	
      	ServerDeploymentPlanResultFuture.get() line: 42	
      	DeploymentOperationResult.getStatus() line: 52	
      	AS7ManagerTestUtils.waitUntilFinished(IJBoss7DeploymentResult) line: 93	
      	AS7ManagerIntegrationTest.canReplaceWar() line: 129	
      

      The list of jars we are using to communicate with the server are:

      jboss-as-controller-client-7.1.0.Final.jar
      jboss-as-protocol-7.1.0.Final.jar
      jboss-dmr-1.1.1.Final.jar
      jboss-logging-3.1.0.GA.jar
      jboss-marshalling-1.3.9.GA.jar
      jboss-remoting-3.2.7.GA.jar
      jboss-sasl-1.0.0.Final.jar
      jboss-threads-2.0.0.GA.jar
      xnio-api-3.0.3.GA.jar
      xnio-nio-3.0.3.GA.jar
      

      It was suggested in irc by ctomc that we simply replace the following jars with new jars from jboss-as 7.2 / eap6.1:

      jboss-remoting-3.2.7.GA.jar -> 3.2.15.GA
      xnio-api-3.0.3.GA.jar -> 3.0.7
      xnio-nio-3.0.3.GA.jar -> 3.0.7
      

      This approach also failed, with the following stack trace:

      java.lang.NoClassDefFoundError: org/xnio/Cancellable
        (sic)
      	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
      	at org.jboss.as.controller.client.impl.RemotingModelControllerClient.<init>(RemotingModelControllerClient.java:59)
      	at org.jboss.as.controller.client.ModelControllerClient$Factory.create(ModelControllerClient.java:211)
      	at org.jboss.as.controller.client.ModelControllerClient$Factory.create(ModelControllerClient.java:173)
      

      So it is obvious that jboss-as-controller jar from as-7.1 requires classes that are no longer present in xnio. If this is the case, it would indicate that xnio has REMOVED classes from its jar during an incremental version from 3.0.3 to 3.0.7, which would constitute an API breakage.

      So clearly for us, updating only remoting and xnio does not work. The next possible solution would be to update ALL jars, however, this led to a similar situation when using AS7.2 / Eap 6.1 jars to communicate with an AS 7.0.0 server. Again, similar to what was mentioned above, all tests passed EXCEPT the test above. The test above failed with an almost identical stack trace:

      Thread [main] (Suspended)	
      	owns: RunnableLock  (id=160)	
      	waiting for: ActiveOperationSupport$ActiveOperationImpl<T,A>  (id=161)	
      	Object.wait(long) line: not available [native method]	
      	ActiveOperationSupport$ActiveOperationImpl<T,A>(Object).wait() line: 503	
      	ActiveOperationSupport$ActiveOperationImpl<T,A>(AsyncFutureTask<T>).await() line: 192	
      	ActiveOperationSupport$ActiveOperationImpl<T,A>(AsyncFutureTask<T>).get() line: 266	
      	AbstractModelControllerClient$DelegatingCancellableAsyncFuture(AbstractDelegatingAsyncFuture<T>).get() line: 100	
      	ServerDeploymentPlanResultFuture.get() line: 76	
      	ServerDeploymentPlanResultFuture.get() line: 42	
      	DeploymentOperationResult.getStatus() line: 52	
      	AS7ManagerTestUtils.waitUntilFinished(IJBoss7DeploymentResult) line: 93	
      	AS7ManagerTestUtils.quietlyUndeploy(String, AS71Manager) line: 76	
      	AS7ManagerIntegrationTest.canReplaceWar() line: 135	
      

      No matter how you look at it, the contract has been broken. JBossTools now is looking for a specific set of jars which care capable of communicating with AS7.0, 7.1, 7.2, eap6.0, 6.1, jpp6.0, etc. Without a set of jars that can communicate with all of these servers, our tools will need to implement drastic workarounds or bundle several versions of the app server's jars within it.

      It's interesting to me that the as7.1 jars work against everything except eap6.1, and yet, the eap6.1 jars work against everything except as7.0.0.

      Attachments

        1. AS7-6779.out2.txt
          17 kB
        2. AS7-6779.stack.txt
          13 kB
        3. out.zip
          6.90 MB

        Activity

          People

            emuckenhuber_jira Emanuel Muckenhuber (Inactive)
            rob.stryker Rob Stryker (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: