ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
1006
1006
EMPFEHLEN
-
10.06.05 15:29 #1
- Registriert seit
- May 2005
- Beiträge
- 108
Moin...
In meiner Session Bean habe ich die Funtkion "Buchung" angelgt, bei der quasie der Kontostand zweier Konten,
welche auf verschiedenen Datenbanken liegen, geändert werden soll.
Code :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
public void Buchung(Integer KNr_1, Integer KNr_2, Double Betrag) { DB_2.ejb.Server.interfaces.KontoLocalHome kontoHome = (DB_2.ejb.Server.interfaces.KontoLocalHome) ServiceLocator .getServiceLocator().lookup(DB_2.ejb.Server.interfaces.KontoLocalHome.JNDI_NAME, DB_2.ejb.Server.interfaces.KontoLocalHome.class); DB_2.ejb.Server.interfaces.Konto2LocalHome konto2Home = (DB_2.ejb.Server.interfaces.Konto2LocalHome) ServiceLocator .getServiceLocator().lookup(DB_2.ejb.Server.interfaces.Konto2LocalHome.JNDI_NAME, DB_2.ejb.Server.interfaces.Konto2LocalHome.class); try { // Hole Konto_1 bzw. dessen Kontostand DB_2.ejb.Server.interfaces.KontoLocal kontoLocal_1 = kontoHome.findByPrimaryKey(KNr_1); Double kontoKontostand_1 = kontoLocal_1.getKontostand(); // Hole Konto_2 bzw. dessen Kontostand DB_2.ejb.Server.interfaces.Konto2Local konto2Local_2 = konto2Home.findKonto2ByKontonummer2(KNr_2); Double kontoKontostand_2 = konto2Local_2.getKontostand2(); // Errechne neue Kontostände Double kontoKontostand_1_neu = new Double(kontoKontostand_1.doubleValue()- Betrag.doubleValue()); Double kontoKontostand_2_neu = new Double(kontoKontostand_2.doubleValue()+ Betrag.doubleValue()); // Zuweisung neuer Kontostand euf DB_1 kontoLocal_1.setKontostand(kontoKontostand_1_neu); //TransaktionsPrüfung --> 30sec Break durch Schleife int a= 0; for ( double i = 0; i<5000000000.0; i++){a++; } // Zuweisung neuer Kontostand euf DB_2 konto2Local_2.setKontostand2(kontoKontostand_2_neu); } catch (FinderException e) {e.printStackTrace();} }
Ich habe in der EJB-Jar.exml festgelegt, dass diese Funktion als Transaction laufen soll.
Code :1 2 3 4 5 6 7 8 9
<assembly-descriptor > <container-transaction> <method> <ejb-name>KontoService</ejb-name> <method-name>Buchung</method-name> </method> <trans-attribute>RequiresNew</trans-attribute> </container-transaction> </assembly-descriptor>
Die Schleifendurchläufe erzeugen quasie ein 30sec. break zwischen der Änderung des einen Kontostands und der Änderung
des anderen. Die funtkion an sich funtioniert auch. Wenn ich nun jedoch in dem 30sec. Break mein Netzwerkkabel
und somit die Verbindung zur zweiten DB kappe..kann er ja die zweite ÄÜnderung nicht durchführen. Er wirft dann auch
wilde Exceptions, aber trotz allem macht er die Änderung am ersten Kontostabd nicht rückgängig.
Code :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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
2005-06-10 14:50:35,855 DEBUG [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreEntityCommand.Konto] Executing SQL: UPDATE konto SET kontostand=? WHERE kontonummer=? 2005-06-10 14:50:35,855 DEBUG [org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreEntityCommand.Konto2] Executing SQL: UPDATE konto2 SET kontostand2=? WHERE kontonummer2=? 2005-06-10 14:50:35,875 DEBUG [org.jboss.util.NestedThrowable] org.jboss.util.NestedThrowable.parentTraceEnabled=true 2005-06-10 14:50:35,885 DEBUG [org.jboss.util.NestedThrowable] org.jboss.util.NestedThrowable.nestedTraceEnabled=false 2005-06-10 14:50:35,885 DEBUG [org.jboss.util.NestedThrowable] org.jboss.util.NestedThrowable.detectDuplicateNesting=true 2005-06-10 14:50:35,875 ERROR [org.jboss.ejb.plugins.LogInterceptor] TransactionRolledbackException in method: public abstract void DB_2.ejb.Service.interfaces.KontoService.Buchung(java.lang.Integer,java.lang.Integer,java.lang.Double) throws java.rmi.RemoteException, causedBy: org.jboss.tm.JBossRollbackException: Unable to commit, tx=TransactionImpl:XidImpl[FormatId=257, GlobalId=Ganz_grosses_Damentennis/35, BranchQual=, localId=35] status=STATUS_NO_TRANSACTION; - nested throwable: (javax.ejb.EJBException: Store failed; CausedByException is: Communication link failure: java.net.SocketException, underlying cause: Connection reset by peer: socket write error ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: Connection reset by peer: socket write error STACKTRACE: java.net.SocketException: Connection reset by peer: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:1764) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:1727) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1148) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278) at com.mysql.jdbc.Connection.execSQL(Connection.java:2251) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1772) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1619) at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:316) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreEntityCommand.execute(JDBCStoreEntityCommand.java:136) at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.storeEntity(JDBCStoreManager.java:651) at org.jboss.ejb.plugins.CMPPersistenceManager.storeEntity(CMPPersistenceManager.java:413) at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.storeEntity(CachedConnectionInterceptor.java:390) at org.jboss.ejb.EntityContainer.storeEntity(EntityContainer.java:743) at org.jboss.ejb.GlobalTxEntityMap$2.synchronize(GlobalTxEntityMap.java:134) at org.jboss.ejb.GlobalTxEntityMap$GlobalTxSynchronization.synchronize(GlobalTxEntityMap.java:253) at org.jboss.ejb.GlobalTxEntityMap$GlobalTxSynchronization.beforeCompletion(GlobalTxEntityMap.java:302) at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1383) at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1075) at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:296) at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:454) at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:367) at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146) at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:122) at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192) at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122) at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624) at org.jboss.ejb.Container.invoke(Container.java:870) at sun.reflect.GeneratedMethodAccessor71.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:144) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:249) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642) at org.jboss.invocation.local.LocalInvoker$MBeanServerAction.invoke(LocalInvoker.java:155) at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:104) at org.jboss.invocation.InvokerInterceptor.invokeLocal(InvokerInterceptor.java:115) at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:101) at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46) at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:55) at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:97) at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:91) at $Proxy102.Buchung(Unknown Source) at DB_2.ejb.Client.UserServlet.doPost(UserServlet.java:127) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:150) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:595) ** END NESTED EXCEPTION ** )
Sprich Geld wird vom ersten Konto zwar abgebucht aber aufs zweite nicht raufgebucht.
Genau diesen Fall wollte ich durch die Transaction ja verhindern, sprich wenn dann beide buchungen oder gar keine. Woran kann das liegen ?
Gruß
Gärtner
Ähnliche Themen
-
Eclipse macht keine Ausgaben in der Konsole
Von Karl007 im Forum C/C++Antworten: 4Letzter Beitrag: 23.12.10, 16:14 -
PHP Script macht keine ausgaben
Von Drade im Forum PHPAntworten: 9Letzter Beitrag: 20.05.06, 11:36 -
CSS-Praxis: IE und Opera + Div-Container ==>Hilfe; Firefox macht es richtig
Von Marius Heil im Forum CSSAntworten: 17Letzter Beitrag: 22.04.06, 21:54 -
Keine Macht den Drogen !!
Von Patrick Kamin im Forum Fun-ForumAntworten: 13Letzter Beitrag: 23.04.03, 16:35 -
Texttool macht keine Absätze?
Von t4fF im Forum PhotoshopAntworten: 1Letzter Beitrag: 05.11.01, 17:38





Zitieren
Login





