This section contains reference information about the class loading commands clhas, clexport, and clload.
Use the clhas command to list the classes contained in the bundles deployed to VTS and to solve class loading issues.
The command accepts as a parameter the fully qualified class name (in the form package.class).
A bundle is listed only if the class can be loaded. If the class is successfully loaded a check is made if the loading was delegated to another bundle. The command lists only the leaves in the class loading hierarchy - i.e. the bundles that actually contain the class and not the ones that delegate to another bundle via import/require mechanisms.
The following examples show how to use this command.
Use the clhas to view all bundles that contain Servlet class:
osgi> clhas javax.servlet.Servlet Bundles containing [javax.servlet.Servlet]: 14 com.springsource.javax.servlet
The following example shows how to identify a possible ClassCastException due to wrong packaging:
osgi> clhas javax.servlet.Servlet Bundles containing [javax.servlet.Servlet]: 66 myapp 14 com.springsource.javax.servlet
It's obvious that the javax.servlet package should not be present in myapp application and its packaging has to be changed. This problem can often be seen in WAR or web bundles that package Servlet/JSP classes by accident.
Use the clexport command to list the bundles that export a class or package.
The command accepts as a parameter the fully qualified class name (in the form package.class).
The command checks to see if the provided class is actually contained in a bundle. If the class is not found in a bundle, but its package is exported then a hint [class not found, package only] is displayed.
The following examples show how to use this command.
Use the clexport to view all bundles that contain Servlet class:
osgi> clexport javax.servlet.Servlet Bundles exporting [javax.servlet.Servlet]: 14 com.springsource.javax.servlet
If a bundle exports a package but the requested class is not contained the output of the command will be similar to this:
osgi> clexport javax.servlet.ServletX Bundles exporting [javax.servlet.ServletX]: 14 com.springsource.javax.servlet [class not found, package only]
Use the clload command to list the bundles that can load a class or to check if a specific bundle can load a class.
The command accepts as a parameter either:
the fully qualified class name (in the form package.class)
the fully qualified class name (in the form package.class) and the symbolic name or id of the bundle that is to be tested
The command lists not only the bundle that successfully loaded the class, but also the one that actually provides the class. This is visualized with hints like [exported by 14 com.springsource.javax.servlet].
The following examples show how to use this command.
You can use the clload to view all bundles that can load Servlet class:
osgi> clload javax.servlet.Servlet
Successfully loaded [javax.servlet.Servlet] from:
56 com.springsource.org.apache.taglibs.standard
[exported by 14 com.springsource.javax.servlet]
54 org.eclipse.virgo.apps.admin.web
[exported by 14 com.springsource.javax.servlet]
19 com.springsource.org.apache.commons.fileupload
[exported by 14 com.springsource.javax.servlet]
<... remainder omitted ...>If a bundle is to be tested, then its id can be used as a command parameter:
osgi> clload javax.servlet.Servlet 19
Successfully loaded [javax.servlet.Servlet] using class loader from:
19 com.springsource.org.apache.commons.fileupload
[exported by 14 com.springsource.javax.servlet]Or the same class load test can specify the symbolic name of the bundle:
osgi> clload javax.servlet.Servlet com.springsource.org.apache.commons.fileupload
Successfully loaded [javax.servlet.Servlet] using class loader from:
19 com.springsource.org.apache.commons.fileupload
[exported by 14 com.springsource.javax.servlet]