Hi. Any chance this issue has been tackled?
I'm having the same problem when performing an update with the OCommandSQL command (Orient 1.7.0). I need to roolback sometimes because of OConcurrentModificationException exceptions. The problem is since this a transaction on itself it doesn't roolback. If there is any workaround I would appreciate it ;) Kind regards, Manuel Coutinho On Saturday, June 2, 2012 at 6:40:29 PM UTC+1, Salvatore Piccione wrote: > > Hello, > > I've defined some tests on transactions (both Blueprints and Orient native > ones) in order to verify if SQL statements are aware of the transaction > context in which they are executed. > You can find a test case about the execution of SQL INSERTs into an index > and a class inside a transaction at https://gist.github.com/2859180. > It seems that such SQL statements are not aware of the transaction scope > defined in the code. In particular I found the following issues: > > - the graph element created through a SQL INSERT is not deleted when > the transaction is rolled back > - the SQL INSERT into an index doesn't work if the graph element to be > added has been defined in a transaction by using Java API (it's got a > temporary RID). In particular I get [1] if the vertex has been defined > through Blueprints API while I get [2] if the vertex has been defined > through native API. Additionally, I've discovered that: > - if you use the Blueprints API to define the vertex, you get a > temporary RID with the right cluster id (6 for Vertex and 7 for Edge) > - if you use native graph API to define the vertex, you get a > temporary RID with a temporary (i.e. negative) cluster id. This happens > even passing the name of the class in the method > OGraphDatabase.createVertex(). Any idea about this? > > I'd like to know if the SQL statement's unawareness of the transaction > scope is a known issue or I did something wrong in mt code. At the moment, > I'm forced to use only Java API to change (insert, modify and delete) my > data inside a transaction to make transaction working fine. > > TIA, > > Salvatore > > [1] Stack trace got using Blueprints API > com.orientechnologies.orient.core.exception.OCommandExecutionException: > Error on execution of command: OCommandSQL [text=INSERT INTO > index:aManualIdx(key,rid) VALUES (52,#6:-2)] > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:409) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.handleStatus(OChannelBinary.java:364) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:145) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:60) > at > com.orientechnologies.orient.client.remote.OStorageRemote.beginResponse(OStorageRemote.java:1492) > at > com.orientechnologies.orient.client.remote.OStorageRemote.command(OStorageRemote.java:703) > at > com.orientechnologies.orient.client.remote.OStorageRemoteThread.command(OStorageRemoteThread.java:191) > at > com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:60) > at > org.example.orientdb.TestIndexUsageInTransaction.testBlueprintsAPI(TestIndexUsageInTransaction.java:117) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) > at org.junit.runners.ParentRunner.run(ParentRunner.java:300) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > Caused by: java.lang.NullPointerException > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:411) > ... 32 more > > [2] Stack trace got using native API > com.orientechnologies.orient.core.exception.OCommandExecutionException: > Error on execution of command: OCommandSQL [text=INSERT INTO > index:aManualIdx(key,rid) VALUES (52,#-1:-1)] > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:409) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.handleStatus(OChannelBinary.java:364) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:145) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinaryAsynch.beginResponse(OChannelBinaryAsynch.java:60) > at > com.orientechnologies.orient.client.remote.OStorageRemote.beginResponse(OStorageRemote.java:1492) > at > com.orientechnologies.orient.client.remote.OStorageRemote.command(OStorageRemote.java:703) > at > com.orientechnologies.orient.client.remote.OStorageRemoteThread.command(OStorageRemoteThread.java:191) > at > com.orientechnologies.orient.core.command.OCommandRequestTextAbstract.execute(OCommandRequestTextAbstract.java:60) > at > org.example.orientdb.TestIndexUsageInTransaction.testNativeAPI(TestIndexUsageInTransaction.java:164) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.lang.reflect.Method.invoke(Unknown Source) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) > at > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) > at org.junit.runners.ParentRunner.run(ParentRunner.java:300) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > Caused by: java.lang.ClassCastException > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown > Source) > at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown > Source) > at java.lang.reflect.Constructor.newInstance(Unknown Source) > at > com.orientechnologies.orient.enterprise.channel.binary.OChannelBinary.createException(OChannelBinary.java:411) > ... 32 more > > > -- --- You received this message because you are subscribed to the Google Groups "OrientDB" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
