カテゴリー別アーカイブ: CMS

Apache Slingを動かしてみた2

Apache SlingのDiscover Sling in 15 minutes – the Sling Launchpad 前回の Apache Slingを動かしてみたの続き

Render your content using server-side javascript (ESP)

前回用意したcurlで次のコマンドを実行する。

curl -X MKCOL -u admin:admin http://localhost:8080/apps/foo
curl -X MKCOL -u admin:admin http://localhost:8080/apps/foo/bar
  • -X MKCOL でコレクションの作成。 Jackrabbitで言うノード、Windowsで言うフォルダの作成みたいなもの。 appsの下にfooを作って、さらにその下にbarというコレクションを作っている。
  • -u でユーザー名:パスワード を指定

カレントディレクトリ(C:\work)にhtml.esp という名前で次の内容のファイルを作成しておく。

<html>
  <body>
    <h1><%= currentNode.title %></h1>
  </body>
</html>

.espは Embedded Server Pages というもので、 HTMLに埋め込まれたスクリプトがサーバーサイドで処理されてクライアントに送られる。(Server Pages)

ファイルを作成したら次のコマンドでapps/foo/bar以下にアップロードする。

curl -u admin:admin -T html.esp http://localhost:8080/apps/foo/bar/html.esp

以下のURLにアクセスすると http://localhost:8080/content/mynode.html some title と表示される。

ちなみにhtml.espをアップロードするまえにhttp://localhost:8080/content/mynode.html へアクセスするとダンプ画面。

Resource Propertiesのtitle:”some title”がheader.espで処理されて表示されるのだね。titleは特に指定はしていないのでデフォルトでこの値になるのだろう。

Additional examples

Let Sling generate the path of a newly created node. 次の例はblogノードを作って、タイトルをつけている。

curl -X POST -u admin:admin "http://localhost:8080/content/blog"
curl -D - -u admin:admin -F"title=Adventures with Sling" "http://localhost:8080/content/blog/"

新しいノードを追加すると勝手にユニークな名前をつけてくれる。 curlの-Dオプションで以下のようなheaderもdumpも出力される。

HTTP/1.1 100 Continue

HTTP/1.1 201 Created
Location: /blog/adventures_with_slin
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Server: Jetty(6.1.x)

Locationにあるとおり、adventures_with_slinという20文字の名前がついている。 http://localhost:8080/blog/adventures_with_slin.html

Add a page header with sling.include

あとは同じ要領でespとcurlを駆使してノードを追加したりファイルをアップロードしたりしている。 こうしてパーツを組み合わせていけば、ページのデザインが出来ていく。 それに上の新しいノード追加の例を組み合わせれば、簡易的なブログサービスが出来上がってしまう。 詳しくは

46 Line Blogを参照。 コンテンツを出し入れする仕組みはほぼ整っているので、入れ物(コンテンツリポジトリ)を決めるのととViewに専念すればよい。

Apache Slingを動かしてみた

http://sling.apache.org/

"Apache Sling"

Apache Slingはコンテンツの保存先としてJavaコンテンツリポジトリ(JCR)を利用とするWebフレームワーク。Slingを利用することで、コンテンツを管理・アップデートできるRESTful APIを提供する。アプリケーションコンポーネントをOSGiバンドルやスクリプト、テンプレートといった形でコンテンツリポジトリ内に格納でき、OSGiのメリットを利用できるのも特徴となる。2009年6月、ASFのトップレベルプロジェクトに昇格している。 ASFがWebフレームワーク「Apache Sling 6」を公開、22ヶ月ぶりのリリース

Discover Sling in 15 minutes

Discover Sling in 15 minutes の手順に従って、早速このApache Slingを動かしてみた。環境はWindows7(32bit)

Start the Launchpad

org.apache.sling.launchpad-6-standalone.jarC:\work 以下にダウンロード。

java -jar org.apache.sling.launchpad-6-standalone.jar

を実行してみると

