Wednesday, October 31, 2012

AlfrescoとSolr

こんにちは。

今更ながらSolr関連の記事を書きます。
Alfresco 4.0からSolrに対応されました。

本稿では、概要やインストール等の基本事項について書きます。


概要

[Alfresco]
本ブログの読者なら当然ご存じの通り、Alfresco社が開発しているECMソフトウェアです。サブスクリプションを購入するEnterprise版と無償のCommunity版があります。RedHatとFedoraの関係を考えてもらえば分かりやすいかと思います。

Explorer(旧称DM)とShareの2つのUIがあり、現在はShare UIをメインとして開発が進められています。ShareはSpring SurfとYUIを使った今風のインターフェースになっています。

[Solr]
全文検索エンジンのLuceneを検索エンジンとして使う検索プラットフォームです。詳細はこちらをご覧ください。


AlfrescoでSolrを使うメリット・デメリット

[メリット]

  • Alfrescoのクラスタリングを行う場合、検索インデクスのレプリケーションが不要になる。
  • Alfrescoから見て外にあるSolrへHTTPベースの問い合わせを行うだけで検索が済むため、検索部分の冗長化が楽(HTTPサーバの冗長化と同じノリでできそう)


[デメリット]

  • AVMを使用するWCMでは使えない
  • RMモジュールを使えない
  • マルチテナントを使えない
  • トランザクション内でのインデクシング非対応なので、一貫性を重視する場面では使えない (e.g. WebScript内でコンテンツをアップロード後、同一WebScript内で検索を行う場合)


Solrの利用パターン

SolrとAlfrescoをどのように配置するかを考えてみます。

[パターン1: 同居]
AlfrescoとSolrが同じTomcatインスタンス上のWebアプリケーションとして存在するパターンです。Tomcatの起動・停止時に予期せぬエラーが発生したりしそうなのでできるだけやりたくないなというのが個人的な意見です。Alfresco Solr PluginはAlfrescoへ変更情報等を問い合せて定期的に検索インデクスを更新します。

[パターン2: 別居]
AlfrescoとSolrが異なるTomcatインスタンス上に存在するパターンです。こちらも当然Alfresco Solr Pluginが定期的にインデクスの更新作業を行います。

とりあえず別居推奨です。


インストール・設定

少々手抜きですが、過去のものをご覧ください...

[Alfrescoのインストール]
弊社が過去に実施した勉強会資料をご覧ください。

[SolrおよびAlfresco Solr Pluginのインストール]
Alfrescoと同様、過去の勉強会資料をご覧ください。


動作確認

Alfrescoが載っているTomcatのlog4j.propertiesへ次のものを追記します。

log4j.logger.org.alfresco.repo.search.impl.solr.SolrQueryHTTPClient=debug

その後、Alfrescoを起動します。すると次の様なエラーが発生すると思います。

2012-10-24 15:39:48,522  ERROR [ui.common.Utils] [http-8080-4] システムエラーが発生したため、検索できませんでした: 09240004  org.alfresco.repo.search.impl.lucene.LuceneQueryParserException: 09240004 at org.alfresco.repo.search.impl.solr.SolrQueryHTTPClient.executeQuery(SolrQueryHTTPClient.java:364)at org.alfresco.repo.search.impl.solr.SolrQueryLanguage.executeQuery(SolrQueryLanguage.java:49)at org.alfresco.repo.search.impl.solr.SolrSearchService.query(SolrSearchService.java:348)at org.alfresco.repo.search.SearcherComponent.query(SearcherComponent.java:78)(中略)at java.lang.Thread.run(Thread.java:680)Caused by: java.net.ConnectException: Connection refusedat java.net.PlainSocketImpl.socketConnect(Native Method)at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)(後略)

エラーが出れば、AlfrescoがSolrへ接続しようとしていることでOKです。


次にSolrを起動します。その後Alfrescoを再起動し、ログイン後に検索を実行します。
すると次の様なログが出力されます。


