Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции? / 22 сообщений из 22, страница 1 из 1
20.08.2013, 17:12:34
    #38372299
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Всем здравствуйте!
Подскажите пожалуйста, как заставить 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
20.08.2013, 17:19:43
    #38372314
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
http://stackoverflow.com/a/10967605
JTA транзакцией нужно управлять другими методами.
Почему бы просто не использовать CMT - не понятно. ( http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html)
...
Рейтинг: 0 / 0
20.08.2013, 17:24:00
    #38372323
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Благодарю за ответ... но вторая ссылка не работает.
...
Рейтинг: 0 / 0
20.08.2013, 17:28:05
    #38372329
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
РинБлагодарю за ответ... но вторая ссылка не работает.
И некому же скобку убрать в адресной строке браузера...
http://docs.oracle.com/javaee/6/tutorial/doc/bncij.html
...
Рейтинг: 0 / 0
20.08.2013, 17:32:47
    #38372340
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Извиняюсь не обратил внимания на скобку...
Если я правильно понял, то 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
20.08.2013, 17:37:43
    #38372352
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
РинЕсли я правильно понял, то 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
20.08.2013, 18:10:28
    #38372408
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Да с конкретной целью, что возможно что я не так что то делаю....
Использую в проекте 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
20.08.2013, 18:11:52
    #38372411
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Может таки заменить JTA на локальный? Все равно не знаете зачем оно нужно.
...
Рейтинг: 0 / 0
20.08.2013, 18:24:21
    #38372429
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Нельзя, т.к. должен соединяться с базой через DataSourse настроенный на WebLogic.
...
Рейтинг: 0 / 0
20.08.2013, 19:18:01
    #38372491
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Еще вопрос, при протухании транзакции, т.е. завершении по 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
21.08.2013, 15:30:49
    #38373470
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
РинЕще вопрос, при протухании транзакции, т.е. завершении по Timeout, как заново активировать транзакцию?Стартануть новую. Можно с тем же запросом, т.к. предыдущий не был зафиксирован.
...
Рейтинг: 0 / 0
22.08.2013, 12:22:26
    #38374414
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Basil A. SidorovРинЕще вопрос, при протухании транзакции, т.е. завершении по Timeout, как заново активировать транзакцию?Стартануть новую. Можно с тем же запросом, т.к. предыдущий не был зафиксирован.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Да, против использования JTA. В итоге он мне и помог разобраться.
...
Рейтинг: 0 / 0
22.08.2013, 14:17:55
    #38374667
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
РинМогу ошибаться конечно, но на сколько я понял... 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
22.08.2013, 15:07:24
    #38374781
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
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
22.08.2013, 15:14:56
    #38374795
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
Кстати, хочу обратить внимание, что JTA, XA и two phase commit это не слова синонимы. А совершенно разные конкретные понятия.
...
Рейтинг: 0 / 0
22.08.2013, 17:11:28
    #38375046
Рин
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как заставить EntityManager откатывать изменения, т.е. делать rollback для транзакции?
BlazkowiczКстати, хочу обратить внимание, что JTA, XA и two phase commit это не слова синонимы. А совершенно разные конкретные понятия.

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


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