metacatui についての覚書

Metacat 2.3.0 で metacatui を動作させようと試行錯誤したが、 総ての機能を動作させるのは無理だった。 その時の状況を、備忘のために書いておく。

metacatui とは?

Metacat の次世代ユーザインタフェイスとして開発中の UI システム。

Backbone.js フレームワークを使用して Ajax 的に動作する。

動作状況一覧

操作内容 動作
ログイン
アカウントの新規作成
アカウント一覧取得
パスワード変更
パスワード初期化
データ登録
データ検索 不良

作業手順

  • webapps/metacat/style/common/templates/metacatui/loginForm.tmpl の organization ドロップダウンメニューに myorg を追加する。

    --- loginForm.tmpl.orig 2014-02-14 15:05:34.000000000 +0900
    +++ loginForm.tmpl      2014-02-14 15:05:55.000000000 +0900
    @@ -20,6 +20,7 @@
            <div class="span4 text-left">Organization</div>
            <div class="span8 text-left"><select name="organization">
                <option value="" selected>&#8212; choose one &#8212;</option>
    +           <option value="myorg">myorg</option>
                <option value="NCEAS">NCEAS</option>
                <option value="LTER">LTER</option>
                <option value="KU">KU</option>
    
  • Metacat のデフォルトスキンを metacatui に変更する。 http://hostname/metacat/admin からスキン設定を修正するか、 webapps/metacat/WEB-INF/metacat.properties を直接修正する。 直接編集の場合は下記を参照。

    application.default-style=metacatui
    
  • webapps/metacat/cgi-bin/ldapweb.cgi 用の設定を施す。 Metacat 2.3.0 セットアップ手順 (付属機能) を参照のこと。

    ただし、email 関係のプロパティは webapps/metacat/style/skins/metacatui/metacatui.properties の方が 参照されるので、こちらのファイルを修正する。 email.overrideURL プロパティは空にする。

    email.overrideURL=
    
  • webapps/metacat/cgi-bin/registry_dataset.cgi の文法ミスを修正する。

    Perl の仕様変更により時代遅れになった表記法が残っていて、ログに 警告メッセージが出力される。 Perl 5.16.3 ではまだ警告だけで動作は正常のようだが、 Perl のバージョンが変わると動かなくなるかも知れないから 直しておく方がいいだろう。

    --- register-dataset.cgi.orig   2014-02-14 14:11:48.000000000 +0900
    +++ register-dataset.cgi    2014-02-14 14:11:58.000000000 +0900
    @@ -166,8 +166,8 @@
     # override email properties with skin-based ones
     my @emailData = keys(%$email);
     foreach my $d (@emailData) {
    -    if ( %$skinEmail->{$d} ) {
    -      $email->{$d} = %$skinEmail->{$d};
    +    if ( $skinEmail->{$d} ) {
    +      $email->{$d} = $skinEmail->{$d};
         }
     }
    
  • metacatui.war を Tomcat の webapps ディレクトリにデプロイする。

  • webapps/metacatui/js/views/RegistryView.js に DN の dc 部分が ハードコードされているので、修正する。

    --- RegistryView.js.orig    2014-02-14 14:13:25.000000000 +0900
    +++ RegistryView.js 2014-02-14 14:13:41.000000000 +0900
    @@ -197,7 +197,7 @@
    
                        formObj.username.value = "uid=" + formObj.elements["uid"].value + ",o="
                                        + formObj.elements["organization"].value
    -                                   + ",dc=ecoinformatics,dc=org";
    +                                   + ",dc=mydomain,dc=tld";
    
                        // get the form data before replacing everything with the progressbar!
                        var formData = $("#loginForm").serialize();
    
  • Apache に /metacatui/ を Tomcat にリバースプロキシさせるように 設定する。

    ProxyPass /metacatui ajp://localhost:8009/metacatui
    ProxyPassReverse /metacatui ajp://localhost:8009/metacatui
    
  • 再起動。

    # service tomcat6 restart
    # service apache24 reload
    

確認

http://hostname/metacat/ にアクセスすると自動的に http://hostname/metacatui/ にリダイレクトし、metacatui の トップページが表示されることを確認する。

データ検索機能の動作不良について

metacatui 上からキーワード検索しても、何も表示されない。

原因は、 Tomcat の logs/stdout.log を見ると判る。

original requestURI: /metacat/d1/mn/v1/query/solr/fl=id,title,(中略)
註  d1 = DataONE
    mn = Menber Node    の略

metacat 20140213-17:19:05: [ERROR]: D1ResourceHandler: Serializing exception with code 500: /var/metacat/solr-home/solr.xml (No such file or directory) [edu.ucsb.nceas.metacat.restservice.D1ResourceHandler]
註 /var/metacat/solr-home/solr.xml は metacat-index モジュールが作成する

リクエストURL から明らかなように、metacatui は、Metacat 本来の 検索 API ではなく、後から追加された DataONE 用の検索 API を 叩こうとする。その API は metacat-index モジュールの SoLR 機能を 利用しようとするので、 metacat-index.war を Tomcat にデプロイして 再度 Tomcat のログを見ると、

metacat-index 20140214-14:40:40: [ERROR]: Problem loading configuration: jar:file:/usr/local/apache-tomcat-6.0/webapps/metacat-index/WEB-INF/lib/d1_cn_index_processor-1.2.0.jar!/org/dataone/configuration/config.xml [org.dataone.configuration.Settings]
org.apache.commons.configuration.ConfigurationException: org.apache.commons.configuration.ConfigurationRuntimeException: org.apache.commons.configuration.ConfigurationException: Cannot locate configuration source file:///etc/dataone/node.properties

というエラーが出て、 metacat-index の起動に失敗する。 このエラーメッセージから、 metacat-index が DataONE ネットワーク前提の 機能であり、DataONE から独立に動作させることは無理のような感じを受ける。

最近の Metacat にとって、DataONE 機能はオプションではなくて 前提の環境になっているようだ。 metacatui は使いやすそうなインタフェイスをしているので、 DataONE とは独立に動作させられると嬉しいのだが。

データ登録機能の仕様

metacatui の “Upload your data” ページからデータを登録する場合、 docid は以下のように決定される。

  • prefix は metacat/style/skins/metacatui/metacatui.properties の registry.config.scope プロパティが使用される。

    すなわち、どのアカウントからであろうと、metacatui から登録される データの docid の prefix はすべて同一になる。

    ちなみにデフォルトは

    registry.config.scope=knb
    
  • パッケージ番号は、Metacat サーバに getLastId を発行して使用中の最大値を 取得し、それに +1 した値を使用する。つまり 1 から順に連番になる。