|
|
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
Помогите разобраться в этом интересном вопросе. Имеется JBoss 7.1.1 c JavaEE 6 спецификацией. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Метод принимает массив бинарных данных. Должен создать столько же документов. Вообще то рассчитываю на то, что ошибка создания одного из документов не позволит создать предыдущие документы из списка. Умом понимаю, что в данной ситуации ошибка создания второго документа не приведет к откату создания первого документа. Только вот не задача. Ошибка при создании первого документа приводит к появлению части этого документа. Такое ощущение, что метод из stateless объекта работает вне транзакции. Спасает только применение Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Почему JBoss не оборачивает все public методы интерфейса stateless объекта в транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2015, 14:14 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
Может нужен интерфейс для DocumentManager ? Чтобы прокси создать, да транзакцию стартануть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2015, 22:13 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, В проекте у меня стоит Код: java 1. 2. 3. 4. Специальных аннотаций управления транзакциями нет. Согласно спецификации, первый реализуемый интерфейс будет интерфейсом EJB объекта. Согласно этой же спецификации, Stateless объект, создаваемый в CMT, поддерживает транзакции. По умолчанию, каждый метод интерфейса работает в транзакции REQUIRED, если не описано другого поведения для EJB компонента в контейнере. По факту, я не вижу транзакции. Вот и пытаюсь узнать, где пробел в моих знаниях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 11:08 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
galsСпециальных аннотаций управления транзакциями нет. Согласно спецификации, первый реализуемый интерфейс будет интерфейсом EJB объекта. Согласно этой же спецификации, Stateless объект, создаваемый в CMT, поддерживает транзакции. По умолчанию, каждый метод интерфейса работает в транзакции REQUIRED, если не описано другого поведения для EJB компонента в контейнере. По факту, я не вижу транзакции. Вот и пытаюсь узнать, где пробел в моих знаниях. Ну, логика верная. Противоречий не вижу. Вероятно стоит логирование сконфигурировать в дебаг и посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 11:32 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, что даст настройка журнала? Я по стеку ошибки, в журнале, и так вижу, что нет обработчиков jboss чего-то там Tx. По этому и возник вопрос, Почему JBoss не оборачивает все public методы интерфейса stateless объекта в транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 13:02 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
gals, Веб-сервис и EJB в одном приложении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2015, 20:22 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
mozheyko_d, да, это единое ear приложение с несколькими war (фронт, админ, web services) и несколько ejb (jar) контейнеров. Проект собирается с помощью maven. Так сказать, всё по взрослому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2015, 13:47 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
galsВообще то рассчитываю на то, что ошибка создания одного из документов не позволит создать предыдущие документы из списка. Умом понимаю, что в данной ситуации ошибка создания второго документа не приведет к откату создания первого документа. Только вот не задача. Ошибка при создании первого документа приводит к появлению части этого документа. Такое ощущение, что метод из stateless объекта работает вне транзакции.У Вас транзакция начинается и заканчивается на методе DocumentManager.createDocument(String), поэтому и не откатывается первый документ. Кроме того, в EJB вводится все исключения делятся на application и system. Первые не откатывают транзакцию, вторые - наоборот. Читаем , там немного. И здесь будет полезно посмотреть. автор Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вы не показали класс DocumentManager, но вообще такое работать не должно по умолчанию, при CMT запрещено обращаться к UserTransaction. Что Вы еще наворотили кроме сочетания аннотаций @WebService и @WebServlet?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2015, 14:54 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМожет нужен интерфейс для DocumentManager ? Чтобы прокси создать, да транзакцию стартануть?В Java EE 6, а если быть точным в EJB 3.1, поддерживается no-interface view. Интерфейс необязателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2015, 14:57 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
WGAУ Вас транзакция начинается и заканчивается на методе DocumentManager.createDocument(String), поэтому и не откатывается первый документ. Слона-то я и не приметил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2015, 15:46 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
WGA, за подсказку, спасибо. If a system exception occurs within a transaction, the EJB container rolls back the transaction. However, if an application exception is thrown within a transaction, the container does not roll back the transaction. WGAЧто Вы еще наворотили кроме сочетания аннотаций @WebService и @WebServlet? Согласен, что не красиво. Подскажите, как правильно сделать. Описание веб сервиса: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. JBoss 7.1.1 показывает wsdl, но в wsCtx авторизация не заполнена. Приходится руками подправлять отдаваемую WSDL. Потом, говорить, бери ее как ресурс модуля. WildFly 8.2 показывает wsdl правильно и в wsCtx есть параметры авторизации. Параметр wsdlLocation можно не указывать. При наличии аннотации WebServlet, я описываю модуль сервсов как war модуль. Как результат, имею красивый адрес сервиса http://localhost:8080/app_services/Hellow?wsdl Заменяю WebServlet на Stateless. Модуль описываю как ejb. В результате адрес сервиса не красивый http://localhost:8080/ear_app-x.y.z-SNAPSHOT/ejb_modelue/Hellow/HellowServiceImpl?wsdl Получаю полный шлак. Присутствует номер текущего релиза или тестовой сборки приложения, название встроенного модуля, интерфейс и реализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2015, 22:17 |
|
||
|
JTA Транзакции в EJB приложении
|
|||
|---|---|---|---|
|
#18+
galsПри наличии аннотации WebServlet, я описываю модуль сервсов как war модуль. Как результат, имею красивый адрес сервиса http://localhost:8080/app_services/Hellow?wsdl Так оно работает, оказывается... Никогда так не делал и не видел, но надо попробовать. Похоже Ваша проблема JBoss-specific, так что помогу вряд ли. Я обычно веб-сервис определяю в WAR-модуле, без @Stateless, без "взрослых" EAR ) Тогда путь к сервису будет /<context-root>/<serviceName>, где serviceName из @WebService, так что получаются pretty URL. Хотя не уверен, верно ли это для JBoss, там CXF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 13:50 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=129&tid=2125365]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 362ms |

| 0 / 0 |
