GT 4.0 Java WS Core : User's Guide

1. Introduction

The Java WS Core User's Guide provides general end user-oriented information.

2. Command-line tools

Please see the Java WS Core Command Reference.

3. Graphical user interfaces

There is no support for this type of interface for Java WS Core.

4. Troubleshooting

4.1. Running clients from any directory

A client launched directly through the java executable might fail if ran from a directory other then the GLOBUS_LOCATION (It usually happens if the client receives notifications). To ensure that a client can be started from any directory pass a GLOBUS_LOCATION system property on the java command line set to the appropriate GLOBUS_LOCATION directory. Also, make sure to put the GLOBUS_LOCATION directory as the very first entry in the classpath used for the application.

For example on Unix/Linux:

 $ java -DGLOBUS_LOCATION=$GLOBUS_LOCATION -classpath $GLOBUS_LOCATION:mylib.jar foo.MyClass

or on Windows:

 > java -DGLOBUS_LOCATION=%GLOBUS_LOCATION% -classpath %GLOBUS_LOCATION%;mylib.jar foo.MyClass

4.2. Program fails with "Failed to acquire notification consumer home instance from registry" error

Please see Section 4.1, “Running clients from any directory” if a client fails with "Failed to acquire notification consumer home instance from registry. Caused by javax.naming.NameNotFoundException: Name services is not bound in this Context" error.

4.3.  Container warning: "The WS-Addressing 'To' request header is missing"

This warning is logged by the container if the request did not contain the necessary WS-Addressing headers. The client either did not attempt to send those headers at all or is somehow misconfigured (for example, the client used an incorrect configuration file). If you using a Java client and launching it directly using the java executable take a look at Section 4.1, “Running clients from any directory”.

4.4. java.io.IOException: Token length X > 33554432

If you see the "java.io.IOException: Token length X > Y" error in the container log it usually means you are trying to connect to HTTPS server using HTTP. For example, the service address specifies 8443 as a port number and http as the protocol name. In general, 8443 port number should be used with the https protocol, and 8080 port number should be used with the http protocol.

4.5. The standalone container appears to hang

If the standalone container appears to hang, for example the list of deployed services is not shown after a while or all requests to the container time out, please see the Debugging hanged Java process section for information on how to diagnose this problem.

4.6. org.globus.wsrf.InvalidResourceKeyException: Argument key is null / Resource key is missing

The "org.globus.wsrf.InvalidResourceKeyException: Argument key is null" (or "org.globus.wsrf.InvalidResourceKeyException: Resource key is missing") error usually indicates that a resource key was not passed with the request or that an invalid resource key was passed with the request (that is, the element QName of the resource key did not match what the service expected).

Make sure that the EPR used to invoke the service contains the appropriate resource key. If you are using some command-line tool make sure to specify the resource key using the -k option or pass a complete EPR from a file using the -e option.

4.7. General troubleshooting information

In general, if you want to investigate a problem on your own please see the Debugging and Logging section for details on how to turn on debugging. Also, please note that most of the command line clients have a -debug option that will display more detailed error messages, including the error stack traces. Also, searching the mailing lists such as [email protected] or [email protected] (before posting a message) can also be very fruitful. Finally, if you think you have found a bug please report it in our Bugzilla system. Please include as much as detail about the problem as possible.

5. Miscellaneous information

5.1. JVM entropy source

In GT 4.0.0 to 4.0.3 on Unix/Linux machines the shell scripts generated for the various Java command line tools specified the entropy generator for the JVM in an incorrect way. That caused the JVM to fallback to a slower method of obtaining the entropy and resulted in slower startup of these programs.

The fix for this issue is very simple and can be applied to any existing GT 4.0.x installation. To apply the fix first download update.xml Ant script, and ensure your GLOBUS_LOCATION environment property is properly set. Than execute (from any directory):

ant -f update.xml

After the fix is applied the startup time of the command line clients can improve by up to 60%. For more information please see Bug 4721.

5.2. Running Java Programs From Command Line

Sometimes it might be necessary to run a Java program directly using the java executable. There are two recommended ways of doing so (the GLOBUS_LOCATION environment variable must first be set in both cases):

[Important]Important

If you are not using any of these two methods please take a look at Section 4.1, “Running clients from any directory”.

5.2.1. With globus-devel-env script help

The globus-devel-env script can be used to set the proper CLASSPATH environment variable. To set the CLASSPATH on Windows execute:

 > %GLOBUS_LOCATION%\etc\globus-devel-env.bat

On Unix/Linux machines execute (for bash/sh):

 $ . $GLOBUS_LOCATION/etc/globus-devel-env.sh

or (for csh/tcsh):

 $ source $GLOBUS_LOCATION/etc/globus-devel-env.csh

Once the globus-devel-env is executed successfully run the Java program, for example:

On Windows:

 > java -DGLOBUS_LOCATION=%GLOBUS_LOCATION% foo.MyClass

On Unix/Linux:

 $ java -DGLOBUS_LOCATION=$GLOBUS_LOCATION foo.MyClass

Note: Passing -DGLOBUS_LOCATION is not necessary but will enable the client to execute from any directory.

5.2.2. Using bootstrap

Sometimes the above method might fail if the CLASSPATH environment variable is too long for the OS to handle. With the bootstrap method, a bootstrap code is executed first which sets the classpath programmatically and then invokes the specified Java program. To invoke a Java program on Windows through bootstrap execute:

 > java -cp %GLOBUS_LOCATION%\lib\bootstrap.jar -DGLOBUS_LOCATION=%GLOBUS_LOCATION% \
       org.globus.bootstrap.Bootstrap foo.MyClass

On Unix/Linux machines execute:

 $ java -cp $GLOBUS_LOCATION/lib/bootstrap.jar -DGLOBUS_LOCATION=$GLOBUS_LOCATION \
       org.globus.bootstrap.Bootstrap foo.MyClass

6. Usage statistics collection by the Globus Alliance

The following usage statistics are sent by Java WS Core by default in a UDP packet (in addition to the Java WS Core component code, packet version, timestamp, and the source IP address):

  • On container startup:

    • container id - random number
    • container type - standalone, servlet, or unknown
    • event type - container startup
    • list of services - service names only

  • On container shutdown:

    • container id - random number
    • container type - standalone, servlet, or unknown
    • event type - container shutdown
    • list of activated services - service names only (4.0.3+)
    • container uptime (4.0.3+)

If you wish to disable this feature, please see the Java WS Core System Administrator's Guide section on Usage Statistics Configuration for instructions.

Also, please see our policy statement on the collection of usage statistics.