2012-10-24 15:45:54,157  DEBUG [impl.solr.SolrQueryHTTPClient] [http-8080-3] Sent :/solr/alfresco/alfresco?q=%28%28+TYPE%3A%22%7Bhttp%3A%2F%2Fwww.alfresco.org%2Fmodel%2Fcontent%2F1.0%7Dcontent%22++AND+%28%40%5C%7Bhttp%5C%3A%2F%2Fwww.alfresco.org%2Fmodel%2Fcontent%2F1.0%5C%7Dname%3A%22simple%22++TEXT%3A%22simple%22%29%29+%28+TYPE%3A%22%7Bhttp%3A%2F%2Fwww.alfresco.org%2Fmodel%2Fcontent%2F1.0%7Dfolder%22++AND+%28%40%5C%7Bhttp%5C%3A%2F%2Fwww.alfresco.org%2Fmodel%2Fcontent%2F1.0%5C%7Dname%3A%22simple%22+%29%29%29+AND+NOT+ASPECT%3A%22sys%3Ahidden%22+&wt=json&fl=*%2Cscore&rows=500&df=TEXT&start=0&locale=ja_JP&fq=%7B%21afts%7DAUTHORITY_FILTER_FROM_JSON&fq=%7B%21afts%7DTENANT_FILTER_FROM_JSON 2012-10-24 15:45:54,157  DEBUG [impl.solr.SolrQueryHTTPClient] [http-8080-3]    with: {"textAttributes":[],"allAttributes":[],"templates":[],"authorities":["GROUP_ALFRESCO_ADMINISTRATORS","GROUP_EMAIL_CONTRIBUTORS","GROUP_EVERYONE","GROUP_site_admins","GROUP_site_admins_SiteManager","GROUP_site_swsdp","GROUP_site_swsdp_SiteManager","ROLE_ADMINISTRATOR","ROLE_AUTHENTICATED","admin"],"tenants":[""],"query":"(( TYPE:\"{http://www.alfresco.org/model/content/1.0}content\"  AND (@\\{http\\://www.alfresco.org/model/content/1.0\\}name:\"simple\"  TEXT:\"simple\")) ( TYPE:\"{http://www.alfresco.org/model/content/1.0}folder\"  AND (@\\{http\\://www.alfresco.org/model/content/1.0\\}name:\"simple\" ))) AND NOT ASPECT:\"sys:hidden\" ","locales":["ja_JP"],"defaultNamespace":"http://www.alfresco.org/model/content/1.0","defaultFTSFieldOperator":"OR","defaultFTSOperator":"OR"} 2012-10-24 15:45:54,157  DEBUG [impl.solr.SolrQueryHTTPClient] [http-8080-3] Got: 6 in 904 ms

おめでとうございます。AlfrescoからSolrへ問い合わせがされたことを確認できました。


今回はここまでになります。この続きは、次回Alfresco勉強会でお話したいと思います。お楽しみに。

@mryoshio

Wednesday, October 24, 2012

Alfrescoのファイルサーバ機能TIPS(CIFSとかFTPとか) その2

こんにちは!大谷です。

今回は、以前の記事「Alfrescoのファイルサーバ機能TIPS(CIFSとかFTPとか) その1」に続き、CIFSやFTP等のファイルサーバ機能についてのお話をしようと思います。前回はファイルサーバ機能の概要と、アクセス方法、アクセス出来ない場合の確認事項について説明しましたが、今回は、ファイルサーバ機能のコンフィギュレーションについていくつかの例を挙げてその方法を説明したいと思います。
なお、本記事は基本的にWindowsを念頭に置いた内容になっているので、LinuxやMax OSをお使いの方は注意してください(まあ基本的なところはOSに依存しないとは思いますが…)。


どこらへんをいじればいいの?


まず、ファイルサーバ機能の設定に関連するファイルを挙げてみます。どのファイルを参考にしてどのファイルをいじればいいのかという目星をつけましょう。
  • <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers-context.xml
    • ファイルサーバ機能を提供しているFileServersサブシステムの定義ファイル
    • 一部の設定がパラメータ化されており、*.propertiesファイルで設定できるようになっている。
  • <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers.properties
    • 上記定義ファイルのパラメータの値を設定するファイル
  • <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/repositry.properties
    • ファイルサーバ機能関係の一部のパラメータはこちらのファイルで設定されている
  • <tomcat_dir>/shared/classes/alfresco-global.properties 
    • 上記パラメータを変更する場合に設定を記述するファイル
    • 変更したいパラメータとその値をこのファイルに追記することで、file-servers.propertiesやrepository.propertiesにおける設定内容がこのファイルの設定内容で上書きされ、パラメータ値を変更することができる

