powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
22 сообщений из 22, страница 1 из 1
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372299
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте!
Подскажите пожалуйста, как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?

Работает вот такой вот код:
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
eManager.getTransaction().begin();
		
//		eManager.joinTransaction();
//		eManager.getTransaction().setRollbackOnly();
//		eManager.setFlushMode(FlushModeType.COMMIT);
		
		try {
//			eManager.persist(contract);
			EntityUtils.saveEntity(eManager, contract, contract.getContractId());
			
			if (contract.getContractStatus() == null && commonContract.getContractStatus() != null) {
				contractStatus = new ContractStatus(commonContract.getContractStatus());
				contract.setContractStatus(contractStatus);
				contractStatus.setContractId(contract.getContractId());
			} else {
				contractStatus = contract.getContractStatus();
				contractStatus.setContractStatusDate(new Date());
				contractStatus.setContractStatusUser(AlfaPolicyApplication.getInstance()
						.getCurrentShortUser().toUpperCase());
				contractStatus.setContractStatusType(commonContract.getContractStatus());
			}
			
			contractStatus.setContracts(new ArrayList<Contract>());
			contractStatus.addContracts(contract);
//			eManager.flush();
		
			contractConditionFactory = new ContractConditionFactory();
			for (Iterator<ContractVariant> itrCV = contractConditionFactory.getContractVariant(contractId).iterator();	itrCV.hasNext();) {
				contractVariant = itrCV.next();
				contractVariant.setLiabilityBeginDate(contract.getActionBeginDate());
				contractVariant.setLiabilityEndDate(contract.getActionEndDate());
//				contractVariant.setContractId(contract.getContractId());
				contractVariant.setContract(contract);
				contract.addContractVariants(contractVariant);
				
//				eManager.persist(contractVariant);
//				eManager.flush();
				contractConditionFactory.PrepareContractConditions(product, contract, contractVariant, premium, transport, eManager);
			}
//			eManager.flush();
			
			eManager.getTransaction().commit();
//			transaction.commit();
			
			eManager.getTransaction().begin();
			for (Iterator<ContractVariant> itrCV = contractConditionFactory
					.getContractVariant(contract.getContractId()).iterator();
					itrCV.hasNext();) {
				contractVariant = itrCV.next();
				contractConditionFactory.PreparePremiums(product, contract, contractVariant, premium, eManager);
				EntityUtils.saveEntity(eManager, contractVariant, contractVariant.getContractVariantId());
			}
			eManager.getTransaction().commit();
			AlfaPolicyApplication.getInstance().getMainWindow().showNotification("Завершили сохранение!!! Проверь в базе!");
			eManager.refresh(contract);
		} catch (Exception e) {
			AlfaPolicyApplication.getInstance().getMainWindow()
				.showNotification("Во время сохранения возникла ошибка! Обратитесь в SD.", Notification.TYPE_ERROR_MESSAGE);
			if (eManager.getTransaction().isActive())
				eManager.getTransaction().rollback();
			else {
				if (contractId == null) {
					eManager.getTransaction().begin();
					contract = eManager.find(Contract.class, contract.getContractId());
					eManager.remove(contract);
					eManager.getTransaction().commit();
				}
			}
			e.printStackTrace();
		}
		
		eManager.close();



Создаю транзакцию вот таким вот способом -> eManager.getTransaction().begin();
Делаю EntityUtils.saveEntity(eManager, contract, contract.getContractId());, т.е. сохраняю сущность contract в базу.
Код процедуры:
Код: java
1.
2.
3.
4.
5.
6.
public static void saveEntity(EntityManager manager, Object entity, Object Id) {
		if (Id == null)
			manager.persist(entity);
		else
			manager.merge(entity);
	}


