Mercurial > hg > Papers > 2015 > tatsuki-thresis
changeset 2:47912d770f9d
2/14
author | tatsuki |
---|---|
date | Sat, 14 Feb 2015 03:06:15 +0900 |
parents | de10c9415e94 |
children | 470dc248d615 |
files | .DS_Store chapter1.tex chapter2.tex chapter3.tex chapter4.tex main.aux main.dvi main.lof main.log main.lot main.pdf main.tex main.toc |
diffstat | 13 files changed, 681 insertions(+), 489 deletions(-) [+] |
line wrap: on
line diff
--- a/chapter1.tex Thu Feb 12 19:18:45 2015 +0900 +++ b/chapter1.tex Sat Feb 14 03:06:15 2015 +0900 @@ -1,4 +1,4 @@ -\chapter{序論} +\chapter{世の中の知的構造を全て格納できるデータベース} \label{chap:introduction} \pagenumbering{arabic} @@ -6,7 +6,7 @@ %英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも. \section{研究目的} -我々があつかっている知識は主に木構造である。しかし、知識の量は膨大であり、人が全てを記憶しておくのは難しいため、データベースに格納したい。 +知識を記した書物等において、節が複数集まって章になり、章が集まって書物になるように、我々があつかっている知識は主に木構造である。しかし、知識の量は膨大であり、人が全てを記憶しておくのは難しいため、データベースに格納したい。 しかし、RDB上に木構造データを格納するためには、煩雑なデータ設計が必要になる。 また、データベースを使用するウェブサービスの規模も年々大きなものとなり、それに比例してデータベースへの負荷も増大し、その結果サービスが停止する自体が多々見られるようになった。 @@ -28,4 +28,4 @@ 当研究室では、これらの問題を解決した、煩雑なデータ設計が必要ないスケーラビリティのあるデータベースを目指して、非破壊的木構造データベースJungleを開発している。 %しかし、Jungleはまだ、データベースとして必要な検索等の機能が実装されておらず、実際に業務等で使用されるアプリケーションに組み込み、使用できる状態ではなかった。 しかし、Jungleはまだ開発途中であり、データベースに必要なAPI等もまだ十分に実装されていない。 -そこで、当研究では、共同研究を行っているSymphonies社が開発している業務用アプリケーションmaTrixにJungleを組み込み、実装すべきAPIの洗い出しを行い、その後実用DBとしての性能があるかテストを行う。 +そこで、当研究では、共同研究を行っているSymphonies社が開発している組織の中の許認可を管理するアプリケーションmaTrixにJungleを組み込み、実装すべきAPIの洗い出しを行い、その後実用DBとしての性能があるかテストを行う。
--- a/chapter2.tex Thu Feb 12 19:18:45 2015 +0900 +++ b/chapter2.tex Sat Feb 14 03:06:15 2015 +0900 @@ -1,4 +1,44 @@ -\chapter{Jungle} +\chapter{分散データベースJungle} +JungleはスケーラビリティのあるCMSを目指して当研究室で開発されている非破壊的木構造データベースである。 +本章では、Jungleのメイン部分であるJungleCoreについて述べた後、分散実装されたJungleNetworkについて記述する \label{chap:concept} + \section{JungleCore} +Jungleの最大の特徴として、非破壊的木構造であることがあげられる。 + +通常の破壊的木構造は、データの編集を行う際に、データを上書き更新する(図\ref{fig:Des})ため、編集を行っている間ずっと木にロックをかける必要があり、また、閲覧者がいる場合、検索途中にデータが変わることを避けるために、データの検索が終わるまで書き換えを待つ必要がある。 +しかし、これではロックによりスケーラビリティが損なわれてしまう。 + +\begin{figure}[h] +\begin{center} +\includegraphics[height = 5cm ,bb=0 0 404 207]{fig/destructive_tree.pdf} +\caption{破壊的木構造の編集} +\label{fig:Des} +\end{center} +\end{figure} + +\clearpage + +それに比べ非破壊的木構造は、一度生成した木を上書きすることはない。 +データの編集を行う際に、ルートから編集を行うノードまでコピーを行い新しく木構造を構築することで行う(図\ref{fig:nonDes})。 + +\begin{figure}[h] +\begin{center} +\includegraphics[height = 5cm , bb=0 0 459 207]{fig/destructive_tree.pdf} +\caption{非破壊的木構造の編集} +\label{fig:nonDes} +\end{center} +\end{figure} + +非破壊的木構造においてデータのロックが必要になる部分は、木のコピーを作った後に、ルートノードを更新するときだけである。 +データ編集を行っている間ロックが必要な破壊的木構造に比べ、非破壊的木構造は検索中の木が変更されないことが保証されいているため、編集中においてもデータの読み込みが可能である。(図\ref{fig:desMerit}) +そのため、非破壊的木構造に比べてスケールアウトがしやすくなっている。 +\begin{figure}[h] +\begin{center} +\includegraphics[height = 7cm ,bb=0 0 350 301]{fig/non_destructive_merit.pdf} +\caption{非破壊的木構造の編集} +\label{fig:desMerit} +\end{center} +\end{figure} \section{JungleNetwork} +
--- a/chapter3.tex Thu Feb 12 19:18:45 2015 +0900 +++ b/chapter3.tex Sat Feb 14 03:06:15 2015 +0900 @@ -1,117 +1,24 @@ -\chapter{Jungleを使用したアプリケーション} -本章では、実際にJungleを使用したアプリケーションを紹介する。 +\chapter{組織の中の許認可を管理するアプリケーションmaTrix} + +maTrixとはSymphonies社が開発しているアカウント管理、許諾判定システムのことである。 +人や組織の情報などを保持しており、それらの情報を関連付けることで組織の構造を表現している。 \label{chap:concept} -\section{BBS} -Jungleを用いた簡易掲示板システムで、組み込みウェブサーバーであるjettyをフロントエンドとし作成、そのバックエンドとしてJungleを利用している。 -今迄Jungleにデータを格納する方法は実際にJavaのコードから直接格納するしか無かったが、BBSを使用することで、ブラウザを使用してJungleへデータの格納とデータの表示を行えるようになった。 - - -\section{XMLReader} -実際にアプリケーション等で使用しているデータを書き出す際に、XML形式を使用することが多い。 -JungleXMLReaderは、XMLファイルを読み込み、Jungleにデータとして格納するアプリケーションである。 -XMLはデータが木構造になっているため、Jungleにそのまま格納することが可能である。 - -JungleXMLReaderの実装にはsax(Simple API for XML)を用いて実装を行った。 -saxは、XMLのタグやテキストデータを読んだ際にイベントを発生させる。 -プログラマは、ContentHandlerという特殊なイベントリスナをsaxのparserに登録すると、構文解析処理の過程でXMLの要素を読んだ際に、発生するイベントを取得できる。 -イベントには、読み込んだタグの名前やテキストデータが含まれているため、プログラマは構文解析結果を随時受け取ることが出来る。 - -\clearpage - -saxで構文解析の途中に発生するイベントは多数あるが、今回XMLReaderで使用したイベントだけ以下に記述する。 - -\begin{figure}[htpb] -\begin{center} -\includegraphics[height=10cm,bb= 0 0 358 500]{fig/sax.pdf} -\caption{イベントが呼ばれるタイミングの例} -\label{fig:sax} -\end{center} -\end{figure} - -\begin{table}[h] -\caption{発生するイベント一覧} -\label{list:configTree} -\begin{center} -\begin{tabular}{|l|l|} \hline -イベント名 & 呼ばれるタイミング ~ \\ \hline -startDocument & XMLのParseを始める際に呼ばれる ~ \\ \hline -startElement & 要素を読み込んだ際に呼ばれる ~\\ \hline -characters & 要素のTextを読み込んだ際に呼ばれる ~ \\ \hline -endElement & 要素が終わった時に呼ばれる ~ \\ \hline -endDocument & XMLのParseが終わった際に呼ばれる ~\\ \hline -\end{tabular} -\end{center} -\end{table} - -saxでは、org.xml.sax.helpers.DefaultHandlerという形で、ContentHandlerのデフォルト機能が提供されているため、プログラマはこれを継承することで、必要なイベント処理のみをoverrideして記述できるようになっている。 -JungleXMLReaderで使用しているReadXmlHandlerは、要素を読み込んだ時、テキストを読み込んだ時、要素が終わった時、XMLのParseが終わった時、の4つのイベントを使用している。 - -\begin{itembox}[l]{sax example} -\begin{verbatim} -SAXParser saxParser = saxParserFactory.newSAXParser(); -ReadXmlHandler readXmlHandler = new ReadXmlHandler(); -saxParser.parse(new FileInputStream(xmlPath), readXmlHandler); -\end{verbatim} -\end{itembox} - -sax exampleは、実際にsaxPerserを生成し構文解析を発生させるまでのコードである。 -\begin{enumerate} -\item 最初にsaxParserFactory.newSAXPerser()で新しいParserを生成する -\item 次にDefaultHandlerを継承したReadXmlHandlerのインスタンスを生成する -\item 最後にparser.parse(XMLFile,DefaultHandler)に読み込みたいXMLファイルと生成したContentHandlerを渡し構文解析を行う。 -\end{enumerate} - - - -\section{maTrix} -maTrixとはSymphonies社が開発しているアカウント管理、許諾判定システムのことである。 -人や組織の情報などを保持しており、それらを関連付けることで表現している。 -今現在maTixはPostgreSQLを使用している。本研究は実用アプリケーションであるmaTrix上にJungleを組み込み評価することが目的であるので、maTrixについても本章で解説することとする。 - - -\subsection{maTrixにおけるアプリケーションのアカウント管理} - - -maTrixを使用しなかった場合、図\ref{fig:maTrix1}のようにアプリケーションごとにアカウントを作る必要があり、userの権限等が変わった際に、全てのアカウントの更新を行う必要があるため、手間がかかったり、ミスが発生するなど、業務に支障をきたすおそれがある。 +\section{保持するデータ構造} +matrixは人、役職、役割、権限と言った木構造の組織、許認可の判断に用いるポリシーファイルの2つのデータを持っている。 +maTrixが保持しているデータは、UniqueIdを保持しており、それを利用しお互いに参照しあっている。(図\ref{fig:refmaTrixData})。 \begin{figure}[h] \begin{center} -\includegraphics[height = 6cm , bb=0 0 538 339]{fig/maTrix1.pdf} -\caption{maTrixにおけるアカウント管理例1} -\label{fig:maTrix1} -\end{center} -\end{figure} - -しかしmaTrixを用いることで図\ref{fig:maTrix2}の様に、maTrixのアカウント1つで全ての業務アプリケーションにアクセスできるため、userの権限が変わったとしてもmaTrixのアカウントの更新だけしか行う必要がないので、手間もかからず、ミスも発生しづらい。 - - -\begin{figure}[h] -\begin{center} -\includegraphics[height = 6cm , bb=0 0 538 301]{fig/maTrix2.pdf} -\caption{maTrixにおけるアカウント管理例2} -\label{fig:maTrix2} +\includegraphics[bb=0 0 388 201]{fig/refMatrixData.pdf} +\caption{マトリックスの組織構造例} +\label{fig:refmaTrixData} \end{center} \end{figure} - - -\subsection{maTrixの保持するデータ構造} -matrixは人、役職、役割、権限と言った木構造の組織、許認可の判断に用いるポリシーファイルの2つのデータを持っている。 -maTrixが保持しているデータはお互いに参照している。%(図\ref{fig:refmaTrixData})。 -また、過去のデータも全て保持し、それらのデータはまとめて構成情報モデルとして版管理している。 - -%\begin{figure}[h] -%\begin{center} -%\includegraphics[bb=0 0 388 201]{fig/refMatrixData.pdf} -%\caption{maTrixにおけるアカウント管理例2} -%\label{fig:refmaTrixData} -%\end{center} -%\end{figure} - - - +\newpage +また、maTrixは、過去のデータも全て保持し、それらのデータはまとめて構成情報モデルとして版管理している。 \begin{figure}[h] \begin{center} \includegraphics[height = 6cm , bb=0 0 463 271]{fig/maTrixVersion1.pdf} @@ -178,7 +85,7 @@ \label{list:TreeNode} \begin{center} \begin{tabular}{|l|l|} \hline -Persons & この要素以下にPersonの情報があることを意味する~ \\ \hline +Persons & この要素以下にPersonの情報があることを意味する~ \\ \hline Person & 人の情報がこれ以下にあることを示す。uniqueIdが割り振られている ~\\ \hline accontId & そのPersonのアカウントId ~ \\ \hline lastName & 苗字 ~ \\ \hline @@ -197,72 +104,63 @@ \end{table} Person.xmlを例で上げたが、役職Treeや役割Treeも同じような構造でデータを保持している。 - -\subsection{Jungle上でのmaTrixのデータ構造の表現} -本節では、前節で述べた、maTrixのデータ構造をどのようにJungleで表現するかを記述する。 -人物Treeや役職Treeは、木構造のデータであるためそのままJungleに格納することができる。 -実際に人物Treeを格納した際のデータの形(図\ref{fig:PersonTree})を以下に示す。 - -\begin{figure}[h] -\begin{center} -\includegraphics[height = 23cm , bb=150 0 1407 1603]{fig/JungleXmlTree.pdf} -\caption{Jungle上での人物Tree表現例} -\label{fig:PersonTree} -\end{center} -\end{figure} +人物や役割等のデータ同士の参照はIdを用いて行っている。 +また、maTrixには、構成情報からデータを取得するFunctionが15種類実装されている。 \clearpage -Jungle上での、構成情報モデルの表現は、構成情報モデルTreeを作成し管理する(図\ref{fig:configTree})。 +\section{アカウント管理} + +maTrixは、一度の利用者認証で複数のサービスを利用できるサービスであるSSOを採用している。 +maTrixを使用しなかった場合、図\ref{fig:maTrix1}のようにアプリケーションごとにアカウントを作る必要があり、userの +権限等が変わった際に、全てのアカウントの更新を行う必要があるため、手間がかかったり、ミスが発生するなど、業務に支障をきたすおそれがある。 \begin{figure}[h] \begin{center} -\includegraphics[height = 8cm ,bb=0 0 530 347]{fig/configTree.pdf} -\caption{構成情報モデルTree表現例} -\label{fig:configTree} +\includegraphics[height = 6cm , bb=0 0 538 339]{fig/maTrix1.pdf} +\caption{maTrixにおけるアカウント管理例1} +\label{fig:maTrix1} +\end{center} +\end{figure} + +しかしmaTrixを用いることで図\ref{fig:maTrix2}の様に、maTrixのアカウント1つで全ての業務アプリケーションにアクセ +スできるため、userの権限が変わったとしてもmaTrixのアカウントの更新だけしか行う必要がないので、手間もかからず、ミスも発生しづらい。 + + +\begin{figure}[h] +\begin{center} +\includegraphics[height = 6cm , bb=0 0 538 301]{fig/maTrix2.pdf} +\caption{maTrixにおけるアカウント管理例2} +\label{fig:maTrix2} \end{center} \end{figure} +この様に複数のサービスを使用する際は、maTrixの様なアカウント管理サービスは必須とも言える。 -\begin{table}[h] -\caption{構成情報TreeのTreeNodeが保持しているAttribute} -\label{list:configTree} -\begin{center} -\begin{tabular}{|l|l|} \hline -version & 構成情報のversion ~ \\ \hline -person & 構成情報のversionに対応する人物Treeのversion ~\\ \hline -organization & 構成情報のversionに対応する組織Treeのversion ~ \\ \hline -role & 構成情報のversionに対応する役割Treeのversion ~ \\ \hline -rde & 構成情報のversionに対応する役割記述要素Treeのversion ~\\ \hline -\end{tabular} -\end{center} -\end{table} - -実際にどのようにJungle上で過去の構成情報モデルにアクセスするか、例題を用いて説明する。 -構成情報モデルversion:3に対応する人物Treeにアクセスする手順を以下に示す。 +\section{申請の許認可} +maTrixを用いた許認可は、アクセス管理のルールを表現できるXACMLで記述された、ポリシーファイルを用いて行う。 +ポリシーファイルは、リポジトリで管理されており、アクセス要求にあったポリシーファイルが利用される。 +以下にmaTrixでの申請の許認可の流れを記述する。 \begin{enumerate} -\item 構成情報Treeからアクセスしたいversion情報を保持しているNodeを取得する(今回の例題ではversion3) -\item 取得したTreeNodeには、構成情報:version:3に対応した人物Treeなどのversionが記述されている(図\ref{fig:configTree})ので、人物Treeのverson(v:5)を取得する -\item 2で取得したversionの人物Treeにアクセスする。 +\item Aさんが、資料Bを閲覧するために、maTrixにアクセス許可を求める。 +\item maTrixはリポジトリから、権限を決定するためのポリシーを取得する。 +\item そのポリシーを元に権限を与えるかどうかを判断する。 +\item maTrixは権限に応じて、資料BをAさんに与える。 \end{enumerate} -といった手順でJungleではmaTrixの構成情報モデルを表現する。 -以下にJungle上での構成情報モデル表現の図(\ref{fig:configTree2})を記す。 +といった流れになる。 -\begin{figure}[h] -\begin{center} -\includegraphics[height = 15cm ,bb=0 0 1092 703]{fig/configModel.pdf} -\caption{構成情報モデルTree表現例2} -\label{fig:configTree2} -\end{center} -\end{figure} +maTrixの許認可を使用するメリットとして、許認可のログをとっておくことで、いつ、誰が、どのポリシーを元に、どんなことを、したかの情報がいつでも取得可能であるため、不正アクセス等の問題発生時の解決等役立つ。 +といったメリットも有る。 \clearpage -\subsection{XACML} -XACMLでは、データに関するアクセス要求について、その要求元の情報と要求の内容、アクセス対象の組み合わせから、そのアクセス要求が許可されるか否認されるかを判断するためのルールを記述できる。 -実際に使用する際は、XACMl自体がアクセス制御を行うのではなく、アクセス管理アプリケーションがXACMLを参照しアクセス制御を行う。XACMLは以下の様なデータ構造を持つ(図\ref{fig:xacml}) +\section{XACML} +本節ではmaTrixのポリシーファイルの記述に用いられているXACMLについての説明を行う。 +XACMLでは、データに関するアクセス要求について、その要求元の情報と要求の内容、アクセス対象の組み合わせから、その +アクセス要求が許可されるか否認されるかを判断するためのルールを記述できる。 +実際に使用する際は、XACML自体がアクセス制御を行うのではなく、アクセス管理アプリケーションがXACMLを参照しアクセス制御を行う。XACMLは以下の様なデータ構造を持つ(図\ref{fig:xacml}) %\begin{figure}[h] %\begin{center} @@ -290,7 +188,7 @@ ルールの評価は、ルール結合アルゴリズム(表\ref{list:rule})にそって結合する。 \begin{table}[h] -\caption{Ruleの評価} +\caption{Ruleの評価} \label{list:rule} \begin{center} \begin{tabular}{|l|l|l|} \hline @@ -304,7 +202,7 @@ \end{center} \end{table} \newpage - + Policy 複数のRuleをまとめたものをPolicyという。 @@ -326,113 +224,3 @@ \end{center} \end{table} -maTrixでは、許認可を行う際に使用するPolicyFileをXACMLで記述している。 - -\clearpage -\begin{itembox}[l]{xacmlの記述例} -\begin{verbatim} -<?xml version="1.0" encoding="UTF-8"?> -<Policy -PolicyId="urn:srl-oasis:names:matrix:tank:aso-sample:01-01:policy" -RuleCombiningAlgId = ここにXACMLのルール結合アルゴリズムを記述する` -<Target> -//誰が、どこに、何を出来るかのルールを記述する -</Target> -<Rule -RuleId="urn:srl-oasis:names:matrix:tank:aso-sample:01-01-01:rule" -Effect="Deny"> -<Target> -<Subjects> -<Subject>//操作できる人の条件を記述</Subject> -</Subjects> -<Redources> -<Redource>//どのリソースに対してアクセスできるかを記述</Redource> -</Redources> -<Actions> -<Action>//どんな操作を許可するかを記述</Action> -</Actions> -</Target> -<Condition> -ターゲット意外に対する規則があればここに記述する -</Condition> -</Rule> -<Rule> -//省略 -</Rule> -</Policy> -\end{verbatim} -\end{itembox} - -\newpage - -\subsection{Jungle上でのmaTrixの許認可} -Jungle上でmaTrixの許認可を行う際は、XACMLを読み込み、各Treeに対して検索を行いその結果から許認可を行う。 - -例えば、Aさんが、管理者しか閲覧出来ない資料を閲覧しようとした場合は - -\begin{enumerate} -\item 人物Treeから、Aさんのデータを取得し、Aさんに割り振られている役割のIDを取得する。 -\item 役割Treeから、1で取得した役割IDのデータを取得し、その役割IDに割り振られている役割記述要素IDを取得する -\item 役割記述要素Treeから、2で取得した役割記述要素IDのデータを取得し、役割記述要素名を取得する -\item 3で取得した役割記述要素名が、管理者かどうかを調べ、一致した場合はアクセスを許可し、一致しなかった場合はアクセスを拒否する。 -\end{enumerate} - -といった流れになる。 - -\section{XACMLInterpreter} -XMLReaderと同じようsaxにを用いて実装している。 -XACMLInterpreterは、引数に、使用するpolicyFile名、どのResourceにアクセスするか、どんな処理を行うか(action)、許認可を求める人のUserID等を与える。 - -XAMLInterpreterでHandlerが使用しているイベントは、XMLReaderと同じで、startElement、charactor、endElement、endDocumentの4つを使用している。 - -startElementでは、主に評価関数や、評価関数の引数等を取得する。 -また評価関数が入れ子になっていることがあるため、functionStackとattributeStackを用いて評価関数と引数を関連付けている。\ref{fig:functionStack} - -\begin{figure}[h] -\begin{center} -\includegraphics[height=5cm,bb=0 0 426 299]{fig/xacmlStack.pdf} -\caption{XACMLのデータ構造} -\label{fig:functionStack} -\end{center} -\end{figure} - -charactorでは、評価関数の引数を取得し、AttributeStackにpushする - -endElementでは。評価関数の実行を行う。 -以下に入れ子になっている評価関数例と、その時の処理の流れを記述する。 -\clearpage -\begin{itembox}{入れ子になっている関数の例} -\begin{verbatim} -<Apply FunctionId=評価関数1> - <Apply FunctionId=評価関数2> - <ResourceAttributeDesignator - AttributeId=評価関数2の引数 - DataType=評価関数2の引数のデータ型> - </Apply> - <SubjectAttributeDesignator - AttributeId=評価関数1 - DataType=評価関数1のデータ型> -</Apply> -\end{verbatim} -\end{itembox} - - - -\begin{enumerate} -\item $<$Apply$>$を読み込んだ際に、functionStackに評価関数1をpushする -\item 新しい評価関数1に対応する引数(List<String>)をattributeStackにpushする。 -\item 2つ目の$<$Apply$>$を読み込んだ際に、functionStackに評価関数2をpushする -\item 新しい評価関数2に対応する引数(List<String>)をattributeStackにpushする。 -\item $<$ResourceAttributeDesignator$>$を読み込んだ際に、attributeListから評価関数2に対応するattirbuteListを取得する -。 -\item attributeListに評価関数2の引数をaddし、attirbuteStackにpushする。 -\item $<$/Apply$>$を読み込んだ際に、attributeStackから評価関数2の引数を取得する -\item 7で取得した引数を用いてfunctionStackから取得した評価関数2を実行する -\item attributeStackから評価関数1のattributeListを取得し、評価関数2の結果をaddする -\item 評価関数1のattribtueListをattributeStackにpushする -\item $<$SubjectAttributeDesignator$>$を読み込んだ際に、attributeStackから評価関数1のattributeListを取得し、評価関数1の引数をaddする。 -\item $<$/Apply$>$を読み込んだ際に、attributeStackから評価関数1の引数を取得する -\item 12で取得した引数を用いてfunctionStackから取得した評価関数1を実行する -\end{enumerate} - -endDocumentでは、これまでに実行した評価関数等の結果から今回の許認可を判断する。
--- a/chapter4.tex Thu Feb 12 19:18:45 2015 +0900 +++ b/chapter4.tex Sat Feb 14 03:06:15 2015 +0900 @@ -1,4 +1,330 @@ -\chapter{Jungle上でmaTrixを構築するのに必要なAPIの設計} +\chapter{Jungle上でのmatrixの実装} \label{chap:poordirection} -\section{maTrixのデータ構造の表現に必要なAPI} -\section{Jungle上でのmaTrixの許認可に必要なAPI} + + +\section{Jungle上でのmaTrixのデータ構造の表現} +maTrixは、前章3.1でも説明したが、人物、役職、役割、っといった情報を木構造で保持している。 +また、それらのTreeはIDで参照しあっている。 +人物Treeや役職Treeは、木構造のデータであるためそのままJungleに格納することができる。 +実際に人物Treeを格納した際のデータの形を図\ref{fig:PersonTree}に示した。 +Tree間の参照は、TreeのデータはUniqueIdを保持しているため、Treeに対してIdで検索を行うことで表現した。(図\ref{fig:refJungleData} + + +\begin{figure}[h] +\begin{center} +\includegraphics[bb=0 0 460 225]{fig/refJungleData.pdf} +\caption{Tree同士の参照の表現例} +\label{fig:refJungleData} +\end{center} +\end{figure} + +\begin{figure}[h] +\begin{center} +\includegraphics[height = 23cm , bb=150 0 1407 1603]{fig/JungleXmlTree.pdf} +\caption{Jungle上での人物Tree表現例} +\label{fig:PersonTree} +\end{center} +\end{figure} + + + +\clearpage + +Jungleは、全てのversionのTreeでユニークなIdを保持しているため、Idを指定すれば、過去のTreeにアクセスすることが可能である。 +それを利用し、Jungle上での、過去の変更履歴を保持する構成情報モデルの表現は、構成情報モデルのversionと、各Treeのversionを保持し、関連付ける構成情報モデルTreeを作成し表現した。(図\ref{fig:configTree})。 +\begin{figure}[h] +\begin{center} +\includegraphics[height = 8cm ,bb=0 0 530 347]{fig/configTree.pdf} +\caption{構成情報モデルTree表現例} +\label{fig:configTree} +\end{center} +\end{figure} + + + +\begin{table}[h] +\caption{構成情報TreeのTreeNodeが保持しているAttribute} +\label{list:configTree} +\begin{center} +\begin{tabular}{|l|l|} \hline +version & 構成情報のversion ~ \\ \hline +person & 構成情報のversionに対応する人物Treeのversion ~\\ \hline +organization & 構成情報のversionに対応する組織Treeのversion ~ \\ \hline +role & 構成情報のversionに対応する役割Treeのversion ~ \\ \hline +rde & 構成情報のversionに対応する役割記述要素Treeのversion ~\\ \hline +\end{tabular} +\end{center} +\end{table} + + +実際にどのようにJungle上で過去の構成情報モデルにアクセスするか、例題を用いて説明する。 +構成情報モデルversion:3に対応する人物Treeにアクセスする手順を以下に示す。 + +\begin{enumerate} +\item 構成情報Treeからアクセスしたいversion情報を保持しているNodeを取得する(今回の例題ではversion3) +\item 取得したTreeNodeには、構成情報:version:3に対応した人物Treeなどのversionが記述されている(図\ref{fig:configTree})ので、人物Treeのverson(v:5)を取得する +\item 2で取得したversionの人物Treeにアクセスする。 +\end{enumerate} +といった手順でJungleではmaTrixの構成情報モデルを表現する。 +以下にJungle上での構成情報モデル表現の図(\ref{fig:configTree2})を記す。 + +\begin{figure}[h] +\begin{center} +\includegraphics[height = 15cm ,bb=0 0 1092 703]{fig/configModel.pdf} +\caption{構成情報モデルTree表現例2} +\label{fig:configTree2} +\end{center} +\end{figure} + +\clearpage + + +\section{Jungle上の許認可} +Jungle上でmaTrixの許認可を行う際は、ポリシーファイルを読み込み、各Treeに対して検索関数を用いて、その結果から許認可を行う。 + +例えば、Aさんが、管理者しか閲覧出来ない資料を閲覧しようとした場合は + +\begin{enumerate} +\item 人物Treeから、Aさんのデータを取得し、Aさんに割り振られている役割のIDを取得する。 +\item 役割Treeから、1で取得した役割IDのデータを取得し、その役割IDに割り振られている役割記述要素IDを取得する +\item 役割記述要素Treeから、2で取得した役割記述要素IDのデータを取得し、役割記述要素名を取得する +\item 3で取得した役割記述要素名が、管理者かどうかを調べ、一致した場合はアクセスを許可し、一致しなかった場合はア +クセスを拒否する。 +\end{enumerate} + +といった流れになる。 + + + + +\section{検索APIの実装} +Jungleは、データを格納するAPIは実装されていたが、データの検索を行うAPIの実装は行われていなかった +しかし、Jungle上でmaTrixのデータ構造を表現、許認可をためには検索APIが必要であるため、実装を行った。 + + + +Treeに対する検索は、find関数をjava8の新機能であるlambda式を用いて実装した。 +lambda式を使用することで、匿名クラスを使う時より簡潔にコードを記述できるようになった。 +以下に実際にlambda式を用いたfind関数の使用例を記す。 + +\begin{itembox}[l]{JungleのQuery部分のソースコード} +\begin{verbatim} +Iterator<TreeNode> pairPersonIterator = +traverser.find((TreeNode node) -> { + String element = node.getAttributes().getString("element"); + if (element == null) + return false; + if (element.equals("Person")) + return true; + return false; +}, "element", "Person"); +\end{verbatim} +\end{itembox} + +find関数は引数にQuery、String key、String valueの3つの引数を取り、条件に一致したNodeのIteratorを返す。 +第一引数には、探索の条件を記述する関数boolean comdition(TreeNode)を定義したInterfaceQueryを。 +第二、第三引数の、String key、String valueは後述するIndexを使うために使用する。 + +\begin{itembox}[l]{QueryInterfaceの定義} +\begin{verbatim} +public interface Query { + boolean condition(TreeNode _node); +} +\end{verbatim} +\end{itembox} + +find関数の処理の流れは、まず、Indexが登録されているかを調べる、Indexがある場合はIndexを使用し値を返す。Indexがない場合は、Treeを深さ優先で全探索する。(図\ref{fig:DepthFirstSearch}) + + +\begin{figure}[h] +\begin{center} +\includegraphics[height=5cm,bb=0 0 445 249]{fig/DepthFirstSearch.pdf} +\caption{findの検索順序} +\label{fig:DepthFirstSearch} +\end{center} +\end{figure} + + +検索APIは、他に特定のNode以下に対して検索を行うfindInSubTree(Query,node,key,value)も実装した。(図\ref{fig:FindInSubTree}) + +\begin{figure}[h] +\begin{center} +\includegraphics[height=5cm,bb=0 0 445 249]{fig/FindInSubTree.pdf} +\caption{FindInSubTreeの検索順序} +\label{fig:FindInSubTree} +\end{center} +\end{figure} + +findInSubTreeを使用することで、更に限定的な探索が行えるようになった。 + +また、maTrix上に実装されていた、構成情報からデータを取得するFunctionも全て実装して、実際のmaTrixと同じようにデータのアクセスを行えるようにした。 +\clearpage + + + +\section{Jungle上のIndexの設計} +Jungleの探索はTreeを全探索するので、探索の計算量はO(n)となり、非常に効率が悪い。しかし、Indexを使用することで効 +率よく探索を行えるようになる。 +また、Jungleは過去のTreeを全て保持しているため、Treeのversion毎にIndexを持っていることが望ましい。 +そこで、メモリの消費量を抑え、各versionのTreeにIndexをもたせる方法として、FunctionalJavaのTreeMapを使用したIndexの実装を提案する。 + +TreeMapは、KeyとValueのペアを用いて赤黒木を構築する。 +赤黒木の長所として、ソート済み二分木の探索なので計算量がO(logN)であること、データ編集時の最悪計算量がデータ構造のうちで最善のものの1つであるので、安定した速度でデータの編集が行える。 + +それに加え、FunctionalJavaのTreeMapは、データの更新が行われた際に、一度作られたTreeに対して更新を行わず過去のTreeを再利用し、更新後のTreeMap新しく返すため、メモリの使用量を抑えつつ複数のversionのTreeMapを保持できる。 +そのため、JungleのIndexと非常に相性が良い。 +Indexは各JungleNodeがローカルにIndexを持つon the fly形式で実装する。(図\ref{fig:JungleIndex}) + +\begin{figure}[h] +\begin{center} +\includegraphics[height=5cm,bb=0 0 445 292]{fig/JungleIndes.pdf} +\caption{JungleのIndex} +\label{fig:JungleIndex} +\end{center} +\end{figure} + + +これまでのJungleのTreeの欠点として、親から子ノードを取得することは可能であったが、子ノードから親ノードを取得することは出来なかった。 +そのため、Indexで取得できる値がNodeだけでは、Indexで検索を行って取得したNodeの編集が行えないため、Indexの型を、 +TreeMap$<$String key, TreeMap$<$ String value , List$<$Pair$<$TreeNode,NodePath$>>>>$ +と定義し、返り値をPair$<$TreeNode,NodePath$>$と、TreeNodeとそのTreeNodeへのNodePathのペアにすることでNodeの編集を可能にしていた。 +しかし、Treeの編集を行った際に、TreeNodeへのPathは常に変動する為、Index内のNodePathの更新コストが編集時のネックであった。 +しかし、後述するParentIndexを実装することで、TreeNodeからNodePathを取得できるようになったため、IndexにNodePathを入れる必要がなくなり、Indexの型はTreeMap$<$String key,TreeMap$<$String value,List$<$TreeNode$>>>>$と定義できるようになった。 + +最初のTreeMap$<$String key,TreeMap$>$はIndexを格納するTreeMapである。 +このTreeMapに対しkeyでgetを行うと、keyに対応するIndexが登録されている場合、Indexを取得でき、取得したIndexに対し +valueでgetを行うと、valueの値を持つNodeのListが返ってくる。 + +\section{親Nodeを返す特殊なIndex} +TreeNodeでgetを行うと、親Nodeを返すParentIndexを実装した。 +ParentIndexの型は、TreeMap$<$TreeNode,TreeNode$>$で定義されている。 + +\begin{figure}[h] +\begin{center} +\includegraphics[height=5cm,bb=0 0 426 277]{fig/ParentIndex.pdf} +\caption{ParentIndexExample} +\label{fig:ParentIndex} +\end{center} +\end{figure} + +上記の図\ref{fig:ParentIndex}を用いたParentIndexの例を表\ref{list:ParentIndex}にまとめた。 +\begin{table}[h] +\caption{ParentIndexの返り値} +\label{list:ParentIndex} +\begin{center} +\begin{tabular}{|l|l|} \hline +返ってくるNode & 渡すNode ~ \\ \hline +Node2 & Node4、Node5 ~ \\ \hline +Node3 & Node6、Node7 ~ \\ \hline +Node1 & Node2、Node3 ~ \\ \hline +\end{tabular} +\end{center} +\end{table} + +ParentIndexを使用することで、TreeNodeからNodePathを取得できるようになった。 +以下にParentIndexを使用して、NodePathを取得する方法を示す。 +\begin{enumerate} +\item ParentIndexを用いて親Nodeを取得する。 +\item 親Nodeから子ノードのリストを取得する。 +\item 子ノードのリストから、親Nodeをgetするのに使用したNodeがある位置のインデックスを取得する。 +\item 3で取得したIndexをPathに追加する +\item rootNodeに辿り着くまで1 - 4を繰り返すと、対象へのNodePathが取得できる。 +\end{enumerate} + + + +\clearpage + +\section{過去のTreeに対するアクセス} +Jungle上でmaTrixの構成情報モデルの表現を行う際に、過去のTreeにアクセスする必要があるが、Jungleには、過去のTreeに対し、アクセスするAPIは実装されていなかったため、実装を行った。 + + +Jungleは、クラスChangeSet内にTreeのデータを保持している。 +ChangeSetからは、今のrevisionと、1つ前のTreeのデータを取得できるため、再帰的に過去のTreeのデータを取得できる。 + +アクセスしたいTreeのrevisionを引数に取り、過去のTreeのデータの取得とrevisionの比較を繰り返すことで過去のTreeにアクセスする、getOldTree(long revision)を DefaultJungleTree内に実装した。 + + +以下にgetOldTreeの実装部分のコードを示す。 + +\begin{itembox}[l]{getOldTreeの実装部分} +\begin{verbatim} +@Override +public Either<Error, JungleTree> getOldTree(long revision) { + TreeContext tc = repository.get(); + ChangeSet cs = tc.getChangeSet(); + + for (; cs.revision() != revision;) { + cs = cs.prev(); + if (cs == null) + return DefaultEither.newA(GetOldTreeError.OLD_TREE_NOT_FOUND); + } + + TreeNode root = cs.getRoot(); + + TreeContext oldTc = new DefaultTreeContext(root, cs); + String oldTreeUuid = uuid + revision; + JungleTree oldTree = new DefaultJungleTree(oldTc, oldTreeUuid, writer, treeEditor); + return DefaultEither.newB(oldTree); +} +\end{verbatim} +\end{itembox} + +for文の中で、過去のTreeの取得と、revisionの比較を繰り返している。 +revisionが一致した場合は、そのversionのTreeを返し、アクセスしたいrevisionを持つTreeが見つからなかった場合は、エラーを返す。 + +\newpage + +\section{XMLReader} +maTrixからXML形式で書き出されたデータをJungleに格納するためのAPIとして、XMLReaderを実装した。 +JungleXMLReaderの実装にはsax(Simple API for XML)を用いた。 +saxは、XMLのタグやテキストデータを読んだ際にイベントを発生させながら、構文解析を行う。 +プログラマは、ContentHandlerという特殊なイベントリスナをsaxのparserに登録すると、発生するイベントを取得できる。 +イベントには、読み込んだタグの名前やテキストデータが含まれている。 + + +\begin{table}[h] +\caption{saxの主要なイベント一覧} +\label{list:TreeNode} +\begin{center} +\begin{tabular}{|l|l|} \hline +イベント名 & 呼び出されるタイミング \\ \hline +startDocument & XMLのParseが始まる時 ~\\ \hline +endDocument & XMLのParseが終わった時~\\ \hline +startElement & 要素を読み込んだ時 ~\\ \hline +endElement & 要素が閉じられた時 ~\\ \hline +Charactor & テキストが読み込まれた時 ~\\ \hline +\end{tabular} +\end{center} +\end{table} + +saxでは、org.xml.sax.helpers.DefaultHandlerという形で、ContentHandlerのデフォルト機能が提供されているため、プロ +グラマはこれを継承することで、必要なイベント処理のみをoverrideして記述できるようになっている。 + +JungleXMLReaderで使用しているReadXmlHandlerは、startElement、charactor、endElement、endDocument、の4つのイベントを使用しており、startElement、charactor、endElementで、XMLのデータをTreeに格納していき、endDocumentが呼ばれた時に木のCommitを行っている。 + +\section{XACMLInterpreter} +XMLReaderと同じようsaxにを用いて実装している。 +XACMLInterpreterは、引数に、使用するpolicyFile名、どのResourceにアクセスするか、どんな処理を行うか、許認可を求める人のUserID等を与える。 + +XAMLInterpreterでHandlerが使用しているイベントは、XMLReaderと同じで、startElement、charactor、endElement、endDocumentの4つを使用している。 + +startElementでは、主に評価関数や、評価関数の引数等を取得する。 +また評価関数が入れ子になっていることがあるため、functionStackとattributeStackを用いて評価関数と引数を関連付けて +いる。図(\ref{fig:functionStack})の例だと、function3を実行した後、function3の返り値と、function2の引数の2つを使ってfunction2を実行する。 +\begin{figure}[h] +\begin{center} +\includegraphics[height=5cm,bb=0 0 426 299]{fig/xacmlStack.pdf} +\caption{XACMLInterpreterで用いられているstack} +\label{fig:functionStack} +\end{center} +\end{figure} + +charactorでは、評価関数の引数を取得し、AttributeStackにpushする + +endElementでは。主に評価関数の実行を行う。 + +endDocumentでは、これまでに実行した評価関数等の結果から今回の許認可を判断する。 + +XACMLInterpreterを用いることでJungle単体でXACMLで記述されたポリシーファイルのテストが行えるようになった。 +
--- a/main.aux Thu Feb 12 19:18:45 2015 +0900 +++ b/main.aux Sat Feb 14 03:06:15 2015 +0900 @@ -1,95 +1,100 @@ \relax -\@writefile{toc}{\contentsline {chapter}{\numberline {第1章}序論}{1}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第1章}世の中の知的構造を全て格納できるデータベース}{1}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{chap:introduction}{{1}{1}} \@writefile{toc}{\contentsline {section}{\numberline {1.1}研究目的}{1}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第2章}Jungle}{2}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第2章}分散データベースJungle}{2}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} \newlabel{chap:concept}{{2}{2}} \@writefile{toc}{\contentsline {section}{\numberline {2.1}JungleCore}{2}} -\@writefile{toc}{\contentsline {section}{\numberline {2.2}JungleNetwork}{2}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第3章}Jungleを使用したアプリケーション}{3}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces 破壊的木構造の編集}}{2}} +\newlabel{fig:Des}{{2.1}{2}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces 非破壊的木構造の編集}}{3}} +\newlabel{fig:nonDes}{{2.2}{3}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces 非破壊的木構造の編集}}{3}} +\newlabel{fig:desMerit}{{2.3}{3}} +\@writefile{toc}{\contentsline {section}{\numberline {2.2}JungleNetwork}{3}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第3章}組織の中の許認可を管理するアプリケーションmaTrix}{4}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\newlabel{chap:concept}{{3}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {3.1}保持するデータ構造}{4}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces マトリックスの組織構造例}}{4}} +\newlabel{fig:refmaTrixData}{{3.1}{4}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces maTrixの構成情報例1}}{5}} +\newlabel{fig:maTrixVersion1}{{3.2}{5}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces maTrixの構成情報例1}}{5}} +\newlabel{fig:maTrixVersion2}{{3.3}{5}} +\@writefile{lot}{\contentsline {table}{\numberline {3.1}{\ignorespaces Person.xmlの要素}}{7}} +\newlabel{list:TreeNode}{{3.1}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {3.2}アカウント管理}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces maTrixにおけるアカウント管理例1}}{8}} +\newlabel{fig:maTrix1}{{3.4}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.5}{\ignorespaces maTrixにおけるアカウント管理例2}}{8}} +\newlabel{fig:maTrix2}{{3.5}{8}} +\@writefile{toc}{\contentsline {section}{\numberline {3.3}申請の許認可}{9}} +\@writefile{toc}{\contentsline {section}{\numberline {3.4}XACML}{10}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.6}{\ignorespaces XACMLのデータ構造}}{10}} +\newlabel{fig:xacml}{{3.6}{10}} +\@writefile{lot}{\contentsline {table}{\numberline {3.2}{\ignorespaces Ruleの評価}}{11}} +\newlabel{list:rule}{{3.2}{11}} +\@writefile{lot}{\contentsline {table}{\numberline {3.3}{\ignorespaces XACMLのルール結合アルゴリズム}}{11}} +\newlabel{list:policy}{{3.3}{11}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}Jungle上でのmatrixの実装}{12}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chap:concept}{{3}{3}} -\@writefile{toc}{\contentsline {section}{\numberline {3.1}BBS}{3}} -\@writefile{toc}{\contentsline {section}{\numberline {3.2}XMLReader}{3}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces イベントが呼ばれるタイミングの例}}{4}} -\newlabel{fig:sax}{{3.1}{4}} -\@writefile{lot}{\contentsline {table}{\numberline {3.1}{\ignorespaces 発生するイベント一覧}}{4}} -\newlabel{list:configTree}{{3.1}{4}} -\@writefile{toc}{\contentsline {section}{\numberline {3.3}maTrix}{5}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}maTrixにおけるアプリケーションのアカウント管理}{5}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces maTrixにおけるアカウント管理例1}}{5}} -\newlabel{fig:maTrix1}{{3.2}{5}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces maTrixにおけるアカウント管理例2}}{6}} -\newlabel{fig:maTrix2}{{3.3}{6}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}maTrixの保持するデータ構造}{6}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces maTrixの構成情報例1}}{6}} -\newlabel{fig:maTrixVersion1}{{3.4}{6}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.5}{\ignorespaces maTrixの構成情報例1}}{7}} -\newlabel{fig:maTrixVersion2}{{3.5}{7}} -\@writefile{lot}{\contentsline {table}{\numberline {3.2}{\ignorespaces Person.xmlの要素}}{9}} -\newlabel{list:TreeNode}{{3.2}{9}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.3}Jungle上でのmaTrixのデータ構造の表現}{9}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.6}{\ignorespaces Jungle上での人物Tree表現例}}{10}} -\newlabel{fig:PersonTree}{{3.6}{10}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.7}{\ignorespaces 構成情報モデルTree表現例}}{11}} -\newlabel{fig:configTree}{{3.7}{11}} -\@writefile{lot}{\contentsline {table}{\numberline {3.3}{\ignorespaces 構成情報TreeのTreeNodeが保持しているAttribute}}{11}} -\newlabel{list:configTree}{{3.3}{11}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.8}{\ignorespaces 構成情報モデルTree表現例2}}{12}} -\newlabel{fig:configTree2}{{3.8}{12}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.4}XACML}{13}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.9}{\ignorespaces XACMLのデータ構造}}{13}} -\newlabel{fig:xacml}{{3.9}{13}} -\@writefile{lot}{\contentsline {table}{\numberline {3.4}{\ignorespaces Ruleの評価}}{14}} -\newlabel{list:rule}{{3.4}{14}} -\@writefile{lot}{\contentsline {table}{\numberline {3.5}{\ignorespaces XACMLのルール結合アルゴリズム}}{14}} -\newlabel{list:policy}{{3.5}{14}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.5}Jungle上でのmaTrixの許認可}{16}} -\@writefile{toc}{\contentsline {section}{\numberline {3.4}XACMLInterpreter}{16}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.10}{\ignorespaces XACMLのデータ構造}}{17}} -\newlabel{fig:functionStack}{{3.10}{17}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}Jungle上でmaTrixを構築するのに必要なAPIの設計}{19}} +\newlabel{chap:poordirection}{{4}{12}} +\@writefile{toc}{\contentsline {section}{\numberline {4.1}Jungle上でのmaTrixのデータ構造の表現}{12}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces Tree同士の参照の表現例}}{12}} +\newlabel{fig:refJungleData}{{4.1}{12}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.2}{\ignorespaces Jungle上での人物Tree表現例}}{13}} +\newlabel{fig:PersonTree}{{4.2}{13}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.3}{\ignorespaces 構成情報モデルTree表現例}}{14}} +\newlabel{fig:configTree}{{4.3}{14}} +\@writefile{lot}{\contentsline {table}{\numberline {4.1}{\ignorespaces 構成情報TreeのTreeNodeが保持しているAttribute}}{14}} +\newlabel{list:configTree}{{4.1}{14}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.4}{\ignorespaces 構成情報モデルTree表現例2}}{15}} +\newlabel{fig:configTree2}{{4.4}{15}} +\@writefile{toc}{\contentsline {section}{\numberline {4.2}Jungle上の許認可}{16}} +\@writefile{toc}{\contentsline {section}{\numberline {4.3}検索APIの実装}{16}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.5}{\ignorespaces findの検索順序}}{17}} +\newlabel{fig:DepthFirstSearch}{{4.5}{17}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.6}{\ignorespaces FindInSubTreeの検索順序}}{17}} +\newlabel{fig:FindInSubTree}{{4.6}{17}} +\@writefile{toc}{\contentsline {section}{\numberline {4.4}Jungle上のIndexの設計}{19}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.7}{\ignorespaces JungleのIndex}}{19}} +\newlabel{fig:JungleIndex}{{4.7}{19}} +\@writefile{toc}{\contentsline {section}{\numberline {4.5}親Nodeを返す特殊なIndex}{20}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.8}{\ignorespaces ParentIndexExample}}{20}} +\newlabel{fig:ParentIndex}{{4.8}{20}} +\@writefile{lot}{\contentsline {table}{\numberline {4.2}{\ignorespaces ParentIndexの返り値}}{20}} +\newlabel{list:ParentIndex}{{4.2}{20}} +\@writefile{toc}{\contentsline {section}{\numberline {4.6}過去のTreeに対するアクセス}{21}} +\@writefile{toc}{\contentsline {section}{\numberline {4.7}XMLReader}{22}} +\@writefile{lot}{\contentsline {table}{\numberline {4.3}{\ignorespaces saxの主要なイベント一覧}}{22}} +\newlabel{list:TreeNode}{{4.3}{22}} +\@writefile{toc}{\contentsline {section}{\numberline {4.8}XACMLInterpreter}{22}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.9}{\ignorespaces XACMLInterpreterで用いられているstack}}{23}} +\newlabel{fig:functionStack}{{4.9}{23}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}実装の評価}{24}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chap:poordirection}{{4}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}maTrixのデータ構造の表現に必要なAPI}{19}} -\@writefile{toc}{\contentsline {section}{\numberline {4.2}Jungle上でのmaTrixの許認可に必要なAPI}{19}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}Jungle上でmaTrixを構築するのに必要なAPIの実装}{20}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chap:poordirection}{{5}{20}} -\@writefile{toc}{\contentsline {section}{\numberline {5.1}過去のTreeに対するアクセス}{20}} -\@writefile{toc}{\contentsline {section}{\numberline {5.2}Treeに対する検索}{20}} -\@writefile{toc}{\contentsline {section}{\numberline {5.3}Index}{20}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第6章}FunctionalJava}{21}} +\newlabel{chap:poordirection}{{5}{24}} +\@writefile{toc}{\contentsline {section}{\numberline {5.1}検索のAPIの測定}{24}} +\@writefile{toc}{\contentsline {section}{\numberline {5.2}Indexの作成時間}{24}} +\@writefile{toc}{\contentsline {section}{\numberline {5.3}Node数とTreeの構築時間の測定}{24}} +\@writefile{toc}{\contentsline {section}{\numberline {5.4}transactionPerSecond}{24}} +\@writefile{toc}{\contentsline {section}{\numberline {5.5}FunctionalJavaのTreeMapのget}{24}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第6章}結論}{25}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chap:poordirection}{{6}{21}} -\@writefile{toc}{\contentsline {section}{\numberline {6.1}FunctionalJavaとは}{21}} -\@writefile{toc}{\contentsline {section}{\numberline {6.2}IndexでTreeMapを使用するメリット}{21}} -\@writefile{toc}{\contentsline {section}{\numberline {6.3}TreeMapのバグ}{21}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第7章}実装の評価}{22}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chap:poordirection}{{7}{22}} -\@writefile{toc}{\contentsline {section}{\numberline {7.1}検索のAPIの測定}{22}} -\@writefile{toc}{\contentsline {section}{\numberline {7.2}Indexの作成時間}{22}} -\@writefile{toc}{\contentsline {section}{\numberline {7.3}Node数とTreeの構築時間の測定}{22}} -\@writefile{toc}{\contentsline {section}{\numberline {7.4}transactionPerSecond}{22}} -\@writefile{toc}{\contentsline {section}{\numberline {7.5}FunctionalJavaのTreeMapのget}{22}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第8章}結論}{23}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} -\newlabel{chap:poordirection}{{8}{23}} -\@writefile{toc}{\contentsline {section}{\numberline {8.1}まとめ}{23}} -\@writefile{toc}{\contentsline {section}{\numberline {8.2}今後の課題}{23}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.1}push/pop}{23}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.2}indexのIncrementalUpdate}{23}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.3}differencialList}{23}} -\@writefile{toc}{\contentsline {subsection}{\numberline {8.2.4}exponential backoff}{23}} +\newlabel{chap:poordirection}{{6}{25}} +\@writefile{toc}{\contentsline {section}{\numberline {6.1}まとめ}{25}} +\@writefile{toc}{\contentsline {section}{\numberline {6.2}今後の課題}{25}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.1}push/pop}{25}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.2}indexのIncrementalUpdate}{25}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.3}differencialList}{25}} +\@writefile{toc}{\contentsline {subsection}{\numberline {6.2.4}exponential backoff}{25}} \bibcite{hoge}{1}
--- a/main.lof Thu Feb 12 19:18:45 2015 +0900 +++ b/main.lof Sat Feb 14 03:06:15 2015 +0900 @@ -1,18 +1,24 @@ -\addvspace {10\p@ } \addvspace {10\p@ } \addvspace {10\p@ } -\contentsline {figure}{\numberline {3.1}{\ignorespaces イベントが呼ばれるタイミングの例}}{4} -\contentsline {figure}{\numberline {3.2}{\ignorespaces maTrixにおけるアカウント管理例1}}{5} -\contentsline {figure}{\numberline {3.3}{\ignorespaces maTrixにおけるアカウント管理例2}}{6} -\contentsline {figure}{\numberline {3.4}{\ignorespaces maTrixの構成情報例1}}{6} -\contentsline {figure}{\numberline {3.5}{\ignorespaces maTrixの構成情報例1}}{7} -\contentsline {figure}{\numberline {3.6}{\ignorespaces Jungle上での人物Tree表現例}}{10} -\contentsline {figure}{\numberline {3.7}{\ignorespaces 構成情報モデルTree表現例}}{11} -\contentsline {figure}{\numberline {3.8}{\ignorespaces 構成情報モデルTree表現例2}}{12} -\contentsline {figure}{\numberline {3.9}{\ignorespaces XACMLのデータ構造}}{13} -\contentsline {figure}{\numberline {3.10}{\ignorespaces XACMLのデータ構造}}{17} +\contentsline {figure}{\numberline {2.1}{\ignorespaces 破壊的木構造の編集}}{2} +\contentsline {figure}{\numberline {2.2}{\ignorespaces 非破壊的木構造の編集}}{3} +\contentsline {figure}{\numberline {2.3}{\ignorespaces 非破壊的木構造の編集}}{3} +\addvspace {10\p@ } +\contentsline {figure}{\numberline {3.1}{\ignorespaces マトリックスの組織構造例}}{4} +\contentsline {figure}{\numberline {3.2}{\ignorespaces maTrixの構成情報例1}}{5} +\contentsline {figure}{\numberline {3.3}{\ignorespaces maTrixの構成情報例1}}{5} +\contentsline {figure}{\numberline {3.4}{\ignorespaces maTrixにおけるアカウント管理例1}}{8} +\contentsline {figure}{\numberline {3.5}{\ignorespaces maTrixにおけるアカウント管理例2}}{8} +\contentsline {figure}{\numberline {3.6}{\ignorespaces XACMLのデータ構造}}{10} +\addvspace {10\p@ } +\contentsline {figure}{\numberline {4.1}{\ignorespaces Tree同士の参照の表現例}}{12} +\contentsline {figure}{\numberline {4.2}{\ignorespaces Jungle上での人物Tree表現例}}{13} +\contentsline {figure}{\numberline {4.3}{\ignorespaces 構成情報モデルTree表現例}}{14} +\contentsline {figure}{\numberline {4.4}{\ignorespaces 構成情報モデルTree表現例2}}{15} +\contentsline {figure}{\numberline {4.5}{\ignorespaces findの検索順序}}{17} +\contentsline {figure}{\numberline {4.6}{\ignorespaces FindInSubTreeの検索順序}}{17} +\contentsline {figure}{\numberline {4.7}{\ignorespaces JungleのIndex}}{19} +\contentsline {figure}{\numberline {4.8}{\ignorespaces ParentIndexExample}}{20} +\contentsline {figure}{\numberline {4.9}{\ignorespaces XACMLInterpreterで用いられているstack}}{23} \addvspace {10\p@ } \addvspace {10\p@ } -\addvspace {10\p@ } -\addvspace {10\p@ } -\addvspace {10\p@ }
--- a/main.log Thu Feb 12 19:18:45 2015 +0900 +++ b/main.log Sat Feb 14 03:06:15 2015 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.14159265-p3.5-130605-2.6 (utf8.euc) (TeX Live 2014) (preloaded format=platex 2015.1.22) 12 FEB 2015 19:15 +This is e-pTeX, Version 3.14159265-p3.5-130605-2.6 (utf8.euc) (TeX Live 2014) (preloaded format=platex 2015.1.22) 13 FEB 2015 18:08 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -85,18 +85,16 @@ \float@box=\box48 \@float@everytoks=\toks18 \@floatcapt=\box49 -) (./main.aux +) +(/usr/local/texlive/2014/texmf-dist/tex/latex/comment/comment.sty +\CommentStream=\write3 + +Excluding comment 'comment') (./main.aux LaTeX Warning: Label `chap:concept' multiply defined. -LaTeX Warning: Label `list:configTree' multiply defined. - - -LaTeX Warning: Label `chap:poordirection' multiply defined. - - -LaTeX Warning: Label `chap:poordirection' multiply defined. +LaTeX Warning: Label `list:TreeNode' multiply defined. LaTeX Warning: Label `chap:poordirection' multiply defined. @@ -145,18 +143,18 @@ [1 ]) -\tf@toc=\write3 -\openout3 = `main.toc'. +\tf@toc=\write4 +\openout4 = `main.toc'. [2] (./main.lof) -\tf@lof=\write4 -\openout4 = `main.lof'. +\tf@lof=\write5 +\openout5 = `main.lof'. [3 ] (./main.lot) -\tf@lot=\write5 -\openout5 = `main.lot'. +\tf@lot=\write6 +\openout6 = `main.lot'. (./chapter1.tex [4 @@ -171,83 +169,132 @@ ] 第 2 章 -) (./chapter3.tex [2 +File: fig/destructive_tree.pdf Graphic file (type eps) +<fig/destructive_tree.pdf> [2 + +] +File: fig/destructive_tree.pdf Graphic file (type eps) + <fig/destructive_tree.pdf> +File: fig/non_destructive_merit.pdf Graphic file (type eps) + +<fig/non_destructive_merit.pdf>) (./chapter3.tex [3 ] 第 3 章 -[3 - -] -File: fig/sax.pdf Graphic file (type eps) - <fig/sax.pdf> [4 +File: fig/refMatrixData.pdf Graphic file (type eps) +<fig/refMatrixData.pdf> [4 ] -LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <14.4> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 73. -LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <14.4> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 73. -File: fig/maTrix1.pdf Graphic file (type eps) - <fig/maTrix1.pdf> [5] -File: fig/maTrix2.pdf Graphic file (type eps) - <fig/maTrix2.pdf> File: fig/maTrixVersion1.pdf Graphic file (type eps) - -<fig/maTrixVersion1.pdf> + <fig/maTrixVersion1.pdf> File: fig/maTrixVersion2.pdf Graphic file (type eps) <fig/maTrixVersion2.pdf> +[5] [6] +Overfull \hbox (77.18156pt too wide) in paragraph at lines 87--103 + [] + [] + +[7 + +] +File: fig/maTrix1.pdf Graphic file (type eps) + <fig/maTrix1.pdf> +File: fig/maTrix2.pdf Graphic file (type eps) + <fig/maTrix2.pdf> [8 + +] [9] +File: fig/XACML.pdf Graphic file (type eps) + <fig/XACML.pdf> LaTeX Warning: `h' float specifier changed to `ht'. -[6] [7] [8] -Overfull \hbox (77.18156pt too wide) in paragraph at lines 180--196 +[10 + +] +Overfull \hbox (63.36844pt too wide) in paragraph at lines 217--224 + [] + [] + +) (./chapter4.tex [11] +第 4 章 +File: fig/refJungleData.pdf Graphic file (type eps) +<fig/refJungleData.pdf> +Overfull \hbox (6.48091pt too wide) in paragraph at lines 15--16 [] [] File: fig/JungleXmlTree.pdf Graphic file (type eps) <fig/JungleXmlTree.pdf> -Overfull \hbox (57.9047pt too wide) in paragraph at lines 208--209 +Overfull \hbox (57.9047pt too wide) in paragraph at lines 23--24 [] [] -LaTeX Warning: Float too large for page by 32.83331pt on input line 212. +LaTeX Warning: Float too large for page by 32.83331pt on input line 27. LaTeX Warning: `h' float specifier changed to `ht'. -[9 +[12 -] [10] +] [13] File: fig/configTree.pdf Graphic file (type eps) <fig/configTree.pdf> File: fig/configModel.pdf Graphic file (type eps) <fig/configModel.pdf> -Overfull \hbox (207.70473pt too wide) in paragraph at lines 256--257 +Overfull \hbox (207.70473pt too wide) in paragraph at lines 73--74 [] [] LaTeX Warning: `h' float specifier changed to `ht'. -[11 +[14 -] [12] -File: fig/XACML.pdf Graphic file (type eps) - <fig/XACML.pdf> - -LaTeX Warning: `h' float specifier changed to `ht'. - -[13 +] [15] [16 ] -Overfull \hbox (63.36844pt too wide) in paragraph at lines 319--326 - [] +File: fig/DepthFirstSearch.pdf Graphic file (type eps) + <fig/DepthFirstSearch.pdf> +Overfull \hbox (20.61299pt too wide) in paragraph at lines 148--149 +[]\JY1/mc/m/n/12 検索 \OT1/cmr/m/n/12 API \JY1/mc/m/n/12 は 、 他に特定の \OT1/ +cmr/m/n/12 Node \JY1/mc/m/n/12 以下に対して検索を行う \OT1/cmr/m/n/12 find-In-S +ub-Tree(Query,node,key,value) + [] + +File: fig/FindInSubTree.pdf Graphic file (type eps) +<fig/FindInSubTree.pdf> [17] [18] +File: fig/JungleIndes.pdf Graphic file (type eps) + <fig/JungleIndes.pdf> +Overfull \hbox (2.35786pt too wide) in paragraph at lines 187--193 +\JY1/mc/m/n/12 を 、 \OT1/cmr/m/n/12 TreeMap$\OML/cmm/m/it/12 <$\OT1/cmr/m/n/12 + String key, TreeMap$\OML/cmm/m/it/12 <$ \OT1/cmr/m/n/12 String value , List$\O +ML/cmm/m/it/12 <$\OT1/cmr/m/n/12 Pair$\OML/cmm/m/it/12 <$\OT1/cmr/m/n/12 TreeNo +de,NodePath$\OML/cmm/m/it/12 >>>>$ [] -[14] [15 + +Overfull \hbox (14.87259pt too wide) in paragraph at lines 194--197 +[]\JY1/mc/m/n/12 最初の \OT1/cmr/m/n/12 TreeMap$\OML/cmm/m/it/12 <$\OT1/cmr/m/n +/12 String key,TreeMap$\OML/cmm/m/it/12 >$ \JY1/mc/m/n/12 は \OT1/cmr/m/n/12 In +-dex \JY1/mc/m/n/12 を格納する \OT1/cmr/m/n/12 TreeMap \JY1/mc/m/n/12 である 。 + この \OT1/cmr/m/n/12 TreeMap + [] + +[19 ] -Overfull \hbox (7.40611pt too wide) in paragraph at lines 386--387 +File: fig/ParentIndex.pdf Graphic file (type eps) + <fig/ParentIndex.pdf> [20] +Overfull \hbox (89.63118pt too wide) in paragraph at lines 270--270 +[] \OT1/cmtt/m/n/12 JungleTree oldTree = new DefaultJungleTree(oldTc, oldTreeU +uid, writer, treeEditor);[] + [] + +[21 + +] +Overfull \hbox (7.40611pt too wide) in paragraph at lines 310--311 []\OT1/cmr/m/n/12 XAMLInterpreter \JY1/mc/m/n/12 で \OT1/cmr/m/n/12 Han-dler \J Y1/mc/m/n/12 が使用しているイベントは 、 \OT1/cmr/m/n/12 XML-Reader \JY1/mc/m/n /12 と同じで 、 \OT1/cmr/m/n/12 startEle- @@ -258,31 +305,21 @@ LaTeX Warning: `h' float specifier changed to `ht'. -[16] [17]) (./chapter4.tex [18 - -] -第 4 章 -) (./chapter5.tex [19 - -] +) (./chapter7.tex [22] [23] 第 5 章 -) (./chapter6.tex [20 +) (./chapter8.tex [24 ] 第 6 章 -) (./chapter7.tex [21 - -] -第 7 章 -) (./chapter8.tex [22 +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <14.4> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 5. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <14.4> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 5. +) (./bibliography.tex [25 -] -第 8 章 -) (./bibliography.tex [23 +]) (./thanks.tex [26 -]) (./thanks.tex [24 - -]) [25 +]) [27 ] (./main.aux) @@ -290,12 +327,12 @@ ) Here is how much of TeX's memory you used: - 867 strings out of 493799 - 10603 string characters out of 6151522 - 71433 words of memory out of 5000000 - 4316 multiletter control sequences out of 15000+600000 + 920 strings out of 493799 + 11614 string characters out of 6151522 + 72450 words of memory out of 5000000 + 4364 multiletter control sequences out of 15000+600000 15978 words of font info for 63 fonts, out of 8000000 for 9000 929 hyphenation exceptions out of 8191 - 25i,7n,21p,293b,283s stack positions out of 5000i,500n,10000p,200000b,80000s + 25i,8n,21p,305b,283s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on main.dvi (31 pages, 52952 bytes). +Output written on main.dvi (33 pages, 66964 bytes).
--- a/main.lot Thu Feb 12 19:18:45 2015 +0900 +++ b/main.lot Sat Feb 14 03:06:15 2015 +0900 @@ -1,13 +1,12 @@ \addvspace {10\p@ } \addvspace {10\p@ } \addvspace {10\p@ } -\contentsline {table}{\numberline {3.1}{\ignorespaces 発生するイベント一覧}}{4} -\contentsline {table}{\numberline {3.2}{\ignorespaces Person.xmlの要素}}{9} -\contentsline {table}{\numberline {3.3}{\ignorespaces 構成情報TreeのTreeNodeが保持しているAttribute}}{11} -\contentsline {table}{\numberline {3.4}{\ignorespaces Ruleの評価}}{14} -\contentsline {table}{\numberline {3.5}{\ignorespaces XACMLのルール結合アルゴリズム}}{14} +\contentsline {table}{\numberline {3.1}{\ignorespaces Person.xmlの要素}}{7} +\contentsline {table}{\numberline {3.2}{\ignorespaces Ruleの評価}}{11} +\contentsline {table}{\numberline {3.3}{\ignorespaces XACMLのルール結合アルゴリズム}}{11} +\addvspace {10\p@ } +\contentsline {table}{\numberline {4.1}{\ignorespaces 構成情報TreeのTreeNodeが保持しているAttribute}}{14} +\contentsline {table}{\numberline {4.2}{\ignorespaces ParentIndexの返り値}}{20} +\contentsline {table}{\numberline {4.3}{\ignorespaces saxの主要なイベント一覧}}{22} \addvspace {10\p@ } \addvspace {10\p@ } -\addvspace {10\p@ } -\addvspace {10\p@ } -\addvspace {10\p@ }
--- a/main.tex Thu Feb 12 19:18:45 2015 +0900 +++ b/main.tex Sat Feb 14 03:06:15 2015 +0900 @@ -4,7 +4,7 @@ \usepackage{mythesis} \usepackage{multirow} \usepackage{here} - +\usepackage{comment} \setlength{\itemsep}{-1zh} \title{enterprise Authorization system on distributed tree structure database Jungle} @@ -51,11 +51,9 @@ \input{chapter3.tex} \input{chapter4.tex} -\input{chapter5.tex} % 他の論文との比較 %\input{chapter4.tex} -\input{chapter6.tex} \input{chapter7.tex} \input{chapter8.tex} % 参考文献
--- a/main.toc Thu Feb 12 19:18:45 2015 +0900 +++ b/main.toc Sat Feb 14 03:06:15 2015 +0900 @@ -1,39 +1,32 @@ -\contentsline {chapter}{\numberline {第1章}序論}{1} +\contentsline {chapter}{\numberline {第1章}世の中の知的構造を全て格納できるデータベース}{1} \contentsline {section}{\numberline {1.1}研究目的}{1} -\contentsline {chapter}{\numberline {第2章}Jungle}{2} +\contentsline {chapter}{\numberline {第2章}分散データベースJungle}{2} \contentsline {section}{\numberline {2.1}JungleCore}{2} -\contentsline {section}{\numberline {2.2}JungleNetwork}{2} -\contentsline {chapter}{\numberline {第3章}Jungleを使用したアプリケーション}{3} -\contentsline {section}{\numberline {3.1}BBS}{3} -\contentsline {section}{\numberline {3.2}XMLReader}{3} -\contentsline {section}{\numberline {3.3}maTrix}{5} -\contentsline {subsection}{\numberline {3.3.1}maTrixにおけるアプリケーションのアカウント管理}{5} -\contentsline {subsection}{\numberline {3.3.2}maTrixの保持するデータ構造}{6} -\contentsline {subsection}{\numberline {3.3.3}Jungle上でのmaTrixのデータ構造の表現}{9} -\contentsline {subsection}{\numberline {3.3.4}XACML}{13} -\contentsline {subsection}{\numberline {3.3.5}Jungle上でのmaTrixの許認可}{16} -\contentsline {section}{\numberline {3.4}XACMLInterpreter}{16} -\contentsline {chapter}{\numberline {第4章}Jungle上でmaTrixを構築するのに必要なAPIの設計}{19} -\contentsline {section}{\numberline {4.1}maTrixのデータ構造の表現に必要なAPI}{19} -\contentsline {section}{\numberline {4.2}Jungle上でのmaTrixの許認可に必要なAPI}{19} -\contentsline {chapter}{\numberline {第5章}Jungle上でmaTrixを構築するのに必要なAPIの実装}{20} -\contentsline {section}{\numberline {5.1}過去のTreeに対するアクセス}{20} -\contentsline {section}{\numberline {5.2}Treeに対する検索}{20} -\contentsline {section}{\numberline {5.3}Index}{20} -\contentsline {chapter}{\numberline {第6章}FunctionalJava}{21} -\contentsline {section}{\numberline {6.1}FunctionalJavaとは}{21} -\contentsline {section}{\numberline {6.2}IndexでTreeMapを使用するメリット}{21} -\contentsline {section}{\numberline {6.3}TreeMapのバグ}{21} -\contentsline {chapter}{\numberline {第7章}実装の評価}{22} -\contentsline {section}{\numberline {7.1}検索のAPIの測定}{22} -\contentsline {section}{\numberline {7.2}Indexの作成時間}{22} -\contentsline {section}{\numberline {7.3}Node数とTreeの構築時間の測定}{22} -\contentsline {section}{\numberline {7.4}transactionPerSecond}{22} -\contentsline {section}{\numberline {7.5}FunctionalJavaのTreeMapのget}{22} -\contentsline {chapter}{\numberline {第8章}結論}{23} -\contentsline {section}{\numberline {8.1}まとめ}{23} -\contentsline {section}{\numberline {8.2}今後の課題}{23} -\contentsline {subsection}{\numberline {8.2.1}push/pop}{23} -\contentsline {subsection}{\numberline {8.2.2}indexのIncrementalUpdate}{23} -\contentsline {subsection}{\numberline {8.2.3}differencialList}{23} -\contentsline {subsection}{\numberline {8.2.4}exponential backoff}{23} +\contentsline {section}{\numberline {2.2}JungleNetwork}{3} +\contentsline {chapter}{\numberline {第3章}組織の中の許認可を管理するアプリケーションmaTrix}{4} +\contentsline {section}{\numberline {3.1}保持するデータ構造}{4} +\contentsline {section}{\numberline {3.2}アカウント管理}{8} +\contentsline {section}{\numberline {3.3}申請の許認可}{9} +\contentsline {section}{\numberline {3.4}XACML}{10} +\contentsline {chapter}{\numberline {第4章}Jungle上でのmatrixの実装}{12} +\contentsline {section}{\numberline {4.1}Jungle上でのmaTrixのデータ構造の表現}{12} +\contentsline {section}{\numberline {4.2}Jungle上の許認可}{16} +\contentsline {section}{\numberline {4.3}検索APIの実装}{16} +\contentsline {section}{\numberline {4.4}Jungle上のIndexの設計}{19} +\contentsline {section}{\numberline {4.5}親Nodeを返す特殊なIndex}{20} +\contentsline {section}{\numberline {4.6}過去のTreeに対するアクセス}{21} +\contentsline {section}{\numberline {4.7}XMLReader}{22} +\contentsline {section}{\numberline {4.8}XACMLInterpreter}{22} +\contentsline {chapter}{\numberline {第5章}実装の評価}{24} +\contentsline {section}{\numberline {5.1}検索のAPIの測定}{24} +\contentsline {section}{\numberline {5.2}Indexの作成時間}{24} +\contentsline {section}{\numberline {5.3}Node数とTreeの構築時間の測定}{24} +\contentsline {section}{\numberline {5.4}transactionPerSecond}{24} +\contentsline {section}{\numberline {5.5}FunctionalJavaのTreeMapのget}{24} +\contentsline {chapter}{\numberline {第6章}結論}{25} +\contentsline {section}{\numberline {6.1}まとめ}{25} +\contentsline {section}{\numberline {6.2}今後の課題}{25} +\contentsline {subsection}{\numberline {6.2.1}push/pop}{25} +\contentsline {subsection}{\numberline {6.2.2}indexのIncrementalUpdate}{25} +\contentsline {subsection}{\numberline {6.2.3}differencialList}{25} +\contentsline {subsection}{\numberline {6.2.4}exponential backoff}{25}