というわけで、単純な設定変更であれば、file-servers-context.xmlやfile-servers.propertiesを見て変更すべきパラメータを確認し、alfresco-global.propertiesでそのパラメータの値を設定するだけでOKです。
設定項目の詳細については、Alfresco Helpの「Configuring file servers」alfrescowikiの「File Server Subsystem 4.0」あたりが参考になりますので必要に応じて参照してください(両方とも英語ですすいません…)。

では、実際にいくつかの例を見てみましょう。


例1. CIFSアクセス時のサーバ名を変更したい


前回説明したとおり、CIFSでAlfrescoにアクセスする場合は、サーバ名(正確にはNetBIOS名)としてマシン名+Aという名前を利用します(例えばマシン名がferganaの場合は、\\ferganaAにアクセスする必要があります)。この名前はfile-servers.propertiesで以下のように設定されています。
cifs.serverName=${localname}A
これを変更するために、例えば以下のような設定をalfresco-global.propertiesに追記し、オーバーライドします。
cifs.serverName=TestFileServer
設定が終わったらAlfrescoを再起動し、エクスプローラで\\TestFileServer\Alfresco等にアクセスできることを確認します。なお、デフォルトの設定で使われている${localname}というトークンは、PCのホスト名で置換される特別なトークンです。


例2. Alfrescoフォルダのマップ先を変更したい


デフォルトの設定では、CIFSやFTPでアクセスするとAlfrescoフォルダとAVMフォルダの2フォルダが存在します。さらに、Alfrescoフォルダを開くと、手動インストールだとAlfrescoのCompany_Home以下が、自動インストールだとCompany_Home/Sites以下が表示されます。
このAlfrescoフォルダのマップ先を特定のフォルダに設定するためには、filesystem.rootPathというプロパティをalfresco-global.propertiesでオーバーライドする必要があります。例えば、Alfrescoにログインしてルートフォルダ直下にtestフォルダを作成していくつかファイルをアップロードしておき、alfresco-global.propertiesに以下の行を追加します。
filesystem.rootPath=/app:company_home/cm:test
設定が終わったらAlfrescoを再起動してCIFSやFTPでAlfrescoフォルダにアクセスし、以下のようにAlfrescoフォルダのマップ先が変更されることを確認します。


例3. AVMフォルダを表示したくない、もしくは別のフォルダを追加したい


先ほど話した通り、デフォルトではAlfrescoフォルダとAVMフォルダが存在します。このうちAVMフォルダはWebコンテンツ管理に関連するものなので、表示する必要がないかもしれません。そんな場合は以下の手順でAVMフォルダの設定を抜くことができます。

1. <tomcat_dir>/shared/classes/alfresco/extension以下に、ディレクトリsubsystems/fileServers/default/defaultを作成します。

2. <tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/fileServers/default/file-servers-context.xmlを、custom-file-servers-context.xmlという名前で1.で作成したディレクトリにコピーします。

