jSqlBox3.0.0リリース
jSqlBoxがクロスデータベース(80の以上の方言)と、コアのJava DbUtilsフル機能データベース永続レイヤツール上に構築され、DD Lの生成、ページ区切り、複数のSQL書き込み、サブライブラリーサブテーブル、宣言型トランザクション、分散トランザクション、マスタ・スレーブ、エンティティ凝乳、クエリ、ActiveRecordのは、SQLテンプレートと他の機能と関連するエンティティ。
このアップデートの主な内容:サブライブラリーのサブテーブルのサポート分散トランザクション
GTX jSqlBox3.0.0新しいトランザクションは、分散トランザクションモジュールであり、その一般的な考えSeata似た、だけでなく、自動的にバックリバースロール記録することにより、ビジネスの侵入を低減しますが、アイデアはjSqlBox分散トランザクションを使用することですORMツールではなく、SQLの内容分析上に構築されますが、レコードは、ロールバックレコードを生成するための動作を変更、削除、エンティティを挿入されています。その結果、すべてのデータベースのための最高のクロスデータベースの互換性、サポートを実現するためにSQLサポートを犠牲にして、低いレベルに達成することは困難です。特定の実装では、それが最大の保証、完全なモデルを使用しているアーキテクチャの参照、グローバルレコードロック・スキームを組み合わせた トランザクション分散バッグ分散トランザクションの改善のSAGA記事を。
以下は、分散トランザクションの構成やプレゼンテーションです。
public class GtxTest {
SqlBoxContext[] ctx = new SqlBoxContext[3];
private static DataSource newTestDataSource() {
HikariDataSource ds = new HikariDataSource();
ds.setDriverClassName("org.h2.Driver");
ds.setJdbcUrl("jdbc:h2:mem:" + new Random().nextLong() // random h2 ds name
+ ";MODE=MYSQL;DB_CLOSE_DELAY=-1;TRACE_LEVEL_SYSTEM_OUT=0");
ds.setUsername("sa");
ds.setPassword("");
return ds;
}
@Before
public void init() {
SqlBoxContext lock = new SqlBoxContext(newTestDataSource());
lock.setName("lock");
lock.executeDDL(lock.toCreateDDL(GtxId.class));
lock.executeDDL(lock.toCreateDDL(GtxLock.class));
lock.executeDDL(lock.toCreateGtxLogDDL(Usr.class));
GtxConnectionManager lockCM = new GtxConnectionManager(lock);
for (int i = 0; i < 3; i++) {
ctx[i] = new SqlBoxContext(newTestDataSource());
ctx[i].setName("db");
ctx[i].setDbCode(i);
ctx[i].setConnectionManager(lockCM);
ctx[i].setMasters(ctx);
ctx[i].executeDDL(ctx[i].toCreateDDL(GtxTag.class));
ctx[i].executeDDL(ctx[i].toCreateDDL(Usr.class));
}
}
public void Div0Test() {
ctx[0].startTrans();
try {
new Usr().insert(ctx[0]);
new Usr().insert(ctx[1]);
new Usr().insert(ctx[1]);
new Usr().insert(ctx[2]);
System.out.println(1 / 0);//强制出错
ctx[0].commitTrans();
} catch (Exception e) {
TxResult result=ctx[0].rollbackTrans();
GtxUnlockServ.forceUnlock(ctx[0], result);
}
Assert.assertEquals(0, ctx[0].eCountAll(Usr.class));
Assert.assertEquals(0, ctx[1].eCountAll(Usr.class));
Assert.assertEquals(0, ctx[2].eCountAll(Usr.class));
}
}
上記の例では、データソース構成を含み、DDLテーブルを構築する分散トランザクションの最も単純な実証です。トランザクション内のエラーGTXトランザクションがコミットされている場合は、関係なく、トランザクションの一部が発生したコミットするかどうかの、限り、データベースがダウンし、機械ではないとして、ケーブルはいつでも中断、最終的なデータ整合性が保証され、XAプロトコルとは異なり、データの不整合があるかもしれません発生。
実施例上部GtxUnlockServ.forceUnlock(CTX [0]、結果)メソッドのみの試験のために使用され、実際のプロジェクトは、この行が除去され、GtxUnlockServ.start(CTX、loopInterval、maxLoopQty)に置き換える必要があり、別のサービス開錠方法を開き2番目のパラメータがアンロック間隔で秒、タイムアウトがデータベーストランザクションの時間よりもはるかに大きい値に設定する必要があり、3番目のパラメータは制限をロック解除のない最大数がないことを示す、0に設定することができます。
jSqlBox分散トランザクション・サポート・サブライブラリー、サブテーブル、ロックサーバの数を指定し、トランザクションの処理性能は、この場合、当然のことながら、ロック・サーバ・クラスタを配置することによって改善することができるそのような高性能(クラウド)ロックサーバ、存在しない場合、数字ロックサーバは、通常、赤色転写分散トランザクションとして、トラフィックに関連付けられている指定し、封筒には、ロック・サーバとしてのID番号を法することができます。具体的には、テスト用ディレクトリの下にウィキGtxShardDbTbLockDbTest.javaとセルを参照してください。
JSqlBoxの分散トランザクションの考え方とほぼ同時に上げSeataプロジェクトのオープンソースは、しかし、ほぼ完全の観点から、それは意味しないとき、私は、男が乾燥Seataなったが、理由は一つにORMツールとの統合により、分散高いです総務は、この分析を書くことの難しさにプロキシデータソースを基盤となるサードパーティ製のツールから、Seata SQL構文よりもはるかに小さい、とjSqlBox分散トランザクションデータソースは、唯一の直接接続をサポートし、コール・インターフェースマイクロサービスを提供していません。
:アップデートでは、以下のものが含ま
1. demoディレクトリ内のSQLテンプレートとしてBeetlの使用方法を示します。次の例は、素早くテキストクラスは、バインディングを使用して、テンプレートのテキストを検索するために使用され、コールBeetlテンプレートで、簡単にIDEの機能を使用することができます。
リスト<地図<文字列、オブジェクト>> USRs = ctx.tQueryForMapList(SelectUsers1.class、バインド( "年齢"、50、 "名前"、NULL));
2. JAVA8クラスは、ダオ・ベンチマークプログラム、実際のフォント名のリモデリングをサポートするために書かれた次のSQL例えば、簡略化され、静的な言葉遣い$ C $、$を、紹介
一覧<demouser>結果= gctx()eFindBySample。 (サンプル、 "または"、$ (U ::にgetCode)、 "=?"、PARAM( "EFG"));
$(U ::にgetCode)静的メソッドは、このエンティティの"コード"を返すも、属性名データベースの列名は、(通常は契約データベースのカラム名にちなんで名付けられたとエンティティは、一貫性の属性)
:3. JDBPROは空でないクエリの例を使用して、決定されたように、新しい方法をnonull
ctx.iQueryForMapList(「* WHERE =から選択します1。」、nonull(「%」、「などの名前は?」名前、 "%"));
4.その他の改善:
TinyTxクラスはもはや使用されているが、TinyTxAOPと改名、jDialects ColumnModelクラスモジュールの長さフィールドが削除され、精度とスケールセットフロート内のエラーを訂正します。
jSqlBoxに関連するほか5.次のサブプロジェクトもバージョン3.0.0にアップデートされ、もはや更新のために発行されませんし、次のサブプロジェクト:
jDialectsは、DDLの生成、エンティティ、変換のタイプを80以上のデータベース・ページをサポートしていますソース生成されたデータベース方言ツール
分散トランザクション機能を含むjTransactions個別の取引ツールは、
jDbProこれですjSqlBoxカーネルは、SQL関数に基づいて構築されたDbUtilsは、そのようなORMなどの機能は含まれていません
、これはプラグインつまりMyFat MyBatisのをjSqlBox MyBatisのエンティティMyBatisのCRUDなどが不足して補完するためにjSqlBoxで束ね
期待|先物
jSqlBoxを改善するために、PRをより良い髪の問題の意見を思い付くまたは提出へようこそ