2016-06-03 2 views
0

Мы никогда не использовали политику WS-Transaction до этого в Websphere, поэтому я разрабатываю прототип для ее оценки.Websphere, JAXWS, WS-Transaction - WTRN0127E: Операция заблокирована по типу политики.

Вот как структурирован прототип. Я разработал два приложения: APP_A и APP_B, используя eclipse.

  • APP_A содержит два веб-службы JAXWS, service_X и service_Y
  • service_X принимает минимальные данные, записывает его в таблицу на базе данных оракула, а затем возвращает первичный ключ в ответ
  • service_y принимает первичный ключ вернулся из service_X и некоторых других минимальных данных, записывает его в другую таблицу в той же базе данных оракула, а затем возвращает первичный ключ в ответ
  • APP_B содержит один JAXWS веб-сервис, service_Z
  • service_z принимает все данные, необходимые для отправлять Арканзас Equest к service_x и service_y, и делает это возвращение как первичные ключи вернулись из service_x и service_y в своем ответ

как APP_A и APP развертываются Websphere 8.5.5.9, и был успешно испытан.

Затем с помощью консоли администратора Websphere, я создал новую политику приложения установить и включал в себя WS-транзакций политики. Затем я привязал эту политику к политикам провайдера в APP_A и политикам клиентов в APP_B, а затем перезапустил Websphere.

Затем я отправил запрос в APP_B, из файлов журнала я вижу, что запрос успешно принимается service_z в APP_B, но когда он пытается отправить запрос на service_x в APP_A, сообщается о следующей ошибке:

[02/06/16 11:53:43:040 BST] 00000076 AxisEngine E org.apache.axis2.engine.AxisEngine receive WTRN0127E: Operation blocked by policy type configuration. 

Я следил за несколькими статьями из статей разработчиков IBM, которые подразумевают, что все должно работать, просто применяя политики через консоль администратора, но, к сожалению, я все еще сталкиваюсь с этой ошибкой.

Я подозреваю, что мне может потребоваться включить что-то в заголовок служебного вызова, но я не уверен, что это такое или как его достичь.

Одна из статей, предлагаемая с использованием инструмента IBM Rational Application Developer, экспортирует политики из консоли администратора и затем импортирует их в проект до развертывания. Я попробовал это с помощью IBM RAD 9.11 в соответствии с инструкциями, но по-прежнему не решает проблемы.

Любая помощь/совет будут оценены, заблаговременно за вашу помощь.

+0

Возможно, это поможет связать конкретные статьи, содержащие набор инструкций, которые вы попробовали. Например. какой тип привязок и т. д. Кажется, что любой заголовок должен был быть передан, если бы он связал политику, установленную на стороне клиента. –

+0

Это ссылки на статьи/страницы поддержки, которые я пробовал [https://www.ibm.com/support/knowledgecenter/en/was_beta/com.ibm.websphere.base.doc/ae/twbs_wstx_config_client. html? view = embed] (https://www.ibm.com/support/knowledgecenter/en/was_beta/com.ibm.websphere.base.doc/ae/twbs_wstx_config_client.html?view=embed) [https: //www.ibm.com/support/knowledgecenter/en/was_beta/com.ibm.websphere.base.doc/ae/twbs_wstx_config_ser.html?view=embed](https://www.ibm.com/support/knowledgecenter /en/was_beta/com.ibm.websphere.base.doc/ae/twbs_wstx_config_ser.html?view=embed) – David

+0

[https://www.ibm.com/support/knowledgecenter/SSAW57_8.0.0/com.ibm.websphere .nd.doc/Информация/ае/ае/twbs_wsspsptran.html] (https://www.ibm.com/support/knowledgecenter/SSAW57_8.0.0/com.ibm.websphere.nd.doc/info/ae/ae/ twbs_wsspsptran.html) – David

ответ

0

Я думаю, что вы указали обязательную политику WS-AT, но в потоке нет транзакции JTA. Предположительно, вы хотите начать транзакцию в APP_B и использовать WS-AT для распространения этой транзакции на запросы service_X и service_Y, чтобы вся работа координировалась в рамках одной транзакции. Если service_Z является POJO, вы можете использовать UserTransaction для начала/фиксации транзакции, или вы можете просто использовать один запрос в EJB с CMT для переноса нескольких запросов веб-сервисов на бэкэнд-услуги.ПРИМЕЧАНИЕ. PolicySet не будет автоматически запускать транзакцию JTA для вас - самый простой способ подумать о WS-AT заключается в том, что для веб-служб используется то, что JTS/OTS для CORBA/IIOP (т. Е. Запросы EJB) - поэтому жизненный цикл транзакции через JTA на сервере приложений J2EE и распространении транзакций, а координация 2PC - через WS-AT для веб-сервисов. Способ думать о конфигурации WS-AT PolicySet заключается в том, что на стороне реквестера он определяет, будет ли распространяться существующая транзакция JTA в потоке по запросу (и должна ли она следить за тем, чтобы транзакция должна была присутствовать) - на провайдере -side определяет, следует ли импортировать и выполнять в контексте транзакции WS-AT, если он присутствует, и действительно ли он предназначен для вызова сеанса, если не существует контекста tran. Надеюсь, это поможет.

+0

Привет, Дэн, спасибо за вашу помощь. Я добавлю некоторые комментарии ниже, чтобы ответить на заданные вами вопросы. – David

+0

Да, это правильно, политика ws-transaction установлена ​​в обязательную. – David

+0

APP_A содержит service_X и service_Y, обе эти службы работают независимо друг от друга, получая транзакцию из WebSphereUowTransactionManager. APP_B по существу является POJO с аннотациями, что делает его службой JAXWS, которая вызывает как service_X, так и service_Y. – David

0

Не уверен, что вы имеете в виду весенний класс WebSphereUwTransactionManager или UOWManager WebSphere. Если вы хотите, чтобы каждая транзакция выполнялась всеми веб-службами, вам нужно запустить ее в service_Z - поскольку мы, кажется, говорим POJOs/mock сервлеты, то в стандартном J2EE вы просто просматриваете интерфейс UserTransaction в jndi и начинаете вызов/commit (если вы используете Spring, то их интерфейсы будут делать эквивалентную вещь под обложками - на сервере приложений это просто транзакция JTA, связанная с текущим потоком). С помощью PolicySets, настроенных для обязательного WS-AT, транзакция будет распространяться по запросам JAX-WS, а целевые службы будут выполняться в рамках этой транзакции, поэтому вам не требуется (или не требуется) явное взаимодействие с менеджером транзакций JTA (vanilla JTA или Spring) в этих сервисах.
С другой стороны, если вы только надеетесь, что config PolicySet создаст отдельные транзакции в service_X и service_Y, то есть, как имеющие Required/RequiresNew для EJB CMT, так что вам не нужен явный код для охвата транзакций, тогда я боюсь нет эквивалента политики WS-AT. Это, в основном, JTA для определения транзакций и WS-AT для распространения/2PC с конфигурацией polityset, позволяющей некоторую конфигурацию по распространению.

+0

Это менеджер транзакций, который использует service_X и service_Y в APP_A, - org.springframework.transaction.jta.WebSphereUowTransactionManager – David

+0

Я попробую изменить APP_B, чтобы при вызове service_Z он явно создавал UserTransaction, называет начало, а затем вызывает вызов service_X и service_Y и, наконец, вызывает commit. Я дам вам знать, что произойдет. – David

Смежные вопросы