3. custom-file-servers-context.xmlをテキストエディタで開き、filesystemContextsビーン以外の設定を削除し、さらにAVMフォルダの設定も削除します(Alfresco 4.0.dだと以下のようになります)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
   <bean id="filesystemContexts" class="org.springframework.beans.factory.config.ListFactoryBean">
      <property name="sourceList">
         <list>
            <!-- Alfresco repository access shared filesystem -->
            <bean class="org.alfresco.filesys.repo.ContentContext">
               <property name="sysAdminParams">
                  <ref bean="sysAdminParams" />
               </property>
               <property name="deviceName">
                  <value>${filesystem.name}</value>
               </property>
               <property name="storeName">
                  <value>${protocols.storeName}</value>
               </property>
               <property name="rootPath">
                  <value>${filesystem.rootPath}</value>
               </property>
               <property name="renameShufflePattern">
                  <value>${filesystem.renameShufflePattern}</value>
               </property>
               
               <!-- Mark locked files as offline -->
               <property name="offlineFiles">
                  <value>true</value>
               </property>
               
               <!-- Enable the quota manager -->
               <property name="quotaManager">
                  <ref bean="filesystemQuotaManager" />
               </property>
               
               <!--  Enables and disables pseudo files - cifs DesktopActions and URL shortcuts. -->
               <property name="pseudoFilesEnabled">
                  <value>${cifs.pseudoFiles.enabled}</value>
               </property>
               
               <!-- Add a pseudo links back to the alfresco explorer -->
               <property name="alfrescoURLEnabled">
                  <value>${cifs.pseudoFiles.explorerURL.enabled}</value>
               </property>
               <property name="URLFileName">
                  <value>${cifs.pseudoFiles.explorerURL.fileName}</value>
               </property>
               
               <!-- Add a pseudo links back to the alfresco share -->
               <property name="shareURLEnabled">
                  <value>${cifs.pseudoFiles.shareURL.enabled}</value>
               </property>
               <property name="shareURLFileName">
                  <value>${cifs.pseudoFiles.shareURL.fileName}</value>
               </property>
               
               <!-- Desktop actions -->
               <!-- Uses a client-side application to trigger a server-side action                         -->
               <!--   Echo - displays a message echoed from the server                                     -->
               <!--   URL  - launches a URL via the Windows shell                                          -->
               <!--   CmdLine - launches the Notepad application                                           -->
               <!--   CheckInOut - checks files in/out, drag and drop files onto the application           -->
               <!--   JavaScript - run a server-side script                                                -->
               <!--   JavaScriptURL - server-side script that generates a URL to the folder using a ticket -->
               <!--                   to avoid having to logon                                             -->
               <property name="globalDesktopActionConfig">
                  <bean class="org.alfresco.filesys.config.GlobalDesktopActionConfigBean">
                     <property name="path">
                        <value>alfresco/desktop/Alfresco.exe</value>
                     </property>
                  </bean>
               </property>
               <property name="desktopActionList">
                  <list>
                     <bean class="org.alfresco.filesys.repo.desk.CheckInOutDesktopAction">
                        <property name="name">
                           <value>CheckInOut</value>
                        </property>
                        <property name="filename">
                           <value>__CheckInOut.exe</value>
                        </property>
                     </bean>
                     <bean class="org.alfresco.filesys.repo.desk.JavaScriptDesktopAction">
                        <property name="name">
                           <value>JavaScriptURL</value>
                        </property>
                        <property name="filename">
                           <value>__ShowDetails.exe</value>
                        </property>
                        <property name="scriptName">
                           <value>alfresco/desktop/showDetails.js</value>
                        </property>
                        <property name="attributeList">
                           <value>anyFiles</value>
                        </property>
                        <property name="preprocess">
                           <value>copyToTarget</value>
                        </property>
                     </bean>
                     <!-- Other desktop actions which may be enabled -->
                     <!--
                        <bean class="org.alfresco.filesys.repo.desk.EchoDesktopAction"> <property name="name">
                        <value>Echo</value> </property> <property name="filename"> <value>__AlfrescoEcho.exe</value>
                        </property> </bean> <bean class="org.alfresco.filesys.repo.desk.URLDesktopAction"> <property
                        name="name"> <value>URL</value> </property> <property name="filename">
                        <value>__AlfrescoURL.exe</value> </property> </bean> <bean
                        class="org.alfresco.filesys.repo.desk.CmdLineDesktopAction"> <property name="name">
                        <value>CmdLine</value> </property> <property name="filename"> <value>__AlfrescoCmd.exe</value>
                        </property> </bean> <bean class="org.alfresco.filesys.repo.desk.JavaScriptDesktopAction">
                        <property name="name"> <value>JavaScript</value> </property> <property name="filename">
                        <value>__AlfrescoScript.exe</value> </property> <property name="scriptName">
                        <value>alfresco/desktop/dumpRequest.js</value> </property> <property name="attributeList">
                        <value>anyFiles, multiplePaths, allowNoParams</value> </property> <property name="preprocess">
                        <value>confirm, copyToTarget</value> </property> </bean>
                     -->
                  </list>
               </property>
               <!-- Additional access control of the filesystem -->
               <!-- Access type of 'none' will stop the filesystem from showing up for that user/address/protocol -->
               <!--
                  <property name="accessControl"> <bean class="org.alfresco.filesys.config.acl.AccessControlListBean">
                  <property name="defaultAccessLevel"> <value>Write</value> </property> </bean> </property>
               -->
            </bean>
         </list>
      </property>
   </bean>
