JP6070866B1 - スレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体 - Google Patents

スレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体 Download PDF

Info

Publication number
JP6070866B1
JP6070866B1 JP2016001641A JP2016001641A JP6070866B1 JP 6070866 B1 JP6070866 B1 JP 6070866B1 JP 2016001641 A JP2016001641 A JP 2016001641A JP 2016001641 A JP2016001641 A JP 2016001641A JP 6070866 B1 JP6070866 B1 JP 6070866B1
Authority
JP
Japan
Prior art keywords
class loader
thread
instance
class
servlet
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.)
Active
Application number
JP2016001641A
Other languages
English (en)
Other versions
JP2017123044A (ja
Inventor
昌欣 杉本
昌欣 杉本
慎一 宮森
慎一 宮森
Original Assignee
鉄道情報システム株式会社
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 鉄道情報システム株式会社 filed Critical 鉄道情報システム株式会社
Priority to JP2016001641A priority Critical patent/JP6070866B1/ja
Application granted granted Critical
Publication of JP6070866B1 publication Critical patent/JP6070866B1/ja
Publication of JP2017123044A publication Critical patent/JP2017123044A/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】マルチスレッド環境で動作するサーブレットにスレッドセーフな実行環境を提供し、クラスローダをスレッドごとに生成した場合は、クラスローダなどを再利用することにより、サーブレットの処理を短時間で効率的に行うスレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体を提供する。【解決手段】要求保持部9と、クラスローダインスタンス生成取得部10と、クラスロード部11と、サーブレットインスタンス生成部12とから構成され、クラスローダインスタンス生成取得部10は、クラスローダ管理テーブル21から、スレッド用クラスローダのインスタンスを検出して取得するクラスローダインスタンス取得機能10cを有するため、サーブレットにスレッドセーフな実行環境を提供しつつ、クラスローダなどを再利用することで処理を効率的に行うことができる。【選択図】図2

Description

本発明は、マルチスレッド環境で動作するサーブレットにスレッドセーフな実行環境を提供する、スレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体に関するものである。
JAVA(登録商標)言語で記述された、Webサーバー上で実行されるプログラムであるサーブレットの設計では、スレッドセーフであることが不可欠となる。ここで、スレッドセーフとは、マルチスレッド環境で複数のスレッドから同時に利用されても正常に動作することをいう。
具体的には、サーブレットの設計においては、複数のスレッドで共有しているクラスにアクセスする際は、排他制御を行ってデータを保護することが必要となる。
例えば、以下の特許文献1に記載の個々のクラスローダを実装するための方法および装置においては、アプリケーション1、及びアプリケーション2の2つのアプリケーションについて、それぞれ別個のクラスローダが構築されているため、アプリケーション1のクラスローダはアプリケーション1のクラスのみを参照し、アプリケーション2のクラスを参照することはない。特許文献2の情報処理方法およびシステムにおいては、複数の内部プロセス同士の間で、ClassAという同一の名前のクラスを実行するような場合、Classloader1,Classloader2という複数のクラスローダによって内部プロセス間で異なる名前空間を導入しており、スレッドセーフな実行環境が提供されている。さらに、特許文献3の情報処理装置及び情報処理方法においては、ロード制御部がライブラリロード部を用いてスレッド毎にライブラリインスタンスを生成し、割当処理部がスレッドとライブラリインスタンスとの対応関係を管理することにより、スレッドセーフではないライブラリを用いる場合であっても、ライブラリ内でのデータ競合を発生させることなく、マルチスレッドプログラムを正しく動作させることが開示されている。
特開2014−59906号公報 国際公開第01/084303号 特開2013−29979号公報
しかし、上記特許文献1乃至3では、アプリケーションの実行が終了した後に、クラスローダや、クラス、インスタンスは破棄されてしまうため、同じアプリケーションを再び実行する場合でも当該クラスローダなどを再生成しなければならず、当該再生成のための処理時間がかかり非効率となる。
本発明は上記実情に鑑みて提案されたもので、マルチスレッド環境で動作するサーブレットにスレッドセーフな実行環境を提供し、かつ、クラスローダをスレッドごとに生成した場合は、クラスローダやクラス、及び関連したインスタンスを再利用することにより短時間で処理を効率的に行うことができるスレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体を提供することを目的とする。
上記目的を達成するために本発明のスレッドセーフ化システムは、ユーザ端末から受信した要求を保持する要求保持部と、クラスローダ管理データを有するクラスローダ管理テーブルを備えるクラスローダインスタンス生成取得部と、少なくとも1つのスレッド用クラスローダが、サーブレットのクラスをそれぞれロードするクラスロード部と、前記サーブレットのクラスからサーブレット用インスタンスを生成し、前記サーブレットの処理を実行するサーブレットインスタンス生成部と、から構成され、前記要求は、前記スレッド用クラスローダをスレッドごとに生成する方式であって、前記クラスローダインスタンス生成取得部は、前記クラスローダ管理テーブルから、前記スレッド用クラスローダのインスタンスを検出して取得するクラスローダインスタンス取得機能を有することを特徴とする。
また本発明は、前記クラスローダインスタンス生成取得部は、前記クラスローダ管理テーブルから、前記スレッド用クラスローダのインスタンスを検出しなかった場合には、新たなスレッド用クラスローダのインスタンスを生成し、前記新たなスレッド用クラスローダのインスタンスを、前記クラスローダ管理データとして前記クラスローダ管理テーブルに登録するインスタンス登録機能とを更に有することを特徴とする。
また本発明は、前記クラスローダインスタンス生成取得部は、スレッド用クラスローダの生成方式を判断するクラスローダ生成判断機能と、前記要求が、前記スレッド用クラスローダを要求ごとに生成する方式であって、前記スレッド用クラスローダのインスタンスを前記要求に応じて生成する要求クラスローダインスタンス取得機能とを更に有することを特徴とする。
また本発明は、前記クラスローダ管理データのキー項目がスレッドであることあることを特徴とする。
また本発明のスレッドセーフ化方法は、ユーザ端末から受信した要求を保持する要求保持ステップと、前記要求保持ステップの後で実行される、クラスローダ管理データを有するクラスローダ管理テーブルを備えるクラスローダインスタンス生成取得ステップと、前記クラスローダインスタンス生成取得ステップで生成、または取得された少なくとも1つのスレッド用クラスローダが、サーブレットのクラスをそれぞれロードするクラスロードステップと、前記クラスロードステップにおいてロードされた前記サーブレットのクラスからサーブレット用インスタンスを生成し、前記サーブレットの処理を実行するサーブレットインスタンス生成ステップと、から構成され、前記要求は、前記スレッド用クラスローダをスレッドごとに生成する方式であって、前記クラスローダインスタンス生成取得ステップは、前記クラスローダ管理テーブルから、前記スレッド用クラスローダのインスタンスを検出して取得するクラスローダインスタンス取得ステップを有する、
ものとして機能するようにコンピュータに実行させることを特徴とする。
また本発明のスレッドセーフ化プログラムは、ユーザ端末から受信した要求を保持する要求保持部と、クラスローダ管理データを有するクラスローダ管理テーブルを備えるクラスローダインスタンス生成取得部と、少なくとも1つのスレッド用クラスローダが、サーブレットのクラスをそれぞれロードするクラスロード部と、前記サーブレットのクラスからサーブレット用インスタンスを生成し、前記サーブレットの処理を実行するサーブレットインスタンス生成部と、から構成され、前記要求は、前記スレッド用クラスローダをスレッドごとに生成する方式であって、前記クラスローダインスタンス生成取得部は、前記クラスローダ管理テーブルから、前記スレッド用クラスローダのインスタンスを検出して取得するクラスローダインスタンス取得機能を有する、ものとして機能するようにコンピュータに実行させることを特徴とする。
また本発明のコンピュータで読み取り可能な記憶媒体は、スレッドセーフ化プログラムを記憶したことを特徴とする。
すなわち、ユーザ端末から受信した要求を保持する要求保持部と、クラスローダ管理データを有するクラスローダ管理テーブルを備えるクラスローダインスタンス生成取得部と、少なくとも1つのスレッド用クラスローダが、サーブレットのクラスをそれぞれロードするクラスロード部と、サーブレットのクラスからサーブレット用インスタンスを生成し、サーブレットの処理を実行するサーブレットインスタンス生成部と、から構成され、要求は、スレッド用クラスローダをスレッドごとに生成する方式であって、クラスローダインスタンス生成取得部は、クラスローダ管理テーブルから、スレッド用クラスローダのインスタンスを検出して取得するクラスローダインスタンス取得機能を有するスレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体であることを特徴とするため、スレッドごとにスレッド用クラスローダが用意され、さらに当該スレッド用クラスローダが再利用される。したがって、マルチスレッド環境で動作するサーブレットにスレッドセーフな実行環境を提供し、かつ、スレッド用クラスローダをスレッドごとに生成した場合は、クラスローダやクラス、及び関連したインスタンスを再利用することにより、サーブレットの処理を短時間で効率的に行うことができる。
本発明において、クラスローダインスタンス生成取得部は、クラスローダ管理テーブルから、スレッド用クラスローダのインスタンスを検出しなかった場合には、新たなスレッド用クラスローダのインスタンスを生成し、新たなスレッド用クラスローダのインスタンスを、クラスローダ管理データとしてクラスローダ管理テーブルに登録するインスタンス登録機能と、を更に有することを特徴とするため、クラスローダ管理テーブルに未登録のスレッド用クラスローダのデータは新たに登録される。したがって、スレッド用クラスローダのインスタンスが、クラスローダ管理テーブルに当初未登録であっても、次回の処理以降、当該スレッド用クラスローダのインスタンスを再生成せず、クラスローダ管理テーブルから検出することができる。したがって、サーブレットの処理を短時間で効率的に行うことに資する。
本発明において、クラスローダインスタンス生成取得部は、スレッド用クラスローダの生成方式を判断するクラスローダ生成判断機能と、要求が、スレッド用クラスローダを要求ごとに生成する方式であって、スレッド用クラスローダのインスタンスを要求に応じて生成する要求クラスローダインスタンス取得機能と、を更に有することを特徴とするため、スレッドごとにクラスローダを生成する場合と、要求ごとにクラスローダを生成する場合とで異なる処理を行うことができる。従って、ユーザはスレッドごとにクラスローダを生成する場合と、要求ごとにクラスローダを生成する場合とのメリットを勘案しつつ、クラスローダの生成方式を選択することができる。
本発明において、クラスローダ管理データのキー項目がスレッドであることを特徴とするため、当該スレッドはクラスローダ管理テーブルにおいて重複しない。したがって、クラスローダ管理テーブルにクラスローダ管理データが登録されている場合、スレッドに対応するスレッド用クラスローダのインスタンスを確実に取得することができる。
本発明の実施形態に係るスレッドセーフ化システムの概念図である。 本発明の実施形態に係るスレッドセーフ化システムの全体図である。 本発明の実施形態に係るスレッドセーフ化システムの説明図である。 本発明の実施形態に係るスレッドセーフ化システムにおけるクラスローダインスタンス生成取得部の、クラスローダ生成判断機能を説明するためのフローチャートである。 本発明の実施形態に係るスレッドセーフ化システムにおけるクラスローダインスタンス生成取得部の、要求クラスローダインスタンス取得機能を説明するためのフローチャートである。 本発明の実施形態に係るスレッドセーフ化システムにおけるクラスローダインスタンス生成取得部の、クラスローダインスタンス取得機能を説明するためのフローチャートである。 本発明の実施形態に係るスレッドセーフ化システムのクラスローダインスタンス生成取得部における、インスタンス登録機能を説明するためのフローチャートである。
以下、本発明に係る実施形態を図面とともに説明する。
図1に基づいて、本発明に係るスレッドセーフ化システムの全体について説明する。
まず、ユーザは、パーソナルコンピューターなどのユーザ端末1により、要求の送信をアプリケーションサーバ3に対して行う。ここで、この要求の送信は、ネットワーク2を介して行う。
アプリケーションサーバ3は、ユーザ端末1からの要求について、ネットワーク2を介して受信し、処理を実行した後に、その処理結果についてネットワーク2を介してユーザ端末1に送信する。ここで、アプリケーションサーバ3は、図2で示すサーブレットコンテナ5を実装し、サーブレットである、本発明の実施形態に係るスレッドセーフ化システム4について処理を実行する。
なお、ネットワーク2は情報通信ネットワークを意味するが、インターネットやLAN、イントラネットなどどのような形態でも良く、有線、無線の別も問わない。
次に、図2に基づいて、本発明に係るスレッドセーフ化システム4の構造について説明する。
本発明に係るスレッドセーフ化システム4は、要求保持部9、クラスローダインスタンス生成取得部10、クラスロード部11、及びサーブレットインスタンス生成部12から構成される。
ここで、上記クラスローダインスタンス生成取得部10は、クラスローダ生成判断機能10a、要求クラスローダインスタンス取得機能10b、クラスローダインスタンス取得機能10c、及びインスタンス登録機能10dから構成される。
さらに、上記クラスローダインスタンス生成取得部10のクラスローダインスタンス取得機能10c、及びインスタンス登録機能10dにおいては、それぞれクラスローダ管理テーブル21が使用される。
なお、サーブレットコンテナ5においては、当該サーブレットコンテナ5内の処理に用いるための受信部6、ツールインスタンス生成部7、及びツールインスタンス割当部8が存在する。
次に、図2、図3、及び図4乃至図7のフローチャートに基づいて、本発明に係るスレッドセーフ化システム4の機能について説明する。
図3において、まず、スレッドセーフ化システム4の実行環境であるサーブレットコンテナ5の設定時に、スレッドセーフ化システム4をサーブレットとして定義する。さらに、スレッドセーフ化システム4のスレッド用クラスローダの生成方式を、サーブレットコンテナ5の設定時に予め指定しておく。ここで、スレッド用クラスローダとは、スレッドセーフ化システム4において生成され、本来のサーブレットのクラス18をロードするクラスローダを指す。そして、当該スレッド用クラスローダの生成方式には、スレッド用クラスローダを「要求ごとに生成」する方式と、スレッド用クラスローダを「スレッドごとに生成」する方式とがあるが、当該方式については後述する。
受信部6においては、ユーザによって、ユーザ端末1から送信された要求を、サーブレットコンテナ5が受信する。この要求には、サーブレットコンテナ5の設定時に指定した、スレッドセーフ化システム4のスレッド用クラスローダの生成方式が含まれる。
サーブレットコンテナ5は、上記要求を受信すると、サーブレットであるスレッドセーフ化システム4を呼び出す。すると、標準クラスローダ15は、スレッドセーフ化システムのjarファイル13から、スレッドセーフ化システムのクラス16をロードする。
次に、ツールインスタンス生成部7においては、まず、サーブレットコンテナ5により、スレッドセーフ化システム4のインスタンスである、ツール用インスタンス17が既に生成されているか否かが判断される。ここで、未だツール用インスタンス17が生成されていない場合は、サーブレットコンテナ5がツール用インスタンス17を生成する。
さらに、サーブレットコンテナ5は、スレッドセーフ化システム4の初期化メソッドを呼び出し、スレッドセーフ化システム4の初期化処理を行う。なお、ここで初期化メソッドとは、サーブレット仕様上のinit()メソッドを指す。
一方、ツール用インスタンス17が既に生成されている場合は、上記ツールインスタンス生成部7の処理は行わない。この場合は、以下で述べるように、サーブレットコンテナ5が、スレッドセーフ化システム4のサービスメソッドを呼び出す処理が行われる。なお、ここでのサービスメソッドとは、サーブレット仕様上のメソッドである、service(request, response)を指す。
ツールインスタンス割当部8においては、サーブレットコンテナ5が、スレッドセーフ化システム4のインスタンスである、ツール用インスタンス17を、実行したい本来のサーブレットのスレッドに対して割り当てる。なお、ここでは、スレッドの数は2であるため、サーブレットコンテナ5は、第1スレッドに対してツール用インスタンス17aを割り当て、第2スレッドに対してツール用インスタンス17bを割り当てている。
上記ツールインスタンス割当部8の処理が終了した後、スレッドセーフ化システム4における要求保持部9の処理が実行される。まず、スレッドセーフ化システム4の初期化パラメータには、本来のサーブレットのクラス18のクラス名と、ユーザ端末1から受信した要求における、スレッド用クラスローダの生成方式が定義されている。要求保持部9においては、当該スレッドセーフ化システム4の初期化パラメータから、本来のサーブレットのクラス18のクラス名と、要求時におけるスレッド用クラスローダの生成方式を取得し、それぞれをスレッドセーフ化システム4のインスタンス内に保持する。
ここで、要求保持部9で保持された本来のサーブレットのクラス18のクラス名は、以下で述べるクラスローダインスタンス生成取得部10のクラスロード部11で用いられる。一方、要求保持部9で保持された要求時におけるスレッド用クラスローダの生成方式は、クラスローダインスタンス生成取得部10のクラスローダ生成判断機能10aで用いられる。
次に、スレッドセーフ化システム4におけるクラスローダインスタンス生成取得部10の処理が実行される。
ここでは図2、図3、及び図4のフローチャートを用いて、クラスローダインスタンス生成取得部10の最初の処理である、クラスローダ生成判断機能10aについて説明する。
図4のフローチャートにおいて、クラスローダ生成判断機能10aでは、スレッドセーフ化システム4のインスタンス内に保持された、スレッド用クラスローダの生成方式が「要求ごとに生成」される方式か否かが判断される(ステップS1)。当該クラスローダの生成方式が「要求ごとに生成」される方式の場合は、要求クラスローダインスタンス取得機能10bの処理が行われる(ステップS3)。一方、当該クラスローダの生成方式が要求ごとに生成されるのではなく、「スレッドごとに生成」される方式の場合は、クラスローダインスタンス取得機能10cの処理が行われる(ステップS2)。
ここで、クラスローダの生成方式が「要求ごとに生成」される方式とは、ユーザ端末1から送信された要求の都度、スレッド用クラスローダのインスタンスが1個ずつ生成される方式をいう。一方、クラスローダの生成方式が「スレッドごとに生成」される方式とは、実行したい本来のサーブレットにおけるスレッドごとに、スレッド用クラスローダのインスタンスが生成される方式をいう。
次に、図2、図3、及び図5のフローチャートを用いて、クラスローダの生成方式が要求ごとに生成される場合に行われる、クラスローダインスタンス生成取得部10の要求クラスローダインスタンス取得機能10bについて説明する。
図5のフローチャートにおいて、要求クラスローダインスタンス取得機能10bでは、ユーザ端末1からの要求ごとにスレッド用クラスローダのインスタンスが生成される(ステップS11)。
例として、図3においては、ユーザ端末1から受信した1個の要求に対して、スレッド用クラスローダ19aのインスタンスが1つ生成される。
なお、クラスローダの生成方式が「要求ごとに生成」される場合は、本来のサーブレットの処理の終了時に当該インスタンスが破棄される。また、クラスローダの生成方式が「要求ごとに生成」される場合は、後述のクラスロード部11において、スレッド用クラスローダは、本来のサーブレットのクラス18を処理時に毎回ロードする。したがって、クラスローダの生成方式が「要求ごとに生成」される場合は、本来のサーブレットのクラス18の初期値が常に保障される。
次に、図2、図3、及び図6のフローチャートを用いて、クラスローダの生成方式がスレッドごとに生成される場合に行われる、クラスローダインスタンス生成取得部10のクラスローダインスタンス取得機能10cについて説明する。
図6のフローチャートにおいて、クラスローダインスタンス取得機能10cでは、本来のサーブレットのスレッドをキー項目として、当該キー項目のスレッドに対応するスレッド用クラスローダのインスタンスが、クラスローダ管理テーブル21から検出されたか否かが判断される(ステップS21)。
ここで、クラスローダ管理テーブル21とは、クラスローダ管理データを有するデータ構造を指す。クラスローダ管理データとは、スレッドをキーとし、当該スレッドに対応した値としてスレッド用クラスローダのインスタンスを有するデータをいう。クラスローダ管理テーブル21として、例えば、JAVA(登録商標)のHashMap等が利用できる。
そして、キー項目のスレッドに対応するスレッド用クラスローダのインスタンスが、クラスローダ管理テーブル21から検出された場合は、当該スレッド用クラスローダのインスタンスをクラスローダ管理テーブル21から取得して再利用する(ステップS23)。
例えば、図2、及び図3において、キーである第1スレッドに対応する、スレッド用クラスローダ19aのインスタンスが、クラスローダ管理テーブル21に既に登録されているとする。すると、第1スレッドにおいて使用されるスレッド用クラスローダのインスタンスとして、第1スレッドに対して、スレッド用クラスローダ19aのインスタンスがクラスローダ管理テーブル21から検出される。さらに、当該スレッド用クラスローダ19aのインスタンスがクラスローダ管理テーブル21から取得され、再利用される。
ここで、クラスローダの生成方式が「スレッドごとに生成」される場合は、スレッド用クラスローダのインスタンスを同一スレッドの処理に対して繰り返し再利用することができる。そして、クラスローダの生成方式が「スレッドごとに生成」される場合は、以下で述べるクラスロード部11において、スレッド用クラスローダは本来のサーブレットのクラス18を、初回処理時に1度ロードするのみなので、本来のサーブレットのクラス18も再利用することができる。
つまり、図2、及び図3において、スレッド用クラスローダ19aのインスタンスが当該クラスローダ管理テーブル21から検出された場合は、スレッド用クラスローダ19aのインスタンスを再利用できることに加えて、当該スレッド用クラスローダ19aがロードする本来のサーブレットのクラス18も、再び生成することなく再利用できる。
なお、クラスローダの生成方式が「スレッドごとに生成」される場合は、セッションを用いたサーブレット間のデータ連携が可能となる。一方、サーブレットコンテナ5がスレッドを破棄すると、スレッド用クラスローダのインスタンスも同時に破棄される。
一方、図6のフローチャートにおいて、本来のサーブレットのスレッドに対応するスレッド用クラスローダのインスタンスが、クラスローダ管理テーブル21に未登録だったため検出されなかった場合は、インスタンス登録機能10dの処理が行われる(ステップS22)。
次に、図2、図3、及び図7のフローチャートを用いて、クラスローダインスタンス生成取得部10の、インスタンス登録機能10dについて説明する。
図7のフローチャートにおいて、インスタンス登録機能10dでは、まず、新たなスレッド用クラスローダのインスタンスが生成される(ステップS31)。ここで、新たなスレッド用クラスローダのインスタンスとは、図2のクラスローダ管理テーブル21に登録されていない、スレッド用クラスローダのインスタンスをいう。
例えば、図3において、第2スレッドに対応するスレッド用クラスローダ19bのインスタンスが、クラスローダ管理テーブル21に登録されていない場合は、新たなスレッド用クラスローダのインスタンスとして、スレッド用クラスローダ19bのインスタンスが生成される。
さらに、スレッドをキーとして、新たなスレッド用クラスローダのインスタンスを、クラスローダ管理データとしてクラスローダ管理テーブル21に登録する(ステップS32)。
つまり、図3においては、新たなスレッド用クラスローダのインスタンスとしてのスレッド用クラスローダ19bのインスタンスが、クラスローダ管理テーブル21に第2スレッドをキーとして登録されることになる。
クラスローダインスタンス生成取得部10の処理が実行された後、クラスロード部11の処理が実行される。図3に記載されているように、当該クラスロード部11においては、スレッドセーフ化システム4のインスタンス内に保持された、本来のサーブレットのクラス18のクラス名がスレッド用クラスローダ19a、及び19bにそれぞれ渡される。そして、スレッド用クラスローダ19aが、本来のサーブレットのクラス18を、本来のサーブレットのjarファイル14からロードして取得する。一方、スレッド用クラスローダ19bは、本来のサーブレットのクラス18を、本来のサーブレットのjarファイル14からロードして取得する。
クラスロード部11の処理が実行された後、サーブレットインスタンス生成部12の処理が実行される。図3に記載されているように、サーブレットインスタンス生成部12では、第1スレッドにおいて、クラスロード部11で取得された本来のサーブレットのクラス18から、本来のサーブレットのインスタンスである、サーブレット用インスタンス20aが生成される。また、第2スレッドにおいては、本来のサーブレットのクラス18から、本来のサーブレットのインスタンスである、サーブレット用インスタンス20bが生成される。
さらに、生成されたサーブレット用インスタンス20aは、サーブレット用インスタンス20aのメソッドを呼び出し、サーブレット用インスタンス20bは、サーブレット用インスタンス20bのメソッドを呼び出し、それぞれ処理が実行される。
本実施形態によれば、本来のサーブレットの第1スレッド、及び第2スレッドに対してスレッド用クラスローダ19a、及び19bのインスタンスがそれぞれ生成され、当該スレッド用クラスローダ19a、及び19bのインスタンスが本来のサーブレットのクラス18をそれぞれロードしている。したがって、クラスローダが異なれば同じクラスであっても別のクラスとして扱うJAVA(登録商標)の性質から、本来のサーブレットのクラス18は、第1スレッド、及び第2スレッドから共有されることがない。したがって、JAVA(登録商標)のメモリモデルなどの排他制御に関するスキルがなくても、マルチスレッド環境で動作するサーブレットにスレッドセーフな実行環境を提供でき、スレッドセーフで無い事が原因のバグは発生することがなくなる。よって、開発コストを削減しつつ、サーブレットの品質を向上させることができる。
さらに、本実施形態によれば、クラスローダの生成方式が「スレッドごとに生成」される方式であり、スレッド用クラスローダのインスタンスがクラスローダ管理テーブル21から検出されたときにおいて、当該スレッド用クラスローダのインスタンスを再利用することができる。また、当該スレッド用クラスローダにおいて取得された本来のサーブレットのクラス18も再利用することができる。したがって、当該スレッド用クラスローダのインスタンスや、本来のサーブレットのクラス18を再び生成させるための時間を省くことができる。よって、当該スレッド用クラスローダのインスタンスや、本来のサーブレットのクラス18を処理の都度生成するよりも、サーブレットの処理を短時間で効率的に行うことができる。特に、スレッド用クラスローダのインスタンスの領域が大きいときに効果的である。
また、本実施形態においては、クラスローダ生成判断機能10aにて、処理要求時におけるスレッド用クラスローダの生成方式が「要求ごとに生成」される方式か、「スレッドごとに生成」する方式かが判断される。
したがって、例えば、サーブレットをマルチスレッド環境で、よりスレッドセーフに動作させたい場合は、スレッドごとにスレッド用クラスローダを生成する、クラスローダを「スレッドごとに生成」する方式を選択することができる。一方、既存のシングルスレッドアプリケーションをサーブレットに移植する場合には、本来のサーブレットのクラス18が処理時に毎回ロードされることにより初期値が常に保障される、クラスローダを「要求ごとに生成」する方式を選択するなど、ユーザーは、サーブレットの性質に応じて両者の方式を使い分けることができる。
さらに、本実施形態においては、クラスローダ管理データのキー項目がスレッドであり、さらに当該キー項目に対応する値は、スレッド用クラスローダのインスタンスとなっている。したがって、クラスローダ管理テーブル21から、キー項目であるスレッドに対応した、スレッド用クラスローダのインスタンスを素早く取得することができる。したがって、スレッド用クラスローダのインスタンスの再利用の処理を短時間で効率的に行うことができる。
以上、本発明に係る実施形態について説明したが、本発明はかかる実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
なお、上記各部における処理機能をコンピュータによって実現する場合、本発明のスレッドセーフ化システム4が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理内容がコンピュータ上で実現される。
また、上記処理内容を記述したプログラムは、コンピュータで読み取り可能な記憶媒体に記録できる。コンピュータで読み取り可能な記憶媒体としては、例えば、ハードディスク、磁気テープ等の磁気記録媒体、CD-ROM等の光ディスク、MO等の光磁気記憶媒体、半導体メモリなど、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式はいずれの形態であってもよい。
1 ユーザ端末
2 ネットワーク
3 アプリケーションサーバ
4 スレッドセーフ化システム
5 サーブレットコンテナ
6 受信部
7 ツールインスタンス生成部
8 ツールインスタンス割当部
9 要求保持部
10 クラスローダインスタンス生成取得部
10a クラスローダ生成判断機能
10b 要求クラスローダインスタンス取得機能
10c クラスローダインスタンス取得機能
10d インスタンス登録機能
11 クラスロード部
12 サーブレットインスタンス生成手段
13 スレッドセーフ化システムのjarファイル
14 本来のサーブレットのjarファイル
15 標準クラスローダ
16 スレッドセーフ化システムのクラス
17、17a、17b ツール用インスタンス
18 本来のサーブレットのクラス
19a、19b スレッド用クラスローダ
20a、20b サーブレット用インスタンス
21 クラスローダ管理テーブル

Claims (7)

  1. ユーザ端末から受信した要求を保持する要求保持部と、
    クラスローダ管理データを有するクラスローダ管理テーブルを備えるクラスローダインスタンス生成取得部と、
    少なくとも1つのスレッド用クラスローダが、サーブレットのクラスをそれぞれロードするクラスロード部と、
    前記サーブレットのクラスからサーブレット用インスタンスを生成し、前記サーブレットの処理を実行するサーブレットインスタンス生成部と、
    から構成され、
    前記要求は、前記スレッド用クラスローダをスレッドごとに生成する方式であって、
    前記クラスローダインスタンス生成取得部は、
    前記クラスローダ管理テーブルから、前記スレッド用クラスローダのインスタンスを検出して取得するクラスローダインスタンス取得機能を有する、
    ことを特徴とするスレッドセーフ化システム。
  2. 前記クラスローダインスタンス生成取得部は、
    前記クラスローダ管理テーブルから、前記スレッド用クラスローダのインスタンスを検出しなかった場合には、新たなスレッド用クラスローダのインスタンスを生成し、前記新たなスレッド用クラスローダのインスタンスを、前記クラスローダ管理データとして前記クラスローダ管理テーブルに登録するインスタンス登録機能と、を更に有することを特徴とする請求項1に記載のスレッドセーフ化システム。
  3. 前記クラスローダインスタンス生成取得部は、
    スレッド用クラスローダの生成方式を判断するクラスローダ生成判断機能と、
    前記要求が、前記スレッド用クラスローダを前記要求ごとに生成する方式であって、
    前記スレッド用クラスローダのインスタンスを前記要求に応じて生成する要求クラスローダインスタンス取得機能と、を更に有することを特徴とする請求項1または請求項2に記載のスレッドセーフ化システム。
  4. 前記クラスローダ管理データのキー項目がスレッドであることを特徴とする請求項1または請求項2に記載のスレッドセーフ化システム。
  5. ユーザ端末から受信した要求を保持する要求保持ステップと、
    前記要求保持ステップの後で実行される、クラスローダ管理データを有するクラスローダ管理テーブルを備えるクラスローダインスタンス生成取得ステップと、
    前記クラスローダインスタンス生成取得ステップで生成、または取得された少なくとも1つのスレッド用クラスローダが、サーブレットのクラスをそれぞれロードするクラスロードステップと、
    前記クラスロードステップにおいてロードされた前記サーブレットのクラスからサーブレット用インスタンスを生成し、前記サーブレットの処理を実行するサーブレットインスタンス生成ステップと、
    から構成され、
    前記要求は、前記スレッド用クラスローダをスレッドごとに生成する方式であって、
    前記クラスローダインスタンス生成取得ステップは、
    前記クラスローダ管理テーブルから、前記スレッド用クラスローダのインスタンスを検出して取得するクラスローダインスタンス取得ステップを有する、
    ものとして機能するようにコンピュータに実行させる、
    ことを特徴とするスレッドセーフ化方法。
  6. ユーザ端末から受信した要求を保持する要求保持部と、
    クラスローダ管理データを有するクラスローダ管理テーブルを備えるクラスローダインスタンス生成取得部と、
    少なくとも1つのスレッド用クラスローダが、サーブレットのクラスをそれぞれロードするクラスロード部と、
    前記サーブレットのクラスからサーブレット用インスタンスを生成し、前記サーブレットの処理を実行するサーブレットインスタンス生成部と、
    から構成され、
    前記要求は、前記スレッド用クラスローダをスレッドごとに生成する方式であって、
    前記クラスローダインスタンス生成取得部は、
    前記クラスローダ管理テーブルから、前記スレッド用クラスローダのインスタンスを検出して取得するクラスローダインスタンス取得機能を有する、
    ものとして機能するようにコンピュータに実行させる、
    ことを特徴とするスレッドセーフ化プログラム。
  7. 請求項6に記載のスレッドセーフ化プログラムを記憶したことを特徴とするコンピュータで読み取り可能な記憶媒体。
JP2016001641A 2016-01-07 2016-01-07 スレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体 Active JP6070866B1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016001641A JP6070866B1 (ja) 2016-01-07 2016-01-07 スレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016001641A JP6070866B1 (ja) 2016-01-07 2016-01-07 スレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体

Publications (2)

Publication Number Publication Date
JP6070866B1 true JP6070866B1 (ja) 2017-02-01
JP2017123044A JP2017123044A (ja) 2017-07-13

Family

ID=57937589

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016001641A Active JP6070866B1 (ja) 2016-01-07 2016-01-07 スレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体

Country Status (1)

Country Link
JP (1) JP6070866B1 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001084303A1 (fr) * 2000-05-04 2001-11-08 Access Co.,Ltd. Procede et systeme de traitement d'informations
JP2002259146A (ja) * 2000-05-15 2002-09-13 Matsushita Electric Ind Co Ltd アプリケーション実行装置及び方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2001084303A1 (fr) * 2000-05-04 2001-11-08 Access Co.,Ltd. Procede et systeme de traitement d'informations
JP2002259146A (ja) * 2000-05-15 2002-09-13 Matsushita Electric Ind Co Ltd アプリケーション実行装置及び方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6016045156; 原田 洋子: '"Servletではじめよう"' JAVA PRESS 第7巻, 19990801, pp.112-124, 株式会社技術評論社 *
JPN6016045158; 河野 紀昭: '"J2EE環境の複雑さに対応した「Struts」"' Java WORLD 第9巻,第9号, 20050901, pp.55-56, (株)IDGジャパン *

Also Published As

Publication number Publication date
JP2017123044A (ja) 2017-07-13

Similar Documents

Publication Publication Date Title
CN107105009B (zh) 基于Kubernetes系统对接工作流引擎的作业调度方法和装置
US20180218058A1 (en) Data synchronization method and system
WO2017193737A1 (zh) 一种软件测试方法及系统
US10073761B2 (en) Legacy system
JP5552449B2 (ja) データ分析及び機械学習処理装置及び方法及びプログラム
US20180113750A1 (en) Container-based distributed application management system and method
Montesi Process-aware web programming with Jolie
CN110555074B (zh) 定时抽取和加工数据的方法、终端及计算机可读存储介质
CN107071017B (zh) 用于安卓系统的网络请求代理工具及代理方法
WO2012008016A1 (ja) マルチスレッド処理装置,マルチスレッド処理システム,マルチスレッド処理プログラム,及びマルチスレッド処理方法
CN104699547B (zh) JavaEE应用类加载冲突分析方法和装置
US20230401058A1 (en) Semantic functional wrappers of services
CN112445686A (zh) 内存泄漏检测方法、装置以及计算机可读存储介质
US20130151706A1 (en) Resource launch from application within application container
US8838874B2 (en) Method, program, and system for processing object in computer
JP6070866B1 (ja) スレッドセーフ化システム、スレッドセーフ化方法、スレッドセーフ化プログラム、及び記憶媒体
Liu et al. Design and implementation of cyber-physical manufacturing cloud using MTConnect
JP2012156670A (ja) Ipアドレス管理方法、そのプログラム、及びネットワーク通信装置
CN106210159B (zh) 一种域名解析方法和设备
CN111435327B (zh) 一种日志记录的处理方法、装置及系统
CN111309432B (zh) 一种故障演练方法、装置及系统
EP2311235A2 (en) Method for access control within a network comprising a pep and a pdp
JP5981050B2 (ja) アプリケーションプログラムの管理装置及び管理方法
CN110019497B (zh) 一种数据读取方法及装置
JP6442947B2 (ja) 情報処理装置、情報処理方法及びそのプログラム

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20161118

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20161129

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161219

R150 Certificate of patent or registration of utility model

Ref document number: 6070866

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250