Как получить JCA Workmanager на Websphere 8 для Springs WorkManagerTaskExecutor

Мы используем сервер приложений Websphere 8, и я хочу использовать менеджера серверов в нашем веб-приложении. Я пытаюсь получить ссылку на менеджера работ jca javax.resource.spi.work.Workmanager, чтобы использовать его с Springs org.springframework.jca.work.WorkManagerTaskExecutor.

Ссылка на ресурс в файле web.xml выглядит так:

<resource-ref>
 <res-ref-name>workmanager/web</res-ref-name>
 <res-type>javax.resource.spi.work.WorkManager</res-type>
 <res-auth>Container</res-auth>
 <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

Используя эту конфигурацию, я получаю следующее исключение:

Caused by: com.ibm.ws.asynchbeans.exception.AsynchBeanException: ASYN0064E: The value javax.resource.spi.work.WorkManager of the res-type resource reference element WorkManager is not right. Only the following values are allowed: com.ibm.websphere.asynchbeans.WorkManager, commonj.work.WorkManager.
at com.ibm.ws.asynchbeans.naming.WorkManagerFactory.validateWMResRef(WorkManagerFactory.java:379)
at com.ibm.ws.asynchbeans.naming.WorkManagerFactory.getObjectInstance(WorkManagerFactory.java:147)
at org.apache.aries.jndi.ObjectFactoryHelper$7.run(ObjectFactoryHelper.java:338)
at java.security.AccessController.doPrivileged(AccessController.java:362)
at org.apache.aries.jndi.Utils.doWithRestoredPrivileges(Utils.java:155)
at org.apache.aries.jndi.ObjectFactoryHelper.getObjectInstanceUsingObjectFactoryBuilders(ObjectFactoryHelper.java:336)
at org.apache.aries.jndi.ObjectFactoryHelper.doGetObjectInstance(ObjectFactoryHelper.java:136)
at org.apache.aries.jndi.ObjectFactoryHelper.access$000(ObjectFactoryHelper.java:60)
at org.apache.aries.jndi.ObjectFactoryHelper$1.run(ObjectFactoryHelper.java:98)
at java.security.AccessController.doPrivileged(AccessController.java:327)
at org.apache.aries.jndi.Utils.doPrivileged(Utils.java:146)
at org.apache.aries.jndi.ObjectFactoryHelper.getObjectInstance(ObjectFactoryHelper.java:96)
at org.apache.aries.jndi.OSGiObjectFactoryBuilder.getObjectInstance(OSGiObjectFactoryBuilder.java:57)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:349)
at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:993)
... 89 more

Здесь сказано, что моя ссылка на ресурс должна быть типа com.ibm.websphere.asynchbeans.WorkManager или commonj.work.WorkManager. Ни один из них не выходит за пределы JCA-Workmanager-Interface.

Если я переключаю тип ресурса на commonj.work.WorkManager и использую Springs org.springframework.scheduling.commonj.WorkManagerTaskExecutor в своем приложении, все работает нормально.

Чтобы заставить JCA Workmanager работать с Websphere, нужно ли мне настраивать что-то особенное на стороне сервера? Я не нашел никаких настроек в консоли администратора для переключения реализации. Websphere 8 поддерживает Java EE 6, поэтому он должен работать с JCA.


person Lykourgos    schedule 19.03.2015    source источник


Ответы (1)


Почему вы хотите использовать специфичный для JCA WorkManagerTaskExecutor, а не обычный? JCA WorkManager предназначен только для использования адаптерами ресурсов, на него не ссылаются произвольные компоненты EE, а Документация Spring для специфичного для JCA WorkManagerTaskExecutor согласуется с этим:

Это в основном предназначено для использования в реализации JCA ResourceAdapter.

Просто используйте commonj WorkManager и соответствующий WorkManagerTaskExecutor.

person Brett Kail    schedule 21.03.2015
comment
Привет, спасибо за ответ, в конце концов, я просто сделал это именно так. Теперь я использую commonj-интерфейс commonj.work.WorkManager, чтобы получить ссылку на workmanager и использовать соответствующий TaskExecutor в нашем приложении. Честно говоря, я впервые столкнулся с этим на сервере приложений, и я хотел использовать JCA-workmanager, потому что думал, что это будет более стандартный способ сделать это, потому что он указан в спецификации java ee. - person Lykourgos; 23.03.2015
comment
К сожалению, до EE 7 не существовало стандартного механизма EE для выполнения асинхронных задач. Начиная с EE 7, JSR 236 API позволяет это, и Spring имеет ConcurrentTaskExecutor для адаптации. Профиль WebSphere Application Server Liberty имеет реализацию JSR 236. - person Brett Kail; 25.03.2015