</beans>

4. Alfrescoを再起動し、ftp://<サーバIP>にアクセスします。以下のように、AVMフォルダが表示されなくなっていることを確認します。

上記の手順では、FileServersサブシステムの設定を上書きすることでAVMフォルダを表示しないようにしていますが、同様の手順で、他に必要なフォルダを追加することも可能ですので是非チャレンジしてみてください。
また、サブシステム上書きについては、Alfresco Subsystems - alfrescowikiで詳しく説明されているので、必要に応じて参照してください。


今回は、以上になります。2回に分けて、ファイルサーバ機能の使い方、うまくアクセス出来ない時の対処法、いくつかのコンフィギュレーション例を説明してきました。
この機能はエンドユーザにファイルサーバと同様の使用感のUIを提供するとともに、他システムとの連携の際に相手先のシステムが標準で連携できる(可能性の高い)プロトコルを提供するものですので、実際にAlfrescoの利用を検討している方は、ファイルサーバ機能の利用も検討してみてはいかがでしょうか。

Wednesday, October 17, 2012

Alfresco勉強会#10 振り返り



皆さんこんにちは。

先日行われた第10回Alfresco勉強会についてのエントリです。
今回、aegifの二人が資料を元に発表を行いました。

1つ目はてらしたさん(@terajun)の
ドキュメントライブラリのUIカスタマイズ(一部)」でした。
Alfresco ShareのドキュメントライブラリのUIカスタマイズについて、デモを用いながらわかりやすく説明されていました。Alfresco Shareのカスタマイズは、当初3.x系ではテンプレートファイルを直接編集するなどの方法を採らざるを得なかったのですが、4.xでは設定で行えるようになり、だいぶカスタマイズしやすくなりました。この話は、Alfresco ShareのUIカスタマイズ入門として参考になると思います。

2つ目は私の「Alfresco ShareとGoogle Docs」になります。
機能としてたまに紹介されるGoogle Docs連携ですが、
実際に試した人が少ないのではと考えながら作りました。
ひじょうに簡単な設定で、Alfresco ShareからGoogle Docsへのチェックアウト、
Google DocsからAlfresco Shareへのチェックインができることをデモしました。

次回は11/7(水)を予定しています。
お申込みはこちらからできます。
ご興味ある方はぜひご参加ください。発表者も大歓迎です。
@mryoshio

Wednesday, October 3, 2012

Alfrescoのファイルサーバ機能TIPS(CIFSとかFTPとか) その1

こんにちは。大谷です。

今回はAlfrescoのファイルサーバ機能についてと、それを設定・利用するときに役立つマメ知識とかを書こうと思います。なお、本記事は基本的にWindowsを念頭に置いた内容になっているので、LinuxやMax OSをお使いの方は注意してください(まあ基本的なところはOSに依存しないとは思いますが…)。


ファイルサーバ機能って何?


Alfrescoはコンテンツにアクセスするための様々なインターフェースを用意しています。代表的なものはShareと呼ばれるブラウザアクセス用のGUIですが、その他にも、FTP、SMB/CIFS、WebDAV等でもアクセスできるようなインターフェースを提供しています。
このうちFTPとSMB/CIFS(とNFS。今更感満載なので割愛させてもらいます)の機能は、AlfrescoのFileServersサブシステムと呼ばれるモジュールによって提供されているので、併せてファイルサーバ機能と呼ぶこととします。
いずれもWindowsのエクスプローラや各種ハードウェア・ソフトウェアで簡単にアクセスできるインターフェースなので、ファイルサーバ機能を利用して、エンドユーザが既存のファイル共有サーバライクにAlfrescoを利用したり、スキャナ等から標準のインターフェースを利用して自動的にAlfrescoにファイルをアップロードしたりすることができます。


ファイルサーバ機能を利用するには?


基本的には何の設定もいりません。インストーラを利用しても、手動でインストールしても、FTP、CIFSともデフォルトで有効になっています。逆に、これらの機能を無効にしたい場合は、<tomcat_dir>/shared/classes/alfresco-global.propertiesに以下の設定を追記します。使わない機能を無効にすることは、サーバの負荷を軽減することにつながります。
  • FTP : ftp.enabled=false
  • CIFS : cifs.enabled=false



アクセスしてみよう!