14.10.2012 23:52:22.102 *ERROR* [main] Failed to Star
t OSGi framework org.osgi.framework.BundleException: Uncaught Instantiation Issu
e: java.lang.ArrayIndexOutOfBoundsException: -1

いきなりエラー。

Apache Sling – exception when starting

Javaのバージョンが1.7なのがいけないらしい。1.6で実行してみたら動いた。

C:\work>"C:\Program Files\Java\jdk1.6.0_35\bin\java.exe" -jar org.apache.
sling.launchpad-6-standalone.jar
14.10.2012 23:55:59.220 *INFO* [main] Setting sling.home=sling (default)
14.10.2012 23:55:59.234 *INFO* [main] Starting Sling in sling (C:\work\sling
)
14.10.2012 23:55:59.289 *INFO* [main] Renaming current launcher jar org.apac
he.sling.launchpad.base.jar.1350226341674 to org.apache.sling.launchpad.base.jar
14.10.2012 23:55:59.450 *INFO* [main] Checking launcher JAR in folder sling
14.10.2012 23:55:59.584 *INFO* [main] Existing launcher is up to date, using
it: 2.3.0 (org.apache.sling.launchpad.base.jar)
14.10.2012 23:55:59.592 *INFO* [main] Loading launcher class org.apache.slin
g.launchpad.base.app.MainDelegate from org.apache.sling.launchpad.base.jar
14.10.2012 23:55:59.648 *INFO* [main] Starting launcher ...
14.10.2012 23:55:59.664 *INFO* [main] HTTP server port: 8080
14.10.2012 23:56:07.375 *INFO* [main] Startup completed

実行したフォルダ以下に、C:\work\sling というフォルダが出来ているので中を覗いてみると

  • C:\work\sling\felix
  • C:\work\sling\jackrabbit

というフォルダがある。実はこれはそれぞれ以下のものに対応している。

Apache Felix

OSGi(Open Services Gateway initiative)仕様を実装したフレームワーク。OSGiは、Javaモジュールの実行や設定管理を行うフレームワーク。

Apache Jackrabbit

Java用コンテンツリポジトリ。JCR(JSR 170 および 283)に完全準拠している。

CRXArchitecture http://www.slideshare.net/paolomoz/jcr-and-sling-quick-dive

ベースにはコンテンツリポジトリのJackrabbitがいて、felixにより管理している。 ユーザーはSlingによりRESTful APIを通じてこれらを操作することができるものということらしい。

Create some content

次の手順を実行するためにcurlを用意しておく

http://curl.haxx.se/ 今回はWindows7環境なので、以下からcurlを入手した。ちょっと試すだけなのでSSL無しのバージョンでOK

http://www.paehl.com/open_source/?CURL_7.28.0 ダウンロードしてzipを展開し、curl.exeをC:\work直下へ置いた。ここで作業することにする。

http://localhost:8080/content/mynode.html へいきなりアクセスしてみると、当然コンテンツはないので No Resource Found(404)となる。

ここでコンテンツを作るcurlコマンドを実行してみる。

curl -u admin:admin -F"sling:resourceType=foo/bar" -F"title=some title" http://localhost:8080/content/mynode

実行するとHTMLがコンソールに出力される。

http://localhost:8080/content/mynode.html へアクセスすると今度はHtmlRedererServletがリソースをダンプして返す。

リソースのパス、メタデータ、タイプ、スーパータイプおよびリソースのプロパティが表示される。 リソースのプロパティはJSON形式で取得できる。 http://localhost:8080/content/mynode.json にアクセスするか、以下のcurlコマンドを実行する。

curl http://localhost:8080/content/mynode.json


$ curl http://localhost:8080/content/mynode.json
{"title":"some title","sling:resourceType":"foo/bar","jcr:primaryType":"nt:unstructured"}

ところでトップ(http://localhost:8080/)の「browse the resource tree by clicking here」から Sling Explorerというものが使える。

contentの下にmynodeがあることがわかる。 次回へ続く