Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
67555655
Shardingsphere
项目概览
apache
/
Shardingsphere
通知
56
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Shardingsphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
67555655
编写于
12月 25, 2018
作者:
C
cherrylzhao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add Transactional recovery function for atomikos XA.
上级
1c322580
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
51 addition
and
16 deletion
+51
-16
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-spi/src/main/java/io/shardingsphere/transaction/spi/xa/XATransactionManager.java
...ardingsphere/transaction/spi/xa/XATransactionManager.java
+14
-0
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-xa/src/main/java/io/shardingsphere/transaction/xa/convert/datasource/ShardingXADataSource.java
...ansaction/xa/convert/datasource/ShardingXADataSource.java
+2
-0
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-xa/src/main/java/io/shardingsphere/transaction/xa/handler/XAShardingTransactionHandler.java
.../transaction/xa/handler/XAShardingTransactionHandler.java
+15
-3
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-xa/src/main/java/io/shardingsphere/transaction/xa/manager/AtomikosTransactionManager.java
...re/transaction/xa/manager/AtomikosTransactionManager.java
+19
-13
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-xa/src/main/resources/jta.properties
...ding-transaction-2pc-xa/src/main/resources/jta.properties
+1
-0
未找到文件。
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-spi/src/main/java/io/shardingsphere/transaction/spi/xa/XATransactionManager.java
浏览文件 @
67555655
...
...
@@ -55,4 +55,18 @@ public interface XATransactionManager extends ShardingTransactionManager {
* @return transaction manager
*/
TransactionManager
getUnderlyingTransactionManager
();
/**
* Register recovery resource.
* @param dataSourceName data source name
* @param xaDataSource XA data source
*/
void
registerRecoveryResource
(
String
dataSourceName
,
XADataSource
xaDataSource
);
/**
* Remove recovery resource.
* @param dataSourceName data source name
* @param xaDataSource XA data source
*/
void
removeRecoveryResource
(
String
dataSourceName
,
XADataSource
xaDataSource
);
}
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-xa/src/main/java/io/shardingsphere/transaction/xa/convert/datasource/ShardingXADataSource.java
浏览文件 @
67555655
...
...
@@ -19,6 +19,7 @@ package io.shardingsphere.transaction.xa.convert.datasource;
import
io.shardingsphere.core.constant.DatabaseType
;
import
io.shardingsphere.core.util.ReflectiveUtil
;
import
lombok.Getter
;
import
lombok.RequiredArgsConstructor
;
import
javax.sql.XAConnection
;
...
...
@@ -36,6 +37,7 @@ import java.util.logging.Logger;
* @author zhaojun
*/
@RequiredArgsConstructor
@Getter
public
final
class
ShardingXADataSource
implements
XADataSource
{
private
final
XADataSource
xaDataSource
;
...
...
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-xa/src/main/java/io/shardingsphere/transaction/xa/handler/XAShardingTransactionHandler.java
浏览文件 @
67555655
...
...
@@ -50,9 +50,11 @@ public final class XAShardingTransactionHandler extends ShardingTransactionHandl
private
DatabaseType
databaseType
;
private
final
XATransactionManager
xaTransactionManager
=
XATransactionManagerSPILoader
.
getInstance
().
getTransactionManager
();
@Override
public
ShardingTransactionManager
getShardingTransactionManager
()
{
return
XATransactionManagerSPILoader
.
getInstance
().
getTransactionManager
()
;
return
xaTransactionManager
;
}
@Override
...
...
@@ -62,21 +64,31 @@ public final class XAShardingTransactionHandler extends ShardingTransactionHandl
@Override
public
void
registerTransactionDataSource
(
final
DatabaseType
databaseType
,
final
Map
<
String
,
DataSource
>
dataSourceMap
)
{
SHARDING_XA_DATA_SOURCE_MAP
.
clear
();
removeTransactionDataSource
();
this
.
databaseType
=
databaseType
;
try
{
for
(
Map
.
Entry
<
String
,
DataSource
>
entry
:
dataSourceMap
.
entrySet
())
{
DataSourceParameter
parameter
=
DataSourceSwapperRegistry
.
getSwapper
(
entry
.
getValue
().
getClass
()).
swap
(
entry
.
getValue
());
ShardingXADataSource
shardingXADataSource
=
ShardingXADataSourceUtil
.
createShardingXADataSource
(
databaseType
,
entry
.
getKey
(),
parameter
);
SHARDING_XA_DATA_SOURCE_MAP
.
put
(
entry
.
getKey
(),
shardingXADataSource
);
xaTransactionManager
.
registerRecoveryResource
(
entry
.
getKey
(),
shardingXADataSource
.
getXaDataSource
());
}
}
catch
(
final
Exception
ex
)
{
log
.
error
(
"Failed to register transaction datasource of XAShardingTransactionHandler"
);
}
}
private
void
removeTransactionDataSource
()
{
if
(!
SHARDING_XA_DATA_SOURCE_MAP
.
isEmpty
())
{
for
(
ShardingXADataSource
each
:
SHARDING_XA_DATA_SOURCE_MAP
.
values
())
{
xaTransactionManager
.
removeRecoveryResource
(
each
.
getDatasourceName
(),
each
.
getXaDataSource
());
}
}
SHARDING_XA_DATA_SOURCE_MAP
.
clear
();
}
@Override
public
void
synchronizeTransactionResource
(
final
String
datasourceName
,
final
Connection
connection
,
final
Object
...
properties
)
throws
SQLException
{
public
synchronized
void
synchronizeTransactionResource
(
final
String
datasourceName
,
final
Connection
connection
,
final
Object
...
properties
)
throws
SQLException
{
try
{
ShardingXADataSource
shardingXADataSource
=
SHARDING_XA_DATA_SOURCE_MAP
.
get
(
datasourceName
);
Preconditions
.
checkNotNull
(
shardingXADataSource
,
"Could not find ShardingXADataSource of `%s`"
,
datasourceName
);
...
...
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-xa/src/main/java/io/shardingsphere/transaction/xa/manager/AtomikosTransactionManager.java
浏览文件 @
67555655
...
...
@@ -17,6 +17,9 @@
package
io.shardingsphere.transaction.xa.manager
;
import
com.atomikos.datasource.xa.jdbc.JdbcTransactionalResource
;
import
com.atomikos.icatch.config.UserTransactionService
;
import
com.atomikos.icatch.config.UserTransactionServiceImp
;
import
com.atomikos.icatch.jta.UserTransactionManager
;
import
io.shardingsphere.core.constant.DatabaseType
;
import
io.shardingsphere.core.exception.ShardingException
;
...
...
@@ -40,25 +43,17 @@ import javax.transaction.TransactionManager;
*/
public
final
class
AtomikosTransactionManager
implements
XATransactionManager
{
private
final
UserTransactionManager
underlyingTransactionManager
;
private
final
UserTransactionManager
underlyingTransactionManager
=
new
UserTransactionManager
()
;
public
AtomikosTransactionManager
()
{
underlyingTransactionManager
=
new
UserTransactionManager
();
init
();
}
private
final
UserTransactionService
userTransactionService
=
new
UserTransactionServiceImp
();
private
void
init
()
{
try
{
underlyingTransactionManager
.
init
();
}
catch
(
SystemException
ex
)
{
throw
new
ShardingException
(
ex
);
}
public
AtomikosTransactionManager
()
{
userTransactionService
.
init
();
}
@Override
public
void
destroy
()
{
underlyingTransactionManager
.
setForceShutdown
(
true
);
underlyingTransactionManager
.
close
();
userTransactionService
.
shutdown
(
true
);
}
@Override
...
...
@@ -112,4 +107,15 @@ public final class AtomikosTransactionManager implements XATransactionManager {
public
TransactionManager
getUnderlyingTransactionManager
()
{
return
underlyingTransactionManager
;
}
@Override
public
void
registerRecoveryResource
(
final
String
dataSourceName
,
final
XADataSource
xaDataSource
)
{
userTransactionService
.
registerResource
(
new
JdbcTransactionalResource
(
dataSourceName
,
xaDataSource
));
}
@Override
public
void
removeRecoveryResource
(
final
String
dataSourceName
,
final
XADataSource
xaDataSource
)
{
userTransactionService
.
removeResource
(
new
JdbcTransactionalResource
(
dataSourceName
,
xaDataSource
));
}
}
sharding-transaction/sharding-transaction-2pc/sharding-transaction-2pc-xa/src/main/resources/jta.properties
浏览文件 @
67555655
com.atomikos.icatch.serial_jta_transactions
=
false
com.atomikos.icatch.automatic_resource_registration
=
false
com.atomikos.icatch.default_jta_timeout
=
300000
com.atomikos.icatch.max_actives
=
10000
com.atomikos.icatch.checkpoint_interval
=
50000
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录