Затем говорю commit, вот таким вот образом -> eManager.getTransaction().commit();. По ошибке происходит падение, сущность на которой произошло падение она логичным образом не вставляется в базу... а вот другие, вставлены... и какEntityManager-у сказать сделай rollback, я не понимаю, т.к. на этапе eManager.getTransaction().commit();, JPA завершает транзакцию и на этапе eManager.getTransaction().rollback(); получаем ошибку о том, что транзакция уже не активна... Люди добрые, подскажите пожалуйста, что я делаю не так?

P.S. Сервак weblogic, тип транзакции JTA
Код: java
1.
<persistence-unit name="oraPU" transaction-type="JTA">


Для тех, кто скажет, что нужно работать через eManager.joinTransaction();, пробовал, валится с ошибкой, не могу найти активную транзакцию...

Всем заранее спасибо за ответ...
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372314
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://stackoverflow.com/a/10967605
JTA транзакцией нужно управлять другими методами.
Почему бы просто не использовать CMT - не понятно. ( http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html)
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372323
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю за ответ... но вторая ссылка не работает.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372329
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РинБлагодарю за ответ... но вторая ссылка не работает.
И некому же скобку убрать в адресной строке браузера...
http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372340
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь не обратил внимания на скобку...
Если я правильно понял, то UserTransaction используется в EJB... но у меня в проекте не EJB, как мне использовать userTransaction?
Ранее пробовал ее использовать вот таким вот образом
Код: 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.
25.
26.
27.
28.
29.
try {
			transaction = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
		} catch (NamingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
			AlfaPolicyApplication.getInstance().getMainWindow()
			.showNotification("Во время сохранения возникла ошибка! Обратитесь в SD. Ошибка инициализации контекста.", Notification.TYPE_ERROR_MESSAGE);
			return;
		}
		
		try {
			transaction.begin();
		} catch (NotSupportedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
			AlfaPolicyApplication.getInstance().getMainWindow()
			.showNotification("Во время сохранения возникла ошибка! Ошибка создания транзакции.", Notification.TYPE_ERROR_MESSAGE);
			return;
		} catch (SystemException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		try {
			System.out.println("transaction.getStatus() = " + transaction.getStatus());
		} catch (SystemException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}


Падала сразу на loockup... что я тут неверно делаю... извиняюсь за возможно глупые вопросы, но я новичок в данном деле.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372352
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РинЕсли я правильно понял, то UserTransaction используется в EJB... но у меня в проекте не EJB, как мне использовать userTransaction?
А как нам узнать что у вас в проекте, если не EJB и вы нам не сообщаете. Если есть Spring, то можно в нем прописать использование JTA менеджера транзакций
http://forum.springsource.org/showthread.php?58527-transaction-type-quot-JTA-quot-quot-RESOURCE_LOCAL-quot

РинПадала сразу на loockup...
Оно не "падала". А сообщало конкретую ошибку, которую почему-то все стесняются приводить на форумах.

Ну, и JTA в PU вы же тоже с какой-то конкретной целью указали?
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372408
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да с конкретной целью, что возможно что я не так что то делаю....
Использую в проекте EclipseLink, ни Spring-a, ни EJB-ки, ничего такого в проекте не используется.

Я извиняюсь за дезинформацию... падает на eManager.joinTransaction();

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
20.08.2013 18:07:19 com.vaadin.Application terminalError
SEVERE: Terminal error:
com.vaadin.event.ListenerMethod$MethodException: Invocation of method buttonClick in ru.alfa.alfapolicy.products.greencard.GreenCardContract$1 failed.
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:530)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
	at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1219)
	at com.vaadin.ui.Button.fireClick(Button.java:567)
	at com.vaadin.ui.Button.changeVariables(Button.java:223)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.changeVariables(AbstractCommunicationManager.java:1460)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1404)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1329)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:761)
	at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:325)
	at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Caused by: javax.persistence.TransactionRequiredException: 
Exception Description: No transaction is currently active
	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionWrapper.throwCheckTransactionFailedException(EntityTransactionWrapper.java:113)
	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionWrapper.checkForTransaction(EntityTransactionWrapper.java:50)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.checkForTransaction(EntityManagerImpl.java:1776)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.joinTransaction(EntityManagerImpl.java:1808)
	at ru.alfa.alfapolicy.entities.factory.ContractFactory.SaveContract(ContractFactory.java:608)
	at ru.alfa.alfapolicy.products.greencard.GreenCardContract.SaveGreenCardContract(GreenCardContract.java:290)
	at ru.alfa.alfapolicy.products.greencard.GreenCardContract$1.buttonClick(GreenCardContract.java:327)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
	... 24 more
<==transactionEnd



Т.к. читал, что в случае, если используется тип транзакции JTA, то нужно пользоваться данным методом.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372411
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может таки заменить JTA на локальный? Все равно не знаете зачем оно нужно.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372429
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нельзя, т.к. должен соединяться с базой через DataSourse настроенный на WebLogic.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38372491
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос, при протухании транзакции, т.е. завершении по Timeout, как заново активировать транзакцию?

При сохранении сидел в отладчике, на сервере был настроен timeout на 30 сек. они благополучно истекли и я получил ошибку, что транзакция завершена по timeout. При повторном сохранении получаю такую ошибку:
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
java.lang.IllegalStateException: 
Exception Description: No transaction is currently active
	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:77)
	at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:63)
	at ru.alfa.alfapolicy.entities.factory.ContractFactory.SaveContract(ContractFactory.java:644)
	at ru.alfa.alfapolicy.products.greencard.GreenCardContract.SaveGreenCardContract(GreenCardContract.java:290)
	at ru.alfa.alfapolicy.products.greencard.GreenCardContract$1.buttonClick(GreenCardContract.java:327)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
	at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1219)
	at com.vaadin.ui.Button.fireClick(Button.java:567)
	at com.vaadin.ui.Button.changeVariables(Button.java:223)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.changeVariables(AbstractCommunicationManager.java:1460)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1404)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1329)
	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:761)
	at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:325)
	at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3732)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38373470
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РинЕще вопрос, при протухании транзакции, т.е. завершении по Timeout, как заново активировать транзакцию?Стартануть новую. Можно с тем же запросом, т.к. предыдущий не был зафиксирован.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374414
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovРинЕще вопрос, при протухании транзакции, т.е. завершении по Timeout, как заново активировать транзакцию?Стартануть новую. Можно с тем же запросом, т.к. предыдущий не был зафиксирован.

А можно поподробнее, как это делается? При повторном нажатии на сохранить, происходит вызов transaction.begin(), но видимо транзакция не стартует, т.к. происходит выброс сообщения на transaction.commit(), что нет активной транзакции.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374420
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел решение своей проблемы, кому это интересно...

В моем случае нужно использовать nonJTA и все прекрасно работает.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374424
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное спасибо за помощь...
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374432
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РинНашел решение своей проблемы, кому это интересно...

В моем случае нужно использовать nonJTA и все прекрасно работает.
Не может быть: 14732390 !

Кстати, по одной из ссылок пробегала информация что даже Gavin King считает наличие API для управления транзакцией внутри EntityManager-а ошибкой. Потому как в большинстве случаев достаточно CMT, а в специальных случаях ручного управления проще использовать JTA API.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374504
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczРинНашел решение своей проблемы, кому это интересно...

В моем случае нужно использовать nonJTA и все прекрасно работает.
Не может быть: 14732390 !

Кстати, по одной из ссылок пробегала информация что даже Gavin King считает наличие API для управления транзакцией внутри EntityManager-а ошибкой. Потому как в большинстве случаев достаточно CMT, а в специальных случаях ручного управления проще использовать JTA API.

Ну вы же там предлагали перейти на локальный ресурс, а мне это не подходит...