では、実際にアクセスしてみましょう。まずはFTPから。適当なFTPクライアント(WindowsであればエクスプローラでOK)で、ftp://<サーバのIP>にアクセスします。ユーザIDとパスワードの入力を求められるのでAlfrescoに登録されたユーザの情報を入力すると、以下のようにアクセスできるはずです。ルートフォルダにはAlfrescoとAVMの2つのフォルダが存在することが分かります。

次にCIFSを試してみます。Windowsのエクスプローラで、\\<ホスト名>Aにアクセスします。ここで重要なのは、ホスト名の最後に"A"を付けることです(ブロードキャストされるNetBIOS名がデフォルトでこのように設定されているため)。もしアクセスできない場合は、\\<ホスト名>A\Alfrescoにアクセスしてみてください。ユーザIDとパスワードを入力すると以下のようにアクセスできるはずです(swsdpはAlfrescoにデフォルトで設定されているサンプルサイトです)。FTPの例を見ると想像がつくと思いますが、\\<ホスト名>A\AVMにもアクセスすることができます。

ちなみに、FTPやCIFSでAlfrescoフォルダにアクセスした際に表示される内容ですが、手動インストールした場合はAlfrescoリポジトリのルートフォルダ(Company_Homeと呼ばれます)、インストーラでインストールした場合はサイト一覧フォルダ(Company_Home/Sites)が表示されます。後で説明しますが、このルートパスを変更することもできます。


ん、アクセスできないんだけど…


上記のように一発でアクセスできればいいのですが、環境によってはうまくアクセスできないこともあります。ここではありがちな例をいくつか紹介します。

1. CIFSでアクセスできない(認証画面すら表示されない)
この場合は、AlfrescoがインストールされているPCで「コントロール パネル」→「ネットワークとインターネット」→「ネットワーク接続」から、利用しているネットワーク接続のプロパティを開き、「Microsoftネットワーク用ファイルとプリンター共有」のチェックを外してOKボタンをクリックします。
この機能もCIFSを利用しているため、チェックが入っていると競合が発生してAlfrescoにCIFSアクセスできなくなることがあるようです。

2. FTPでアクセスできない(認証画面は通るけどフォルダ一覧の取得に失敗する)
FTPのアクセスモードとファイアウォールの設定に依存している可能性があります。まずはクライアント側の設定でPASVモードを利用しているか否か確認しましょう。エクスプローラでアクセスするのであれば、Internet Explorerの「インターネットオプション」の「詳細設定」タブで「パッシブFTPを使用する」をチェックし、例えばこのチェックを外して再度アクセスできるか確認してみましょう。
もしくは、AlfrescoがインストールされているPCのファイアウォールを確認し、PASVモードが利用する可能性のあるデータポートが開放されているか確認します(ちなみにデフォルト設定のAlfrescoでは利用するポートレンジが指定されていないので、必要に応じてalfresco-global.propertiesにftp.dataPortFrom, ftp.dataPortToプロパティを追加してポートレンジを指定します)。


今回は、AlfrescoへFTPやCIFSのプロトコルを利用したアクセス方法について説明しました。次回は一歩進んで、ファイルサーバ機能の設定をいじってCIFSアクセス時のホスト名を変更したり、アクセス先のルートフォルダを変更したりする方法について説明しようと思います。

(2012/10/24追記:Alfrescoのファイルサーバ機能TIPS(CIFSとかFTPとか) その2 を公開しました)

Wednesday, September 26, 2012

Alfrescoのチューニングポイント(概要)

mryoshioです。

今日の内容はAlfrescoについての話になります。Alfrescoについてのインストールや初期設定については書き秋田こういう他の記事を参考にして頂くとして、今日はチューニングポイントの概要として少しだけ突っ込んだ話を書きたいと思います。
システムを構築する上で当然パフォーマンスには注意しなければならず、Alfrescoを使う場合でも同様です。JVMチューニングについてはここで少し触れられていますが、Alfrescoのチューニングポイントについての日本語のまとめは情報としてないと思います。そのため今日の内容を書くことにしました。
なお、AP(アプリケーション)サーバとしてTomcatを使っているという前提で進めます。
  • JVMの設定
    • bin/catalina.sh(Windowsの場合はcatalina.bat)
      • ヒープ領域の最大サイズ(Xmx)
      • ヒープ領域の最小サイズ(Xms)
      • Permanent領域の最大サイズ(MaxPermSize)
  • アプリケーションサーバソフトウェアの設定
    • server.xml
      • 最大スレッド数(maxThreads)
  • DBコネクションプールの設定
    • shared/classes/alfresco-global.properties
      • 最大プール数(db.pool.max)
      • インデクスリカバリ時の最大プール数(index.recovery.maximumPoolSize)
  • Luceneの設定
    • (設定項目が多いので別の機会)にご説明します。
