3、4章突入!

3 Use Cases
3.1 Swappability
 リポジトリが交換可能ですよ
3.2 Resource Crunch (Personalization)
 JCR API経由であれば特定APIを意識/管理しなくてすむケースがでてきますよ

と軽いユースケースの紹介だけ。

4 The Repository Model
この章はキモなので、且つ、長いのであせって、はしょることはせずにしっかり書いておこうかなと。

んでもって、リポジトリモデルの仕様は以下のとおり。元の文章が長いので箇条書きで整理。

  1. コンテンツリポジトリは1つ以上のワークスペースを持つ。
  2. コンテンツリポジトリはitemをtree構造で持つ。
  3. itemとは、ノードかプロパティのどちらかになる。
  4. 各ノードには、ゼロ以上の子ノードとゼロ以上の子プロパティが持てる。
  5. 1ワークスペースあたり1つのルートのノードがあります。
  6. ルートノードは、親ノードが全くいない。
  7. 他のすべてのノードには、1つの親ノードがいる。
  8. プロパティは、1つの親ノードを持っている。
  9. プロパティは、子(ノード、プロパティ)は持てない。
  10. それらはleafと呼ばれる。
  11. リポジトリの実際の内容のすべてがプロパティの値の中に格納される。

階層のitemは絶対パス相対パスで特定できる。

  1. 絶対パスの場合、”/”はルートをさしており、絶対パスは必ず”/”ではじめること
  2. 相対パスの場合、”/”で始まっていないときに相対パスと判断される。unixスタイルも指定可能で”.”、”..”での指定も可能。

4.1 API Basics
リポジトリはRepositoryオブジェクトであらわされて呼び出し側はRepository.loginでリポジトリに接続する。
任意でワークスペース名、crudentialも指定できる。
ログイン後、呼び出し側は指定されたワークスペースにひもづいたSessionを受け取ることが可能になる。
ログイン例は以下のとおり。

// Get the Repository object
InitialContext ctx = ...
Repository repository = (Repository)ctx.lookup("myrepo");
// Get a Credentials object
Credentials credentials = new SimpleCredentials("MyName", "MyPassword".toCharArray());
// Get a Session
Session mySession = repository.login(credentials, "MyWorkspace");

取得したSessionオブジェクトのAPI経由でノード、プロパティに対しては

  1. Treeを横断的に、
  2. 指定アイテムで直接に

のいずれかのやり方でアクセスが可能になる。

4.1.1 Traversal Access
横断的アクセス!!

まずは

Node Session.getRootNode().

からはじめる。文字通りルートノードがとれる。で、

Node Node.getNode(String relPath)
Property Node.getProperty(String relPath)

でアクセスできる。引数は相対パスの指定です。

データを直接取得する場合は

String Property.getString()

で取得もできるし、タイプニュートラルにするのであればValueオブジェクトを利用して

Value Property.getValue()

で取得もOK.実際のデータの取得は

String Value.getString().

が行われる。

4.1.2 Direct Access
直接アクセス!!

Item Session.getItem(String abspath).

で取得可能で、大事なことは絶対パスで指定するということなり!

他にも

Node Session.getNodeByUUID(String uuid).

で取得できる。