А можно ссылочку? В моем случае немогу перейти на CMT, т.к. проект нужно было сдать еще вчера (как обычно...)
На счет JTA, наш системный архитектор против этого, т.к. видит определенные проблемы в дальнейшем.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374611
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РинНу вы же там предлагали перейти на локальный ресурс, а мне это не подходит...
Ну, объясните мне, пожалуйста, разницу между nonJTA и "локальным ресурсом". Я просто JEE бесовщину не практикую вот и плаваю в теории. Хочется услышать мнение практика.

РинА можно ссылочку? В моем случае немогу перейти на CMT, т.к. проект нужно было сдать еще вчера (как обычно...)

http://stackoverflow.com/questions/4709864/use-jta-transaction-or-not
https://plus.google.com/105743409453530897815/posts/du7Kkm5tsWh

РинНа счет JTA, наш системный архитектор против этого, т.к. видит определенные проблемы в дальнейшем.
Против чего "этого". Против JTA? Если архитектор не может привести конкретики, то он действует "интуитивно" и архитектором считаться не может. Тем более, если у вас есть архитектор, то он вам и должен был рассказать как нужно управлять транзакциями в проекте.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374651
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторавторРин
Ну вы же там предлагали перейти на локальный ресурс, а мне это не подходит...

Ну, объясните мне, пожалуйста, разницу между nonJTA и "локальным ресурсом". Я просто JEE бесовщину не практикую вот и плаваю в теории. Хочется услышать мнение практика.
Могу ошибаться конечно, но на сколько я понял... ResourceLocal цепляется к базе через драйвер напрямую используя логин и пароль прописанный в persistance.xml. А nonJTA это тот же DataSource на WebLogic, только использует драйвер не XA а обычный(one-phase).

авторавторРин
На счет JTA, наш системный архитектор против этого, т.к. видит определенные проблемы в дальнейшем.

Против чего "этого". Против JTA? Если архитектор не может привести конкретики, то он действует "интуитивно" и архитектором считаться не может. Тем более, если у вас есть архитектор, то он вам и должен был рассказать как нужно управлять транзакциями в проекте.

Да, против использования JTA. В итоге он мне и помог разобраться.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374667
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РинМогу ошибаться конечно, но на сколько я понял... ResourceLocal цепляется к базе через драйвер напрямую используя логин и пароль прописанный в persistance.xml. А nonJTA это тот же DataSource на WebLogic, только использует драйвер не XA а обычный(one-phase).
Сюрприз:
Код: xml
1.
2.
<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">     
     <non-jta-data-source>java:/My-JNDI-DataSource</non-jta-data-source>



РинДа, против использования JTA. В итоге он мне и помог разобраться.
Ох. Остаётся вам пожелать успехов с таким архитектором, который абстрактно против JTA, но за ручное управление транзакциями через JPA API.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374781
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczРинМогу ошибаться конечно, но на сколько я понял... ResourceLocal цепляется к базе через драйвер напрямую используя логин и пароль прописанный в persistance.xml. А nonJTA это тот же DataSource на WebLogic, только использует драйвер не XA а обычный(one-phase).
Сюрприз:
Код: xml
1.
2.
<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">     
     <non-jta-data-source>java:/My-JNDI-DataSource</non-jta-data-source>



РинДа, против использования JTA. В итоге он мне и помог разобраться.
Ох. Остаётся вам пожелать успехов с таким архитектором, который абстрактно против JTA, но за ручное управление транзакциями через JPA API.

Каюсь, не обратил внимание на transaction-type.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38374795
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, хочу обратить внимание, что JTA, XA и two phase commit это не слова синонимы. А совершенно разные конкретные понятия.
...
Рейтинг: 0 / 0
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
    #38375046
Рин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczКстати, хочу обратить внимание, что JTA, XA и two phase commit это не слова синонимы. А совершенно разные конкретные понятия.

На счет JTA и XA это понятно...
Что такое XA? Как weblogic пишет, он включает глобальные транзакции и 2-х фазные транзакции.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]