普段Alfrescoを触っていてレスポンスが遅いと感じた場合、以上の項目をまず始めにチェックします。JVMの設定とアプリケーションサーバソフトウェアに関してはAlfrescoならではの話でないので割愛します。DBコネクションプールおよびLuceneの設定についてですが、まず前提としてお話したいのが、ほとんどの項目を設定をalfresco-global.properitesで行えるということです。ですので、Alfresco固有の設定はこのファイルで行うことになります。

DBコネクションプールについては、まずdb.pool.maxを確認します。たとえば、利用しているDBの最大接続数が200となっている時にAlfrescoの設定が32となっていると当然ながら最大性能を発揮するには程遠くなりますので注意しましょう。次にindex.recovery.maximumPoolSizeです。これは、Alfrescoが使うLuceneインデクスをリカバリ(再構築)する際に使用する最大プール数です。もしインデクスリカバリを実行していて遅いと感じた場合はここが関係している可能性があります。

4つ目のLuceneの設定に関しては、項目が多いのでまた別の機会に書きたいと思います。

他にsystem.acl.maxPermissionCheckTimeMillis等の設定についても書きたかったのですが、パフォーマンスとは異なるのでそれもまた別の機会に。

@mryoshio


Wednesday, September 19, 2012

AlfrescoのMicrosoft Office連携(オンライン編集機能)を試してみよう

こんにちは。大谷です。
今回は、Alfresco 4.0のMicrosoft Office連携について説明しようと思います。


Microsoft Office連携って何?


一言で表すと、AlfrescoがSharePointサーバのふりをするということになります。AlfrescoがSharePointプロトコルを話すことで実現しているのですが、これにより、SharePointサーバで提供されている以下の2つの機能がAlfrescoでも利用できるようになります。
  • Microsoft OfficeアプリケーションからSharePoint(Alfresco)サーバ上のリポジトリを参照し、ファイルを開く
  • SharePoint(Alfresco)サーバ上のファイルを直接Microsoft Officeアプリケーションで開き、編集、保存する
上記2機能はAlfrescoに同一の設定を施すことで利用可能になりますが、今回は後者の動作のみを確認してみようと思います(まあ後者の機能が正常に機能する場合は前者も正常に機能するはずです)。
ちなみに後者は、ローカル(オフライン)へのファイルダウンロードや、ローカルからの更新ファイルのアップロードを明示的に行う必要がないため、「オンライン編集」機能と呼ばれます。


ではまず機能のインストールから


では、早速機能のインストール方法を見てみましょう。

Alfrescoのインストールから始める場合は、「Alfresco4.0をインストールしてみよう(インストーラ編)」を参考にしてインストールを進めますが、「コンポーネントを選択」画面で「SharePoint」にチェックを付けるとMicrosoft Office連携機能が有効になります。インストールが完了したら、Alfresco側の設定は完了です。



既にAlfrescoがインストールされている場合、もしくはこれから手動でインストールする場合は、連携用コンポーネントを別途追加する必要があります。Download and Install Alfrescoの「Custom Installs & Optional Modules」から「SharePoint Protocol support」のzipファイル(4.0.eの場合はalfresco-community-spp-4.0.e.zip)をダウンロードして展開し、中身のAMPファイル(alfresco-community-spp-4.0.e.amp)をModule Management Toolを使ってインストールします。

※ Alfrescoを手動でインストールする場合は、「Alfresco4.0をインストールしてみよう(手動インストール編)」を参考にしてください。


クライアント側の設定と動作確認をしてみるが…


続いて、クライアント側の設定を行います。まずは、Web フォルダのソフトウェア更新プログラム: KB907306を適用します。

