одна из них это то, что я использовал thread pool`ы GFv2. Эта часть не является частью стандарта javaee как скажем time services, и по этому api легко и непренужденно изменилось
В своем предыдущем посте я описывал как это делается в GFv2
...
WorkManager workManager = WorkManagerFactory.getWorkManager("threadpoolname");
...
Поковырявшись в исходниках GFv2.1, посмотрим что же происходило на самом деле:appserv-core/src/java/com/sun/enterprise/connectors/work/WorkManagerFactory.java:
...
public static WorkManager getWorkManager(String poolName)
throws ConnectorRuntimeException {
String className = null;
String methodName = "getInstance";
Class cls = null;
WorkManager wm = null;
try {
className = System.getProperty(WORK_MANAGER_CLASS, DEFAULT);
// Default work manager implementation is not a singleton.
if (className.equals(DEFAULT)) {
return new CommonWorkManager(poolName);
}
cls = Class.forName(className);
if (cls != null) {
Method method = cls.getMethod("getInstance", new Class[]{});
wm = (WorkManager) method.invoke(cls, new Object[] {});
}
} catch (Exception e) {
String msg = localStrings.getString("workmanager.instantiation_error");
logger.log(Level.SEVERE, msg, e);
}
return wm;
}
...
В последней версии GFv3, которую я смотрел [v3.1-b20-09_15_2010], в WorkManagerFactory нет такого метода, по этому можно просто руками сделать то же самое, хотя скорее всего это неправильно, но вот как это выглядит:
...
import com.sun.enterprise.connectors.ConnectorRuntime;
import com.sun.enterprise.connectors.work.CommonWorkManager;
...
workManager = new CommonWorkManager("threadpoolname", ConnectorRuntime.getRuntime(), "resourceAdapterName", resourceAdapter.getClass().getClassLoader());
...
эти классы находятся в библиотеках GLASSFISHv3_DIR/work-management.jar и GLASSFISHv3_DIR/connectors-runtime.jar
p.s. почитав код, не нашел как используются resourceAdapterName и classLoader, по этому в качестве resourceAdapterName использовал просто "fffuuu", а в качестве classLoader - this.getClass().getClassLoader()
