JP2014085896A - トランザクション処理方法、プログラム及びシステム - Google Patents
トランザクション処理方法、プログラム及びシステム Download PDFInfo
- Publication number
- JP2014085896A JP2014085896A JP2012235224A JP2012235224A JP2014085896A JP 2014085896 A JP2014085896 A JP 2014085896A JP 2012235224 A JP2012235224 A JP 2012235224A JP 2012235224 A JP2012235224 A JP 2012235224A JP 2014085896 A JP2014085896 A JP 2014085896A
- Authority
- JP
- Japan
- Prior art keywords
- transaction
- processing
- message
- database
- local buffer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】 一台のサーバで、送信トランザクションに受信トランザクションをインライン処理する際の処理の一貫性の問題を解決すること。
【解決手段】 この発明に従うシステムは、送信トランザクションの開始時にローカル・バッファを生成する。そして、送信処理時にメッセージをローカル・バッファに挿入する。次に送信トランザクションのコミット時、ローカル・バッファ内の全メッセージの受信トランザクション処理後、データベースのコミット処理を行う。受信トランザクションは、送信トランザクションの入れ子トランザクションとして処理を行う。
【選択図】 図6
【解決手段】 この発明に従うシステムは、送信トランザクションの開始時にローカル・バッファを生成する。そして、送信処理時にメッセージをローカル・バッファに挿入する。次に送信トランザクションのコミット時、ローカル・バッファ内の全メッセージの受信トランザクション処理後、データベースのコミット処理を行う。受信トランザクションは、送信トランザクションの入れ子トランザクションとして処理を行う。
【選択図】 図6
Description
この発明は、分散処理システムにおける、メッセージ処理技法に関する。
従来より、例えばJ2EE(Java(R)2 Enterprise Edition)により構築された、複数のサーバにデータをもつ分散処理システムにおいて、メッセージを送受信することにより、データベース・システムのトランザクションを行う技法が知られている。
J2EE上の一般的なメッセージング処理は、図1に示すように、分散処理システムの異なる2つのサーバの一方が送信側(sender)で、他方が受信側(receiver)で、送信側のサーバ102から、メッセージング・キュー110を介して、JMS(Java(R) Message Service)のような仕組みで、受信側のサーバ106にメッセージを送ることにより、トランザクションを行うものである。
より具体的には、送信側のサーバ102は、データベース104にアクセスして応答を受け取り、その後、メッセージング・キュー110にメッセージを格納し、データベース104に対してコミットするまでの送信トランザクション(SendTx)108を実行する。
一方、受信側のサーバ106は、メッセージング・キュー110からメッセージを取り出し、データベース112にアクセスして応答を受け取り、メッセージング・キュー110にメッセージを送るまでの受信トランザクション(RecvTx)114を実行する。
この際、メッセージ送受信は、実行中のトランザクション・スコープ内で処理される。また、ロールバックに応じて送受信が失敗する。またこのとき、メッセージの順序性は考慮されない。
ところで、メッセージ処理を用いたアプリケーションの設計においては、負荷を均一にするために、可能ならば、図2に示すように、同一のサーバ202を受信側サーバ兼送信側サーバとすることが望ましい。Enterprise JavaBeans(EJB)3.0では、送信処理と受信処理が同一のサーバで処理される可能性があることは、容易に特定可能である。図2において、サーバ202がデータベース204にアクセスして応答を受け取り、その後、メッセージング・キュー206にメッセージを格納し、データベース204に対してコミットするまでの送信トランザクション210を実行する。
その後、同一のサーバ202がメッセージング・キュー206からメッセージを取り出し、データベース208にアクセスして応答を受け取り、メッセージング・キュー206にメッセージを送るまでの受信トランザクション212を実行する。
最適化をさらに進めると、図3に示すように、送信と受信に同一のサーバ302を使用しつつ、データベース304に対する送信トランザクション310に、データベース308に対する受信トランザクション312をインライン処理することが考えられる。この場合、メッセージ・キュー306は、送信と受信の間のメッセージの授受には使用されない。この構成では、受信トランザクションを同期的に処理することで、メッセージのオーバーヘッドを軽減可能である。
しかし、送信トランザクションに受信トランザクションをインライン処理すると、受信トランザクションが更新したレコードを送信トランザクションが照会すること、受信トランザクションが照会したレコードを送信トランザクションが更新すること、受信トランザクションがロールバックすることなどにおいて、処理の一貫性が保証できないという課題がある。
ところで、1つのトランザクションに別のトランザクションを入れ子にする、入れ子トランザクションの技法が従来より知られている。
特開2001−188696号公報は、入れ子トランザクション実行可能なプロセスと入れ子トランザクション実行不可能なプロセスの各々により、入れ子トランザクションのサブトランザクションを実行させ、入れ子トランザクション実行可能プロセスにより実行されたサブトランザクションのコミット処理を行い、入れ子トランザクションのトップレベルトランザクションを実行させ、実行されたトップレベルトランザクションのコミット処理を行い、トップレベルトランザクションのコミット処理完了と共に、入れ子トランザクション実行不可能プロセスにより実行されたサブトランザクションのコミット処理を完了させることを開示する。しかし、ここに開示されている入れ子トランザクション実行技法は、図3に示す受信処理をインライン処理する際の、処理の一貫性の問題を解決することに適用できるものではない。
従って、この発明の目的は、一台のサーバで、送信トランザクションに受信トランザクションを同一トランザクションとして処理する際のトランザクション処理およびメッセージング処理の一貫性の問題を解決することにある。
この発明は、送信トランザクションの開始時にローカル・バッファを生成し、送信処理時にメッセージをローカル・バッファに挿入するようにすることで、上記課題を解決する。
すなわち、この発明に従うシステムはまず、送信トランザクションの開始時にローカル・バッファを生成する。そして、送信処理時にメッセージをローカル・バッファに挿入する。
次にこの発明に従うシステムは、送信トランザクションのコミット時、ローカル・バッファ内の全メッセージの受信トランザクション処理後、データベースのコミット処理を行う。
受信トランザクションは、送信トランザクションの入れ子トランザクションとして処理を行う。すなわち:
- 開始処理:何もしない。
- 照会処理:通常のデータベース照会(送信トランザクションの更新も照会可能)。
- 更新処理:更新前の値を記憶し、データベースを更新。
- コミット処理:記憶した更新前の値を消去。
- ロールバック処理:記憶した更新前の値に戻し、メッセージをメッセージ・キューに挿入する。
- 開始処理:何もしない。
- 照会処理:通常のデータベース照会(送信トランザクションの更新も照会可能)。
- 更新処理:更新前の値を記憶し、データベースを更新。
- コミット処理:記憶した更新前の値を消去。
- ロールバック処理:記憶した更新前の値に戻し、メッセージをメッセージ・キューに挿入する。
この発明によれば、送信トランザクションの開始時にローカル・バッファを生成し、送信処理時にメッセージをローカル・バッファに挿入するようにすることで、一台のサーバで、送信トランザクションに受信トランザクションをインライン処理する際の処理の一貫性の問題を解決できるという効果が得られる。
以下、図面に基づき、この発明の実施例を説明する。特に断わらない限り、同一の参照番号は、図面を通して、同一の対象を指すものとする。尚、以下で説明するのは、本発明の一実施形態であり、この発明を、この実施例で説明する内容に限定する意図はないことを理解されたい。
図4は、本発明を実施するためのハードウェア構成の一例を示す概要図である。図4において、クライアント・コンピュータ402a、402b、・・・、402kは、インターネット404を介して、Webサーバ406に接続される。
Webサーバ406は、ネットワーク408を介して、アプリケーション・サーバ410a、410b、・・・、410m及びデータベース・サーバ412a、412b、・・・、412nに接続されている。ネットワーク408は、LAN、WAN、FTTPなど、複数のサーバ・システムを接続する任意の形態のネットワークを使用することができる。データベース・サーバ412a、412b、・・・、412nにはそれぞれ、データベース414a、414b、・・・、414nが関連づれられている。データベース414a、414b、・・・、414nはそれぞれ、データベース・サーバ412a、412b、・・・、412nのローカル・ディスクに格納してもよいし、SAN(Storage Area Network)、NAS(Network Attached Storage)などで構成され、ネットワークを介してデータベース・サーバ412a、412b、・・・、412nに接続されていてもよい。
また、ここに図示されている構成では、アプリケーション・サーバとデータベース・サーバが別のハードウェア・マシンであるが、アプリケーション・サーバが構成されているマシンにデータベース・サーバも構成することにより、1台のマシンがアプリケーション・サーバとデータベース・サーバの役割を果たすようにしてもよい。
クライアント・コンピュータ402a、402b、・・・、402kから、インターネット404を介してWebサーバ406に送られたデータベースに対する照会・更新・削除などのリクエストは、アプリケーション・サーバ410a、410b、・・・、410mのどれかを介して、データベース・サーバ412a、412b、・・・、412nのうちの所定のものにルーティングされ、処理される。
図5は、Webサーバ406、アプリケーション・サーバ410、及びデータベース・サーバ412の共通の構成を示す。ここでは単にサーバ500と総称する。
サーバ500の通信インターフェース302は、ネットワーク408に接続される。通信インターフェース502はさらに、バス504に接続され、バス504には、CPU506、主記憶(RAM)508、及びハードディスク・ドライブ(HDD)510が接続されている。
図示しないが、サーバ500にはさらに、キーボード、マウス、及びディスプレイが接続され、これらによって、保守担当者が、サーバ106全体の管理やメンテナンス作業を行うようにしてもよい。
サーバ500のハードディスク・ドライブ510には、オペレーティング・システムが保存されている。ハードディスク・ドライブ510にはさらに、Java(R)仮想環境を実現するJava(R) EEが導入されている。
サーバ500がWebサーバ406またはアプリケーション・サーバ410である場合、好適には、ハードディスク・ドライブ510には、IBM(R) WebSphere(商標) Application Server(WAS)が導入されている。WASは、サーバ500にあって、Webコンテナ、EJBコンテナ、トランザクション管理等の機能をもつミドルウェアとしての役割を果たす。サーバ500がWebサーバ406である場合、Webサーバとしての機能は、WASに含まれるIBM(R) HTTP Serverによって提供される。
複数台のアプリケーション・サーバ410を統合管理するために、個々のアプリケーション・サーバ410には、WAS Deployment Managerが導入され、セットアップされる。
また、アプリケーション・サーバ410には、データベース・サーバにアクセスするためのJDBCドライバが導入され、データ・ソースが作成され、データベース接続構成が行われる。
さらにアプリケーション・サーバ410には、J2EE仕様の非同期処理を実現するために、Java(R) Message Service(JMS)クラス・ライブラリが導入され構成される。併せて、Message Oriented Middleware (MOM)ドメインが導入され、アプリケーションは、JMSを使用し、MOMと連携することで、データベースに対する非同期メッセージング・システムを構成する。
データベース・サーバ414には、DB2などのデータベース管理アプリケーションが導入されている。
尚、上記サーバ500として、これには限定されないが、インターナョナル・ビジネス・マシーンズ・コーポレーションから購入可能な、IBM(R) System X、System i、System pなどの機種のサーバを使うことができる。その際、使用可能なオペレーティング・システムは、AIX(商標)、UNIX(の商標)、Linux(商標)、Windows(商標)2003 Serverなどがある。
本発明の特徴を説明する前に、図1を再度参照して、改めて背景技術について説明する。図1において、送信トランザクション108のコードの例を示すと、以下のとおりである。
@Resource(mappedName="jms/FulfillOrderQueueConnectionFactory")
protected QueueConnectionFactory fulfillOrderQueueConnFactory;
@Resource(mappedName="jms/FulfillOrderQueue")
protected Queue fulfillQueue;
public void sendOrderFulfilledMessage(WorkOrder workOrder) {
QueueConnection con
= fulfillOrderQueueConnFactory.createQueueConnection();
QueueSession session
= con.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(fulfillQueue);
TextMessage message = session.createTextMessage();
……
sender.send(message);
@Resource(mappedName="jms/FulfillOrderQueueConnectionFactory")
protected QueueConnectionFactory fulfillOrderQueueConnFactory;
@Resource(mappedName="jms/FulfillOrderQueue")
protected Queue fulfillQueue;
public void sendOrderFulfilledMessage(WorkOrder workOrder) {
QueueConnection con
= fulfillOrderQueueConnFactory.createQueueConnection();
QueueSession session
= con.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = session.createSender(fulfillQueue);
TextMessage message = session.createTextMessage();
……
sender.send(message);
このコードで、jms/FulfillOrderQueueが送信するキューであり、sender.send(message)がトランザクショナルな送信処理である。
また、受信トランザクション114のコードの例を示すと、以下のとおりである。
@MessageDriven(mappedName=“jms/FulfillOrderQueue”,
activationConfig = {@ActivationConfigProperty(
propertyName=“destinationType”,
propertyValue=“javax.jms.Queue”)})
public class FulfillOrderMDB implements MessageListener {
@Resource
private MessageDrivenContext messageDrivenContext;
public void onMessage(Message message) {
……
}}
@MessageDriven(mappedName=“jms/FulfillOrderQueue”,
activationConfig = {@ActivationConfigProperty(
propertyName=“destinationType”,
propertyValue=“javax.jms.Queue”)})
public class FulfillOrderMDB implements MessageListener {
@Resource
private MessageDrivenContext messageDrivenContext;
public void onMessage(Message message) {
……
}}
このコードで、@MessageDriven(mappedName=“jms/FulfillOrderQueue“のところで、受信するキューがクラスに対応する。また、onMessageをトランザクションとして実行する。
この場合、図1において、送信側のサーバ102は、アプリケーション・サーバ410a、410b、・・・、410mのうちの1つであり、受信側のサーバ106は、アプリケーション・サーバ410a、410b、・・・、410mのうちの別の1つである。また、データベース104は、データベース・サーバ412a、412b、・・・、412n(及びそれぞれに関連付けられたデータベースデータベース414a、414b、・・・、414n)のうちの1つであり、データベース112は、データベース・サーバ412a、412b、・・・、412n(及びそれぞれに関連付けられたデータベースデータベース414a、414b、・・・、414n)のうちの別の1つである。
この処理において、メッセージはJMS APIを呼び出すことにより生成され、メッセージ送受信は、実行中のトランザクション・スコープで処理する。このとき、ロールバックに応じて送受信が失敗する。また、メッセージの順序性は、特別な指定がない限り、考慮されない。
図1の処理は、送信側のサーバ102と、受信側のサーバ106が別であるが、実際の処理では、送信トランザクションで更新・照会されたデータが受信トランザクションで参照されることが多い。
例えば、注文履歴を通知するメッセージ処理において、
・送信側:注文する際に商品の品目(item)を照会する。
・受信側:履歴を記録するために商品の品目を照会する。
・送信側:注文する際に商品の品目(item)を照会する。
・受信側:履歴を記録するために商品の品目を照会する。
これらのデータは、同一のアプリケーション・サーバのキャッシュとして処理することが可能な場合がある。上記の例の場合、商品の品目の変更できない(immutable)な属性はキャッシュ可能である。SPECjEnterprise2010 (http://www.spec.org/jEnterprise2010/)の場合、itemの全ての属性が変更不可(immutable)で、キャッシュ可能である。
このようにして、同一のサーバ202で処理するように最適化されたJMS処理が、図2に示されている。
図2の処理をさらに最適化しようとすると、図3に示すように受信処理をインライン処理することになるが、すると、前述のように、処理の一貫性を保証できないという問題がある。そこで、本発明は、図6に示す機能を実現するように、図4に示すアプリケーション・サーバ410a、410b、・・・、410mのうちのどれかである、アプリケーション・サーバ602のミドルウェアのトランザクション処理の機能をカスタマイズし、ローカル・バッファ604をアプリケーション・サーバ602に一旦生成し、ローカル・バッファ604に送信処理時にメッセージを挿入することにより、処理の一貫性の問題を解決する。
すなわち、アプリケーション・サーバ602のミドルウェアはまず、送信トランザクション(SendTx)606の開始時にローカル・バッファ604を生成する。そして、送信処理時にメッセージをローカル・バッファ604に挿入する。
次にミドルウェアは、送信トランザクション606のコミット時、ローカル・バッファ604内の全メッセージの受信トランザクション(RecvTx)608処理後、データベース610または612のコミット処理を行う。
受信トランザクション608は、送信トランザクション606の入れ子(nested)トランザクションとして、処理される。すなわち:
- 開始処理:何もしない。
- 照会処理:通常のデータベース照会(送信トランザクション606の更新も照会可能)。
- 更新処理:更新前の値を記憶し、データベース610または612を更新。
- コミット処理:記憶した更新前の値を消去。
- ロールバック処理:記憶した更新前の値に戻し、メッセージをメッセージ・キュー614に挿入する。
- 開始処理:何もしない。
- 照会処理:通常のデータベース照会(送信トランザクション606の更新も照会可能)。
- 更新処理:更新前の値を記憶し、データベース610または612を更新。
- コミット処理:記憶した更新前の値を消去。
- ロールバック処理:記憶した更新前の値に戻し、メッセージをメッセージ・キュー614に挿入する。
これはすなわち、メッセージ受信処理を、入れ子トランザクションのコミット時に処理するということである。このようにしたことで、以下の処理を省略可能となり、よってパフォーマンスを向上させることができる。
- データベースへの挿入・照会・削除処理などのためのメッセージ・データの送信処理
- 受信トランザクションのコミット処理(送信トランザクションとまとめてコミット処理可能)
これに関するアプリケーション・サーバの通信処理や、データベースのコミット処理(バッチ化によるメリットによる)も、省略可能となる。
- データベースへの挿入・照会・削除処理などのためのメッセージ・データの送信処理
- 受信トランザクションのコミット処理(送信トランザクションとまとめてコミット処理可能)
これに関するアプリケーション・サーバの通信処理や、データベースのコミット処理(バッチ化によるメリットによる)も、省略可能となる。
次に、アプリケーション・サーバ602のミドルウェアの個々の処理について、図7〜図15を参照して説明する。
まず図7は、ミドルウェアにおける送信トランザクション開始処理のフローチャートを示す図である。ステップ702で、サーバ602のミドルウェアは、ローカル・バッファ604を生成し、ステップ704では、ローカル・バッファ604と送信トランザクションを紐付ける。これは、スレッド・ローカルなオブジェクトとしてローカル・バッファ604を生成することによって達成される。
図8は、送信トランザクションによる照会・更新処理のフローチャートを示す図である。ステップ802で、サーバ602のミドルウェアは、送信トランザクションとして、データベースに照会・更新SQL処理を要求する。
ステップ804で、ミドルウェアは、データベースから処理結果を受信する。そして、ステップ806で、処理結果をアプリケーションに通知して照会・更新処理を終了する。
図9は、ミドルウェアにおける送信トランザクション内のメッセージ送信処理のフローチャートを示す図である。サーバ602のミドルウェアは、ステップ902で、メッセージの送信先を確認する。
ステップ904で、ミドルウェアは、メッセージが同じサーバで受信可能かどうか判断する。Java(R)の例えばEJB3.0では、メッセージの送信先、及び受信先は、アプリケーションのデプロイ時に決定され、これにより、プログラムのどの部分でどこに送信されるかが分かる。
ステップ904で同じサーバで受信可能と判断すると、ミドルウェアは、ステップ906で、ローカル・バッファ604に、メッセージを挿入する。そうでないなら、ミドルウェアは、ステップ908で、ローカル・バッファ604を使わない通常の処理をする。
ステップ906またはステップ908の後、ミドルウェアは、ステップ910で、処理結果をアプリケーションに通知してメッセージ送信処理を終了する。
図10は、ミドルウェアにおける送信トランザクションのコミット処理のフローチャートを示す図である。ステップ1002で、サーバ602のミドルウェアは、ローカル・バッファ604内の全メッセージを処理したかどうか判断し、そうでなければ、ステップ1004で、ローカル・バッファ604からメッセージを1つ抜き出す。
ステップ1006で、ミドルウェアは、メッセージを受信するキュー名から、実行するトランザクションの種類を特定する。アプリケーションは、メッセージを処理するための特別なクラスを用意し、メッセージを受信するキュー名をデプロイ時に決定する。すると、メッセージの受信元になるキューをそのクラスに指定することになるので、メッセージを受信するキュー名から、実行するトランザクションの種類を特定することが可能である。
ステップ1008で、ミドルウェアは、特定したトランザクションを、入れ子トランザクション(RecvTx)として実行する。ステップ1010で、ミドルウェアは、RecvTxが成功したかどうか判断し、もしそうなら、ステップ1002に戻る。RecvTxが成功でなかったなら、ミドルウェアは、元々送信するはずだったキューにメッセージを送信して、ステップ1002に戻る。
ステップ1002で、ローカル・バッファ604内の全メッセージを処理したと判断すると、ミドルウェアは、ステップ1014で、データベースに送信トランザクションのコミット要求を送り、ステップ1016で、処理結果をアプリケーションに通知して送信トランザクション・コミット処理を終了する。
図11は、ミドルウェアにおける受信トランザクション開始処理のフローチャートを示す図である。図11に参照番号1102で示すように、受信トランザクション開始には何も行われない。
図12は、ミドルウェアにおける受信トランザクションの照会処理のフローチャートを示す図である。ミドルウェアは、ステップ1202で、送信トランザクションとしてデータベースに照会SQL処理要求する。
ミドルウェアは、ステップ1204で、データベースから処理結果を受信し、ステップ1206で、処理結果をアプリケーションに通知して受信トランザクションの照会処理を終了する。
図13は、ミドルウェアにおける受信トランザクションの更新処理のフローチャートを示す図である。ミドルウェアは、ステップ1302で、更新前の値を記憶する。
ミドルウェアは、ステップ1304で、送信トランザクションとしてデータベースに更新SQL処理要求する。
ミドルウェアは、ステップ1306で、データベースから処理結果を受信し、ステップ1308で、処理が成功したかどうか判断する。
処理が成功でなかったなら、ミドルウェアは、ステップ1310で更新した前の値を破棄し、ステップ1312で、処理結果をアプリケーションに通知して受信トランザクションの更新処理を終了する。処理が成功なら、ミドルウェアは、直ちにステップ1312で、処理結果をアプリケーションに通知して受信トランザクションの更新処理を終了する。
図14は、ミドルウェアにおける受信トランザクションのロールバック処理のフローチャートを示す図である。図14において、ミドルウェアは、ステップ1402で、データベースに記憶した更新前の値に戻す更新SQLを処理要求する。
次にミドルウェアは、ステップ1404で、データベースから処理結果を受信し、ステップ1406で、処理が成功したかどうか判断する。もしそうなら、ミドルウェアは、ステップ1408で受信トランザクション(RecvTx)の処理を終了する。処理が成功でないなら、ミドルウェアは、送信トランザクションをロールバックして、受信トランザクションのロールバック処理処理を終わる。
図15は、ミドルウェアにおける受信トランザクションのコミット処理のフローチャートを示す図である。図15において、ミドルウェアは、記憶した更新前の値を消去して受信トランザクションのコミット処理を終わる。
以上、この発明を、Java(R)及びWASにおける実施例として説明してきたが、この発明は特定のハードウェア、ソフトウェア及びプラットフォームに限定されるものでなく、メッセージ・ベースのトランザクション処理を行う、任意の処理に適用可能であることを理解されたい。
402・・・クラアイント・コンピュータ
410・・・アプリケーション・サーバ
412・・・データベース・サーバ
414・・・データベース
506・・・CPU
508・・・RAM
510・・・HDD
604・・・ローカル・バッファ
606・・・送信トランザクション
608・・・受信トランザクション
614・・・メッセージング・キュー
410・・・アプリケーション・サーバ
412・・・データベース・サーバ
414・・・データベース
506・・・CPU
508・・・RAM
510・・・HDD
604・・・ローカル・バッファ
606・・・送信トランザクション
608・・・受信トランザクション
614・・・メッセージング・キュー
Claims (15)
- コンピュータの処理により、アプリケーション間のメッセージ送信処理とデータベース・システム上のデータ処理を1つの送信トランザクションとして処理し、アプリケーション間のメッセージ受信処理とデータベース・システム上のデータ処理を1つの受信トランザクションとして処理するシステムにおいて、アプリケーション間のメッセージ送信処理、受信処理が一台のサーバ・システム内で処理される場合で2つのトランザクションを1つのトランザクションとして処理する方法であって、
前記サーバ・システムが、送信トランザクションの開始時に、ローカル・バッファを生成するステップと、
前記サーバ・システムが、送信処理のために、メッセージを前記ローカル・バッファ内に挿入するステップと、
送信トランザクションのコミット時に、前記ローカル・バッファ内の全メッセージの受信トランザクション処理の後、前記データベースのコミット処理を行うステップを含む、
方法。 - 前記受信トランザクション処理内におけるデータベースへの更新処理における、更新前の値を記憶するステップと、
受信トランザクションがアボートした際に、データベースへのデータを更新前の値に戻し、メッセージを送信トランザクションが指定したあて先に送信するステップを更に有する、請求項1に記載の方法。 - 前記ローカル・バッファを生成するステップが、メッセージの受信先を確認するステップと、該メッセージが同じサーバで受信可能かどうか判断し、もしそうなら前記ローカル・バッファを生成するステップを含む、請求項1に記載の方法。
- 前記ローカル・バッファ内の全メッセージの受信トランザクション処理が、メッセージを受信するキュー名から実行するトランザクションを特定するステップを含む、請求項1に記載の方法。
- 前記サーバ・システムが、Java(R)により構成され、前記メッセージは、JMSにより生成される、請求項1に記載の方法。
- コンピュータの処理により、アプリケーション間のメッセージ送信処理とデータベース・システム上のデータ処理を1つの送信トランザクションとして処理し、アプリケーション間のメッセージ受信処理とデータベース・システム上のデータ処理を1つの受信トランザクションとして処理するシステムにおいて、アプリケーション間のメッセージ送信処理、受信処理が一台のサーバ・システム内で処理される場合で2つのトランザクションを1つのトランザクションとして処理するプログラムであって、
前記サーバ・システムに、
送信トランザクションの開始時に、ローカル・バッファを生成するステップと、
送信処理のために、メッセージを前記ローカル・バッファ内に挿入するステップと、
送信トランザクションのコミット時に、前記ローカル・バッファ内の全メッセージの受信トランザクション処理の後、前記データベースのコミット処理を行うステップを実行させる、
プログラム。 - 前記受信トランザクション処理内におけるデータベースへの更新処理における、更新前の値を記憶するステップと、
受信トランザクションがアボートした際に、データベースへのデータを更新前の値に戻し、メッセージを送信トランザクションが指定したあて先に送信するステップを更に前記サーバ・システムに実行させる、請求項6に記載のプログラム。 - 前記ローカル・バッファを生成するステップが、メッセージの受信先を確認するステップと、該メッセージが同じサーバで受信可能かどうか判断し、もしそうなら前記ローカル・バッファを生成するステップを含む、請求項6に記載のプログラム。
- 前記ローカル・バッファ内の全メッセージの受信トランザクション処理が、メッセージを受信するキュー名から実行するトランザクションを特定するステップを含む、請求項6に記載のプログラム。
- 前記サーバ・システムが、Java(R)により構成され、前記メッセージは、JMSにより生成される、請求項6に記載のプログラム。
- コンピュータの処理により、アプリケーション間のメッセージ送信処理とデータベース・システム上のデータ処理を1つの送信トランザクションとして処理し、アプリケーション間のメッセージ受信処理とデータベース・システム上のデータ処理を1つの受信トランザクションとして処理するシステムにおいて、アプリケーション間のメッセージ送信処理、受信処理が一台のサーバ・システム内で処理される場合で2つのトランザクションを1つのトランザクションとして処理するシステムであって、
送信トランザクションの開始時に、ローカル・バッファを生成する手段と、
送信処理のために、メッセージを前記ローカル・バッファ内に挿入する手段と、
送信トランザクションのコミット時に、前記ローカル・バッファ内の全メッセージの受信トランザクション処理の後、前記データベースのコミット処理を行う手段を有する、
システム。 - 前記受信トランザクション処理内におけるデータベースへの更新処理における、更新前の値を記憶する手段と、
受信トランザクションがアボートした際に、データベースへのデータを更新前の値に戻し、メッセージを送信トランザクションが指定したあて先に送信する手段を更に含む、
請求項11に記載のシステム。 - 前記ローカル・バッファを生成する手段が、メッセージの受信先を確認し、該メッセージが同じサーバで受信可能かどうか判断し、もしそうなら前記ローカル・バッファを生成する、請求項11に記載のシステム。
- 前記ローカル・バッファ内の全メッセージの受信トランザクション処理が、メッセージを受信するキュー名から実行するトランザクションを特定する手段を含む、請求項11に記載のシステム。
- 前記サーバ・システムが、Java(R)により構成され、前記メッセージは、JMSにより生成される、請求項11に記載のシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012235224A JP2014085896A (ja) | 2012-10-25 | 2012-10-25 | トランザクション処理方法、プログラム及びシステム |
US14/060,659 US20140122417A1 (en) | 2012-10-25 | 2013-10-23 | Transaction processing method, program, and system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012235224A JP2014085896A (ja) | 2012-10-25 | 2012-10-25 | トランザクション処理方法、プログラム及びシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014085896A true JP2014085896A (ja) | 2014-05-12 |
Family
ID=50548342
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012235224A Pending JP2014085896A (ja) | 2012-10-25 | 2012-10-25 | トランザクション処理方法、プログラム及びシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20140122417A1 (ja) |
JP (1) | JP2014085896A (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10540342B2 (en) * | 2017-05-08 | 2020-01-21 | American Express Travel Related Services Company, Inc. | In-memory transaction processing |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030177182A1 (en) * | 1999-06-14 | 2003-09-18 | International Business Machines Corporation | Ensuring a given transactional unit of work arrives at an appropriate server instance |
US7346632B2 (en) * | 2001-02-22 | 2008-03-18 | International Business Machines Corporation | Mechanism for executing nested transactions in an execution environment supporting flat transactions only |
US7003575B2 (en) * | 2001-10-15 | 2006-02-21 | First Hop Oy | Method for assisting load balancing in a server cluster by rerouting IP traffic, and a server cluster and a client, operating according to same |
JP4291060B2 (ja) * | 2003-07-01 | 2009-07-08 | 富士通株式会社 | トランザクション処理方法,トランザクション制御装置およびトランザクション制御プログラム |
US7865684B2 (en) * | 2005-06-27 | 2011-01-04 | Ab Initio Technology Llc | Managing message queues |
US7636829B2 (en) * | 2006-05-02 | 2009-12-22 | Intel Corporation | System and method for allocating and deallocating memory within transactional code |
US20110282949A1 (en) * | 2010-05-11 | 2011-11-17 | Leon Rivkin | Unified message management method and system |
-
2012
- 2012-10-25 JP JP2012235224A patent/JP2014085896A/ja active Pending
-
2013
- 2013-10-23 US US14/060,659 patent/US20140122417A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20140122417A1 (en) | 2014-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10250693B2 (en) | Idempotence for database transactions | |
US8924346B2 (en) | Idempotence for database transactions | |
US8185499B2 (en) | System and method for transactional session management | |
US7543000B2 (en) | Method and system combining state replication and operational-replay synchronization | |
JP5841177B2 (ja) | マルチサーバ予約システムにおける同期化メカニズムのための方法及びシステム | |
US8527992B2 (en) | HTTP request preservation | |
US8930497B1 (en) | Centralized execution of snapshot backups in a distributed application environment | |
US20170054808A1 (en) | Rapid client-side component processing based on component relationships | |
US9621409B2 (en) | System and method for handling storage events in a distributed data grid | |
CN108090058B (zh) | 一种高并发活动交互方法 | |
US20050028171A1 (en) | System and method enabling multiple processes to efficiently log events | |
US20120197959A1 (en) | Processing pattern framework for dispatching and executing tasks in a distributed computing grid | |
US10379914B2 (en) | System and method for achieving specific behaviors by intercepting file access calls in a mainframe rehosting platform | |
US7877695B2 (en) | Tailored object | |
US20130160022A1 (en) | Transaction manager for negotiating large transactions | |
US20210011914A1 (en) | Method and system for implementing subscription barriers in a distributed computation system | |
US10318520B2 (en) | System and method for reducing communications overhead in a distributed transactions environment by modifying implementation of the transaction end function | |
CN110737510B (zh) | 块设备管理系统 | |
US9665416B1 (en) | Asynchronous execution of computer operations | |
US20040128328A1 (en) | Method and apparatus for relaxed transactional isolation in a client-server caching architecture | |
US8204853B2 (en) | Maintaining client data integrity in a distributed environment using asynchronous data submission | |
US11416476B2 (en) | Event ordering based on an identifier for a transaction | |
JP2014085896A (ja) | トランザクション処理方法、プログラム及びシステム | |
US9984096B2 (en) | System and method for reducing communications overhead in a distributed transactions environment by modifying implementation of the transaction start function | |
US9336067B2 (en) | Method and system to release IMS resources used by IMS batch application programs |