AFAIK, Spring seems to rely on a class that is not documented or exposed
to be used as public API.
The method signature is changed in v3 in accordance with v3's runtime
requirements.
GlassFish v3 source code is available in SVN :
https://glassfish-svn.dev.java.net/source/browse/glassfish-svn/trunk/v3/connectors/work-management/src/main/java/com/sun/enterprise/connectors/work/WorkManagerFactory.java?annotate=35635
Thanks,
-Jagadish
On Thu, 2010-02-25 at 20:39 -0500, Mark Stephens wrote:
> I'm trying to bind to a thread pool via spring 2.5.6 using glassfish
> v3 and a bean definition like this:
>
> <bean id="threadPool"
> class="org.springframework.jca.work.glassfish.GlassFishWorkManagerTaskExecutor">
> <property name="threadPoolName" value="mediaSourceTasks" />
> </bean>
>
> I get this exception when deploying:
>
> Caused by: java.lang.IllegalStateException: Could not initialize
> GlassFishWorkManagerTaskExecutor because GlassFish API is not
> available: java.lang.NoSuchMethodException: com.sun.
> enterprise.connectors.work.WorkManagerFactory.getWorkManager(java.lang.String)
> at
> org.springframework.jca.work.glassfish.GlassFishWorkManagerTaskExecutor.<init>(GlassFishWorkManagerTaskExecutor.java:52)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
> at
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
> at
> java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> at
> org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
> ... 79 more
>
> appserv-rt-2.1.jar for glassfish v2 has the method:
>
> javap -classpath appserv-rt-2.1.jar
> com/sun/enterprise/connectors/work/WorkManagerFactory
> Compiled from "WorkManagerFactory.java"
> public final class
> com.sun.enterprise.connectors.work.WorkManagerFactory extends
> java.lang.Object{
> public com.sun.enterprise.connectors.work.WorkManagerFactory();
> public static javax.resource.spi.work.WorkManager
> getWorkManager(java.lang.String) throws
> com.sun.enterprise.connectors.ConnectorRuntimeException;
> static {};
> }
>
> However for glassfish v3, the only place I see this class defined is
> in the modules/work-management.jar file. It's missing the
> getWorkManager(java.lang.String) method:
>
> javap -classpath modules/work-management.jar
> com/sun/enterprise/connectors/work/WorkManagerFactory
> Compiled from "WorkManagerFactory.java"
> public final class
> com.sun.enterprise.connectors.work.WorkManagerFactory extends
> java.lang.Object implements
> com.sun.appserv.connectors.internal.api.WorkManagerFactory{
> protected static final java.util.Map workManagers;
> public com.sun.enterprise.connectors.work.WorkManagerFactory();
> public javax.resource.spi.work.WorkManager
> createWorkManager(java.lang.String, java.lang.String);
> static void addWorkManager(java.lang.String,
> javax.resource.spi.work.WorkManager);
> static javax.resource.spi.work.WorkManager
> retrieveWorkManager(java.lang.String);
> public boolean removeWorkManager(java.lang.String);
> public javax.resource.spi.work.WorkManager
> getWorkManagerProxy(java.lang.String, java.lang.String) throws
> com.sun.appserv.connectors.internal.api.ConnectorRuntimeException;
> static {};
> }
>
> Then I got even more confused when I checked out the glassfish v3
> source from cvs and WorkManagerFactory.java ( cvs version 1.6 ) has
> this:
>
> public static WorkManager getWorkManager(String poolName)
> throws ConnectorRuntimeException {
>