[JCR入門記]4章part2
4.1.3 Writing to the Repository
リポジトリがlevel2準拠であれば書き込みが可能になる。

例はこんな感じ

// Retrieve a node
Node myNode = (Node) mySession.getItem("/a/e");
// Add a child node
Node newNode = myNode.addNode("n");
// Add a property
newNode.setProperty("x", "Hello");
// Persist the changes
mySession.save();

4.1.3.1 Removing Items
アイテム削除はこんな感じ

// Remove the node /a/e (and its subtree)
myNode.remove();
// Persist the changes
mySession.save();

当然ですが基準のノードの子ノードも消えます。無条件に。個人的には子ノードがある場合にはExceptionを投げるメソッドもあってもいいのかなぁとは思う。

プロパティに関していえば以下のnullをセットする2つのやり方でも消せる。

Node m = (Node) mySession.getItem("/m");
Property p = m.getProperty("p");
p.setValue((Value)null);
mySession.save();

or

m.setProperty("q", (Value)null);
mySession.save();

4.1.3.2 Transient Storage in the Session
Session、ノードまたはプロパティのほとんどのメソッドで行われた変更がすぐに永続的なワークスペースに反映されない。
Session.saveかItem.saveで永続化されるか、
Session.refresh(false)かItem.refresh(false))で廃棄されるかまで一時的状態(pending changes)にあります。
この状態のものは他のsessionからはみえません。

4.1.3.3 Transactions
このドキュメント中では、“persistence of changes upon save” とか “immediate persistence of changes through methods that do not require save”のどんな議論もsaveがtransactionの外での話とのこと。
トランザクション管理下ではcommitされた状態で初めて他sessionでもみれるようになるとのこと。
詳しくは8章で説明されるらしいので、ここではトランザクションサポートはJCRの仕様としては任意の機能であるということだけ覚えておくべし。

4.1.4 Nodes, Properties and Items
ここは今まで話したノード、プロパティ、アイテムの関係をクラス図にした説明が中心なので省略!

4.2 Compliance Levels
前述したように準拠レベルが2つ、任意(オプション)機能がある。
まとめると以下のとおり。
Level 1 はこんな感じ

• ノードとプロパティの縦断
• プロパティ値の読み込み
• 一時的な名前空間の再マッピング
• ノード情報のXML/SAXへのExport
• XPathでのクエリー機構
• 有効ノードの発見
• アクセス制御許可の発見

Level 2 は更に下記を追加

• ノードとプロパティの追加、削除
• プロパティ値の書き込み
・名前空間の変更
• XML/SAXからのimport
• ノードへのノードタイプの割付

任意機能:

トランザクション
• バージョニング
• イベント監視
• ロック
• SQLでのクエリー機能