⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netxapositive.out

📁 derby database source code.good for you.
💻 OUT
字号:
ij> xa_datasource 'wombat';ij> -------------------------------------------------- a single connection and 1 phase commit-----xa_connect ;ij> xa_start xa_noflags 0;ij> xa_getconnection;ij(XA)> -- Global transactions can not have hold cursor over commit. And hence we need to make sure the holdability is false for all jdks----- In jdk13 and lower, this Brokered Connection has its holdability false over commit so we are fine. ----- In jdk14 and higher, this Brokered Connection has its holdability true over commit. In order to set it to false, we have NoHoldForConnection ----- NoHoldForConnection uses setHoldability api on Connection to set the holdability to false. But this api exists only for jdk14 and higher----- And that is why, in jkd13 master, we see an exception nosuchmethod NoHoldForConnection;ij(XA)> drop table foo;ERROR 42Y55: 'DROP TABLE' cannot be performed on 'FOO' because it does not exist.ij(XA)> create table foo (a int);0 rows inserted/updated/deletedij(XA)> insert into foo values (0);1 row inserted/updated/deletedij(XA)> select * from foo;A          -----0          ij(XA)> run resource '/org/apache/derbyTesting/functionTests/tests/store/global_xactTable.view';ij(XA)> create view global_xactTable asselect     cast(global_xid as char(2)) as gxid,    status,    case when first_instant is NULL then 'NULL' else 'false' end as readOnly,    cast (username as char(10)) as username,    type from new org.apache.derby.diag.TransactionTable() t;0 rows inserted/updated/deletedij(XA)> select * from global_xactTable where gxid is not null order by gxid;GXID |STATUS |READ& |USERNAME |TYPE                          -----(0 |ACTIVE |false |APP |UserTransaction               ij(XA)> xa_end xa_success 0;ij(XA)> xa_commit xa_1phase 0;ij(XA)> xa_datasource 'wombat' shutdown;ERROR 08006: DERBY SQL error: SQLCODE: -1, SQLSTATE: 08006, SQLERRMC: Database 'wombat' shutdown.ij(XA)> -------------------------------------------------- two interleaving connections and prepare/commit prepare/rollback-----xa_datasource 'wombat';ij(XA)> xa_connect user 'sku' password 'testxa' ;ij(XA)> xa_start xa_noflags 1;ij(XA)> xa_getconnection;ij(XA)> -- Global transactions can not have hold cursor over commit. And hence we need to make sure the holdability is false for all jdks----- In jdk13 and lower, this Brokered Connection has its holdability false over commit so we are fine. ----- In jdk14 and higher, this Brokered Connection has its holdability true over commit. In order to set it to false, we have NoHoldForConnection ----- NoHoldForConnection uses setHoldability api on Connection to set the holdability to false. But this api exists only for jdk14 and higher----- And that is why, in jkd13 master, we see an exception nosuchmethod NoHoldForConnection;ij(XA)> insert into APP.foo values (1);1 row inserted/updated/deletedij(XA)> xa_end xa_suspend 1;ij(XA)> xa_start xa_noflags 2;ij(XA)> insert into APP.foo values (2);1 row inserted/updated/deletedij(XA)> xa_end xa_suspend 2;ij(XA)> xa_start xa_resume 1;ij(XA)> insert into APP.foo values (3);1 row inserted/updated/deletedij(XA)> xa_end xa_suspend 1;ij(XA)> xa_start xa_resume 2;ij(XA)> insert into APP.foo values (4);1 row inserted/updated/deletedij(XA)> select * from APP.global_xactTable where gxid is not null order by gxid;GXID |STATUS |READ& |USERNAME |TYPE                          -----(1 |ACTIVE |false |SKU |UserTransaction               (2 |ACTIVE |false |SKU |UserTransaction               ij(XA)> xa_end xa_success 2;ij(XA)> xa_start xa_resume 1;ij(XA)> insert into APP.foo values(5);1 row inserted/updated/deletedij(XA)> xa_end xa_success 1;ij(XA)> xa_prepare 1;ij(XA)> xa_prepare 2;ij(XA)> -- both transactions should be preparedselect * from APP.global_xactTable where gxid is not null order by gxid;GXID |STATUS |READ& |USERNAME |TYPE                          -----(1 |PREPARED |false |SKU |UserTransaction               (2 |PREPARED |false |SKU |UserTransaction               ij(XA)> xa_recover xa_startrscan;Recovered 2 in doubt transactionsTransaction 1 : {ClientXid: formatID(2), gtrid_length(6), bqual_length(6), data(776F6D62 6174776F 6D626174)}Transaction 2 : {ClientXid: formatID(1), gtrid_length(6), bqual_length(6), data(776F6D62 6174776F 6D626174)}ij(XA)> xa_recover xa_noflags;Recovered 0 in doubt transactionsij(XA)> xa_commit xa_2Phase 1;ij(XA)> xa_rollback 2;ij(XA)> -- check resultsxa_start xa_noflags 3;ij(XA)> select * from APP.global_xactTable where gxid is not null order by gxid;GXID |STATUS |READ& |USERNAME |TYPE                          -----(3 |IDLE |NULL |SKU |UserTransaction               ij(XA)> select * from APP.foo;A          -----0          1          3          5          ij(XA)> xa_end xa_success 3;ij(XA)> xa_prepare 3;ij(XA)> -- should fail with XA_NOTA because we prepared a read only transaction xa_commit xa_1Phase 3;IJ ERROR: XAER_NOTA ij(XA)> -- DERBY-246 xa_end after connection close should be ok.  ----- Also to reuse xaconnection in the same global transactionxa_getconnection;ij(XA)> xa_start xa_noflags 4;ij(XA)> create table APP.derby246  (i int);0 rows inserted/updated/deletedij(XA)> insert into APP.derby246 values(1);1 row inserted/updated/deletedij(XA)> disconnect;ij> xa_getconnection;ij(XA)> insert into APP.derby246 values(2);1 row inserted/updated/deletedij(XA)> disconnect;ij> xa_end xa_success 4;ij> xa_prepare 4;ij> xa_commit xa_2phase 4;ij> -- now connect with a local connection to make sure locks are released ----- and our values are there. Should see two rowsconnect 'wombat';ij(CONNECTION1)> select * from APP.derby246;I          -----1          2          ij(CONNECTION1)> disconnect;ij> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -