TransactionManager.smali
.class public Lcom/j256/ormlite/misc/TransactionManager;
.super Ljava/lang/Object;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/j256/ormlite/misc/TransactionManager$TransactionLevel;
}
.end annotation
# static fields
.field private static final SAVE_POINT_PREFIX:Ljava/lang/String; = "ORMLITE"
.field private static final logger:Lcom/j256/ormlite/logger/Logger;
.field private static final savePointCounter:Ljava/util/concurrent/atomic/AtomicInteger;
.field private static final transactionLevelThreadLocal:Ljava/lang/ThreadLocal;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/lang/ThreadLocal<",
"Lcom/j256/ormlite/misc/TransactionManager$TransactionLevel;",
">;"
}
.end annotation
.end field
# instance fields
.field private connectionSource:Lcom/j256/ormlite/support/ConnectionSource;
# direct methods
.method static constructor <clinit>()V
.registers 1
const-class v0, Lcom/j256/ormlite/misc/TransactionManager;
invoke-static {v0}, Lcom/j256/ormlite/logger/LoggerFactory;->getLogger(Ljava/lang/Class;)Lcom/j256/ormlite/logger/Logger;
move-result-object v0
sput-object v0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
new-instance v0, Ljava/util/concurrent/atomic/AtomicInteger;
invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicInteger;-><init>()V
sput-object v0, Lcom/j256/ormlite/misc/TransactionManager;->savePointCounter:Ljava/util/concurrent/atomic/AtomicInteger;
new-instance v0, Lcom/j256/ormlite/misc/TransactionManager$1;
invoke-direct {v0}, Lcom/j256/ormlite/misc/TransactionManager$1;-><init>()V
sput-object v0, Lcom/j256/ormlite/misc/TransactionManager;->transactionLevelThreadLocal:Ljava/lang/ThreadLocal;
return-void
.end method
.method public constructor <init>()V
.registers 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public constructor <init>(Lcom/j256/ormlite/support/ConnectionSource;)V
.registers 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput-object p1, p0, Lcom/j256/ormlite/misc/TransactionManager;->connectionSource:Lcom/j256/ormlite/support/ConnectionSource;
invoke-virtual {p0}, Lcom/j256/ormlite/misc/TransactionManager;->initialize()V
return-void
.end method
.method public static callInTransaction(Lcom/j256/ormlite/support/ConnectionSource;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Lcom/j256/ormlite/support/ConnectionSource;",
"Ljava/util/concurrent/Callable<",
"TT;>;)TT;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
const/4 v0, 0x0
invoke-static {v0, p0, p1}, Lcom/j256/ormlite/misc/TransactionManager;->callInTransaction(Ljava/lang/String;Lcom/j256/ormlite/support/ConnectionSource;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
move-result-object p0
return-object p0
.end method
.method public static callInTransaction(Lcom/j256/ormlite/support/DatabaseConnection;Lcom/j256/ormlite/db/DatabaseType;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Lcom/j256/ormlite/support/DatabaseConnection;",
"Lcom/j256/ormlite/db/DatabaseType;",
"Ljava/util/concurrent/Callable<",
"TT;>;)TT;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
const/4 v0, 0x0
invoke-static {p0, v0, p1, p2}, Lcom/j256/ormlite/misc/TransactionManager;->callInTransaction(Lcom/j256/ormlite/support/DatabaseConnection;ZLcom/j256/ormlite/db/DatabaseType;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
move-result-object p0
return-object p0
.end method
.method public static callInTransaction(Lcom/j256/ormlite/support/DatabaseConnection;ZLcom/j256/ormlite/db/DatabaseType;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
.registers 11
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Lcom/j256/ormlite/support/DatabaseConnection;",
"Z",
"Lcom/j256/ormlite/db/DatabaseType;",
"Ljava/util/concurrent/Callable<",
"TT;>;)TT;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
const-string v0, "after commit exception, rolling back to save-point also threw exception"
sget-object v1, Lcom/j256/ormlite/misc/TransactionManager;->transactionLevelThreadLocal:Ljava/lang/ThreadLocal;
invoke-virtual {v1}, Ljava/lang/ThreadLocal;->get()Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/j256/ormlite/misc/TransactionManager$TransactionLevel;
const/4 v2, 0x0
const-string v3, "restored auto-commit to true"
const/4 v4, 0x0
const/4 v5, 0x1
if-nez p1, :cond_1a
:try_start_11
invoke-interface {p2}, Lcom/j256/ormlite/db/DatabaseType;->isNestedSavePointsSupported()Z
move-result p1
if-eqz p1, :cond_18
goto :goto_1a
:cond_18
const/4 p1, 0x0
goto :goto_68
:cond_1a
:goto_1a
invoke-interface {p0}, Lcom/j256/ormlite/support/DatabaseConnection;->isAutoCommitSupported()Z
move-result p1
if-eqz p1, :cond_36
invoke-interface {p0}, Lcom/j256/ormlite/support/DatabaseConnection;->isAutoCommit()Z
move-result p1
if-eqz p1, :cond_36
invoke-interface {p0, v4}, Lcom/j256/ormlite/support/DatabaseConnection;->setAutoCommit(Z)V
:try_end_29
.catchall {:try_start_11 .. :try_end_29} :catchall_b8
:try_start_29
sget-object p1, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p2, "had to set auto-commit to false"
invoke-virtual {p1, p2}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;)V
:try_end_30
.catchall {:try_start_29 .. :try_end_30} :catchall_32
const/4 v4, 0x1
goto :goto_36
:catchall_32
move-exception p1
const/4 v4, 0x1
goto/16 :goto_b9
:cond_36
:goto_36
:try_start_36
new-instance p1, Ljava/lang/StringBuilder;
invoke-direct {p1}, Ljava/lang/StringBuilder;-><init>()V
const-string p2, "ORMLITE"
invoke-virtual {p1, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
sget-object p2, Lcom/j256/ormlite/misc/TransactionManager;->savePointCounter:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {p2}, Ljava/util/concurrent/atomic/AtomicInteger;->incrementAndGet()I
move-result p2
invoke-virtual {p1, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-interface {p0, p1}, Lcom/j256/ormlite/support/DatabaseConnection;->setSavePoint(Ljava/lang/String;)Ljava/sql/Savepoint;
move-result-object v2
if-nez v2, :cond_5b
sget-object p1, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p2, "started savePoint transaction"
invoke-virtual {p1, p2}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;)V
goto :goto_66
:cond_5b
sget-object p1, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p2, "started savePoint transaction {}"
invoke-interface {v2}, Ljava/sql/Savepoint;->getSavepointName()Ljava/lang/String;
move-result-object v6
invoke-virtual {p1, p2, v6}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;Ljava/lang/Object;)V
:try_end_66
.catchall {:try_start_36 .. :try_end_66} :catchall_b8
:goto_66
move p1, v4
const/4 v4, 0x1
:goto_68
:try_start_68
invoke-virtual {v1}, Lcom/j256/ormlite/misc/TransactionManager$TransactionLevel;->incrementAndGet()I
invoke-interface {p3}, Ljava/util/concurrent/Callable;->call()Ljava/lang/Object;
move-result-object p2
if-eqz v4, :cond_83
invoke-virtual {v1}, Lcom/j256/ormlite/misc/TransactionManager$TransactionLevel;->decrementAndGet()I
move-result p3
if-gtz p3, :cond_80
invoke-static {p0, v2}, Lcom/j256/ormlite/misc/TransactionManager;->commit(Lcom/j256/ormlite/support/DatabaseConnection;Ljava/sql/Savepoint;)V
sget-object p3, Lcom/j256/ormlite/misc/TransactionManager;->transactionLevelThreadLocal:Ljava/lang/ThreadLocal;
invoke-virtual {p3}, Ljava/lang/ThreadLocal;->remove()V
goto :goto_83
:cond_80
invoke-static {p0, v2}, Lcom/j256/ormlite/misc/TransactionManager;->release(Lcom/j256/ormlite/support/DatabaseConnection;Ljava/sql/Savepoint;)V
:try_end_83
.catch Ljava/sql/SQLException; {:try_start_68 .. :try_end_83} :catch_a8
.catch Ljava/lang/Exception; {:try_start_68 .. :try_end_83} :catch_92
.catchall {:try_start_68 .. :try_end_83} :catchall_8e
:cond_83
:goto_83
if-eqz p1, :cond_8d
invoke-interface {p0, v5}, Lcom/j256/ormlite/support/DatabaseConnection;->setAutoCommit(Z)V
sget-object p0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
invoke-virtual {p0, v3}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;)V
:cond_8d
return-object p2
:catchall_8e
move-exception p2
move v4, p1
move-object p1, p2
goto :goto_b9
:catch_92
move-exception p2
:try_start_93
invoke-virtual {v1}, Lcom/j256/ormlite/misc/TransactionManager$TransactionLevel;->decrementAndGet()I
:try_end_96
.catchall {:try_start_93 .. :try_end_96} :catchall_8e
if-eqz v4, :cond_a1
:try_start_98
invoke-static {p0, v2}, Lcom/j256/ormlite/misc/TransactionManager;->rollBack(Lcom/j256/ormlite/support/DatabaseConnection;Ljava/sql/Savepoint;)V
:try_end_9b
.catch Ljava/sql/SQLException; {:try_start_98 .. :try_end_9b} :catch_9c
.catchall {:try_start_98 .. :try_end_9b} :catchall_8e
goto :goto_a1
:catch_9c
:try_start_9c
sget-object p3, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
invoke-virtual {p3, p2, v0}, Lcom/j256/ormlite/logger/Logger;->error(Ljava/lang/Throwable;Ljava/lang/String;)V
:cond_a1
:goto_a1
const-string p3, "Transaction callable threw non-SQL exception"
invoke-static {p3, p2}, Lcom/j256/ormlite/misc/SqlExceptionUtil;->create(Ljava/lang/String;Ljava/lang/Throwable;)Ljava/sql/SQLException;
move-result-object p2
throw p2
:catch_a8
move-exception p2
invoke-virtual {v1}, Lcom/j256/ormlite/misc/TransactionManager$TransactionLevel;->decrementAndGet()I
:try_end_ac
.catchall {:try_start_9c .. :try_end_ac} :catchall_8e
if-eqz v4, :cond_b7
:try_start_ae
invoke-static {p0, v2}, Lcom/j256/ormlite/misc/TransactionManager;->rollBack(Lcom/j256/ormlite/support/DatabaseConnection;Ljava/sql/Savepoint;)V
:try_end_b1
.catch Ljava/sql/SQLException; {:try_start_ae .. :try_end_b1} :catch_b2
.catchall {:try_start_ae .. :try_end_b1} :catchall_8e
goto :goto_b7
:catch_b2
:try_start_b2
sget-object p3, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
invoke-virtual {p3, p2, v0}, Lcom/j256/ormlite/logger/Logger;->error(Ljava/lang/Throwable;Ljava/lang/String;)V
:cond_b7
:goto_b7
throw p2
:try_end_b8
.catchall {:try_start_b2 .. :try_end_b8} :catchall_8e
:catchall_b8
move-exception p1
:goto_b9
if-eqz v4, :cond_c3
invoke-interface {p0, v5}, Lcom/j256/ormlite/support/DatabaseConnection;->setAutoCommit(Z)V
sget-object p0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
invoke-virtual {p0, v3}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;)V
:cond_c3
throw p1
.end method
.method public static callInTransaction(Ljava/lang/String;Lcom/j256/ormlite/support/ConnectionSource;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Ljava/lang/String;",
"Lcom/j256/ormlite/support/ConnectionSource;",
"Ljava/util/concurrent/Callable<",
"TT;>;)TT;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
invoke-interface {p1, p0}, Lcom/j256/ormlite/support/ConnectionSource;->getReadWriteConnection(Ljava/lang/String;)Lcom/j256/ormlite/support/DatabaseConnection;
move-result-object p0
:try_start_4
invoke-interface {p1, p0}, Lcom/j256/ormlite/support/ConnectionSource;->saveSpecialConnection(Lcom/j256/ormlite/support/DatabaseConnection;)Z
move-result v0
invoke-interface {p1}, Lcom/j256/ormlite/support/ConnectionSource;->getDatabaseType()Lcom/j256/ormlite/db/DatabaseType;
move-result-object v1
invoke-static {p0, v0, v1, p2}, Lcom/j256/ormlite/misc/TransactionManager;->callInTransaction(Lcom/j256/ormlite/support/DatabaseConnection;ZLcom/j256/ormlite/db/DatabaseType;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
move-result-object p2
:try_end_10
.catchall {:try_start_4 .. :try_end_10} :catchall_17
invoke-interface {p1, p0}, Lcom/j256/ormlite/support/ConnectionSource;->clearSpecialConnection(Lcom/j256/ormlite/support/DatabaseConnection;)V
invoke-interface {p1, p0}, Lcom/j256/ormlite/support/ConnectionSource;->releaseConnection(Lcom/j256/ormlite/support/DatabaseConnection;)V
return-object p2
:catchall_17
move-exception p2
invoke-interface {p1, p0}, Lcom/j256/ormlite/support/ConnectionSource;->clearSpecialConnection(Lcom/j256/ormlite/support/DatabaseConnection;)V
invoke-interface {p1, p0}, Lcom/j256/ormlite/support/ConnectionSource;->releaseConnection(Lcom/j256/ormlite/support/DatabaseConnection;)V
throw p2
.end method
.method private static commit(Lcom/j256/ormlite/support/DatabaseConnection;Ljava/sql/Savepoint;)V
.registers 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
if-nez p1, :cond_4
const/4 v0, 0x0
goto :goto_8
:cond_4
invoke-interface {p1}, Ljava/sql/Savepoint;->getSavepointName()Ljava/lang/String;
move-result-object v0
:goto_8
invoke-interface {p0, p1}, Lcom/j256/ormlite/support/DatabaseConnection;->commit(Ljava/sql/Savepoint;)V
if-nez v0, :cond_15
sget-object p0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p1, "committed savePoint transaction"
invoke-virtual {p0, p1}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;)V
goto :goto_1c
:cond_15
sget-object p0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p1, "committed savePoint transaction {}"
invoke-virtual {p0, p1, v0}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;Ljava/lang/Object;)V
:goto_1c
return-void
.end method
.method private static release(Lcom/j256/ormlite/support/DatabaseConnection;Ljava/sql/Savepoint;)V
.registers 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
if-nez p1, :cond_4
const/4 v0, 0x0
goto :goto_8
:cond_4
invoke-interface {p1}, Ljava/sql/Savepoint;->getSavepointName()Ljava/lang/String;
move-result-object v0
:goto_8
invoke-interface {p0, p1}, Lcom/j256/ormlite/support/DatabaseConnection;->releaseSavePoint(Ljava/sql/Savepoint;)V
if-nez v0, :cond_15
sget-object p0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p1, "released savePoint transaction"
invoke-virtual {p0, p1}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;)V
goto :goto_1c
:cond_15
sget-object p0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p1, "released savePoint transaction {}"
invoke-virtual {p0, p1, v0}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;Ljava/lang/Object;)V
:goto_1c
return-void
.end method
.method private static rollBack(Lcom/j256/ormlite/support/DatabaseConnection;Ljava/sql/Savepoint;)V
.registers 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
if-nez p1, :cond_4
const/4 v0, 0x0
goto :goto_8
:cond_4
invoke-interface {p1}, Ljava/sql/Savepoint;->getSavepointName()Ljava/lang/String;
move-result-object v0
:goto_8
invoke-interface {p0, p1}, Lcom/j256/ormlite/support/DatabaseConnection;->rollback(Ljava/sql/Savepoint;)V
if-nez v0, :cond_15
sget-object p0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p1, "rolled back savePoint transaction"
invoke-virtual {p0, p1}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;)V
goto :goto_1c
:cond_15
sget-object p0, Lcom/j256/ormlite/misc/TransactionManager;->logger:Lcom/j256/ormlite/logger/Logger;
const-string p1, "rolled back savePoint transaction {}"
invoke-virtual {p0, p1, v0}, Lcom/j256/ormlite/logger/Logger;->trace(Ljava/lang/String;Ljava/lang/Object;)V
:goto_1c
return-void
.end method
# virtual methods
.method public callInTransaction(Ljava/lang/String;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Ljava/lang/String;",
"Ljava/util/concurrent/Callable<",
"TT;>;)TT;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
iget-object v0, p0, Lcom/j256/ormlite/misc/TransactionManager;->connectionSource:Lcom/j256/ormlite/support/ConnectionSource;
invoke-static {p1, v0, p2}, Lcom/j256/ormlite/misc/TransactionManager;->callInTransaction(Ljava/lang/String;Lcom/j256/ormlite/support/ConnectionSource;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
move-result-object p1
return-object p1
.end method
.method public callInTransaction(Ljava/util/concurrent/Callable;)Ljava/lang/Object;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">(",
"Ljava/util/concurrent/Callable<",
"TT;>;)TT;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/sql/SQLException;
}
.end annotation
iget-object v0, p0, Lcom/j256/ormlite/misc/TransactionManager;->connectionSource:Lcom/j256/ormlite/support/ConnectionSource;
invoke-static {v0, p1}, Lcom/j256/ormlite/misc/TransactionManager;->callInTransaction(Lcom/j256/ormlite/support/ConnectionSource;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
move-result-object p1
return-object p1
.end method
.method public initialize()V
.registers 4
iget-object v0, p0, Lcom/j256/ormlite/misc/TransactionManager;->connectionSource:Lcom/j256/ormlite/support/ConnectionSource;
if-eqz v0, :cond_5
return-void
:cond_5
new-instance v0, Ljava/lang/IllegalStateException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "dataSource was not set on "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-class v2, Lcom/j256/ormlite/misc/TransactionManager;
invoke-virtual {v2}, Ljava/lang/Class;->getSimpleName()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.end method
.method public setConnectionSource(Lcom/j256/ormlite/support/ConnectionSource;)V
.registers 2
iput-object p1, p0, Lcom/j256/ormlite/misc/TransactionManager;->connectionSource:Lcom/j256/ormlite/support/ConnectionSource;
return-void
.end method