одна из них это то, что я использовал 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()