ひとまずこの状態でオンライン編集の挙動を確認してみましょう。確認手順は以下のとおりです。
  1. ブラウザで http://localhost:8080/share/ にログインする
  2. 「あなたのサイト」ダッシュレットに表示されているサンプルサイト「Web Site Design Project」をクリックする
  3. 「Project Library」をクリックする
  4. Microsoft Officeのファイルをアップロードする(例えばdocxファイルとか)
  5. アップロードしたファイルの「その他のアクション」->「オンライン編集」をクリックする
  6. 「ドキュメントを開く」ダイアログが表示されるので「OK」をクリックする




お、ちゃんとMicrosoft Officeアプリケーションが起動したぞ!と喜ぶのもつかの間、「このWebサーバーへのアクセスは規定で無効になっています。...」というダイアログが表示され、ファイルを開くことができません。



接続のSSL化か、認証レベルの変更か


上記のダイアログ、実はSSLでのアクセスじゃないとファイルを開けませんよ、という内容です。なので、対応方法は「SSL化する」「Microsoft Officeの認証レベルを非SSLを許可するように変更する」のどちらかになります。もちろんお勧めはSSL化なのですが、 今回はてっとり早く後者で対応したいと思います。
なお、1.についてはAlfresco Help - Setting up SharePoint Protocol Support to work with HTTPSに詳細な設定手順が書かれていますので参考にしてください。

Microsoft Officeの認証レベル変更は以下のように行います。
  1. クライアントPCでレジストリエディタを起動します(「ファイル名を指定して実行」->「regedit」)
  2. レジストリキー「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel」の値を2に変更する(キーが無い場合はREG_DWORDで作成する)
  3. レジストリキー「HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Internet\BasicAuthLevel」の値を2に変更する(キーが無い場合はREG_DWORDで作成する)
これで非SSL接続を許可する設定になったので、再度オンライン編集の挙動を確認してみましょう。以下のダイアログが表示され、ユーザー名とパスワードを入力してファイルが開ければOKです。


続いて、実際に編集し、ファイルを上書き保存してみましょう。すると、Alfresco上のファイルが自動で更新され、ファイルが新しくなっていることが確認できると思います(以下の例では、オンライン編集で「オンライン編集してみたよ!!!!!」という文字列を追加しました)。



最後に


以上がオンライン編集機能の基本的な設定方法と使い方です。なお、オンライン編集は、リポジトリ(Alfrescoのヘッダの「リポジトリ」リンクから辿れるやつ)では利用できず、各サイト内の文書ライブラリでしか利用できないことに注意してください。

また、上記以外にも環境に合わせた様々な設定項目がありますので、さらなる詳細についてはAlfresco Help - Installing and configuring Microsoft Office SharePoint Protocol Supportを参考にしてください。


(2014/06/11追記)  「Alfresco 4.2のMicrosoft Office連携(オンライン編集機能)をSSL化する」を公開しました。こちらの記事ではレジストリをいじることなくOffice連携を実現する方法を紹介しています。

Wednesday, September 5, 2012

Alfresco勉強会#9 振り返り


皆さんこんにちは。

先日行われた第9回Alfresco勉強会のご報告です。
今回は、aegifの二人が資料を元に発表を行いました。

1つ目は林さん(@linzhixing)の「やさしいShareダッシュレットの作り方」でした。
タイトルのヒエログリフから窺える通り、なかなか言葉(文字数)が詰まった資料で
非常に読み応えがある仕上がりになっています。事例としてあまり上がってこないAlfresco Shareのダッシュレットの作成について丁寧な説明が為されています。
ダッシュレットの作り方、サンプルコードも豊富で後々の参考資料として充分に
活用できると思います。ぜひご覧ください。

2つ目は私の「Alfrescoクラスタリング入門」になります。
Mac上のAlfrescoとVMware上のUbuntu上に構築したAlfrescoの間で
次のものを同期させる為の設定について解説しています。

  • コンテンツストア
  • キャッシュ
  • Luceneインデクス
資料を通して見て頂くと、
実際にはセッション情報等他のものの冗長化も必要になるとは思いますが、
Alfrescoをクラスタリング構成にするのが非常に簡単であることが分かるはずです。


次回は9/19(水)を予定しています。
ご興味ある方はぜひどうぞ!
失敗談でも結構ですので、気楽に発表も頂ければと思います。
@mryoshio