Javaの最近のブログ記事

DBIx::Class::Indexer::WebService::Luceneを使ってみたいので、まずはLucene Web ServiceをCentOS 5にインストールしてみたメモ。

ちなみにLucene Web ServiceとはJavaで出来てる検索エンジンLuceneにREST APIでアクセスできるようにしたWebアプリケーションです。これにより他の言語からも使いやすくなるということ。

JDK 6のインストール

*基本的にこのエントリでやってることと同じです

ここからJDK 6u1 Download->Accept License Agreementにチェックして->Linux RPM in self-extracting fileをゲット

インストール
$ sudo ./jdk-6u1-linux-i586-rpm.bin
一応alternativeの設定
$ sudo /usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_01/bin/java 2
$ sudo /usr/sbin/alternatives --config java

1 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/java/jdk1.6.0_01/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1
後々面倒なのでシンボリックリンクを張っておく
$ ln -s /usr/java/jdk1.6.0_01 /usr/java/jdk
今回は関係ないけどクラスパスなどの設定 .bash_profile
export JAVA_HOME=/usr/java/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

apache-tomcatのインストール

ここからapche tomcat 6.0 binary tar ballをゲット 展開して配置
$ tar -xzvf apache-tomcat-6.0.10.tar.gz
$ sudo mv apache-tomcat-6.0.10 /usr/java/
$ sudo ln -s /usr/java/apache-tomcat-6.0.10 /usr/java/apache-tomcat
jsvcのコンパイル
$ cd /usr/java/apache-tomcat/bin
$ sudo tar -xzvf jsvc.tar.gz
$ cd jsvc-src
$ sudo chmod a+x configure
$ sudo ./configure --with-java=/usr/java/jdk
$ sudo make
$ ls -la jsvc
-rwxr-xr-x 1 root root 95479  4月 19 18:29 jsvc
起動スクリプトの編集
$ sudo cp /usr/java/apache-tomcat/bin/jsvc-src/native/Tomcat5.sh /etc/init.d/apache-tomcat
$ sudo chmod a+x /etc/init.d/apache-tomcat
/etc/init.d/apache-tomcat
--snip--

LANG=C
#JAVA_HOME=/home2/java/j2sdk1.4.2_03
JAVA_HOME=/usr/java/jdk
#CATALINA_HOME=/home/tomcat5/tomcat5/jakarta-tomcat-5/build
CATALINA_HOME=/usr/java/apache-tomcat
#DAEMON_HOME=/home/jfclere/daemon
DAEMON_HOME=$CATALINA_HOME
#TOMCAT_USER=tomcat5
TOMCAT_USER=root

# for multi instances adapt those lines.
TMP_DIR=/var/tmp
PID_FILE=/var/run/jsvc.pid
#CATALINA_BASE=/home/tomcat5/tomcat5/jakarta-tomcat-5/build
CATALINA_BASE=$CATALINA_HOME

#CATALINA_OPTS="-Djava.library.path=/home/jfclere/jakarta-tomcat-connectors/jni/native/.li
bs"
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar

case "$1" in
  start)
    #
    # Start Tomcat
    #
    #$DAEMON_HOME/src/native/unix/jsvc \
    $DAEMON_HOME/bin/jsvc-src/jsvc \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    exit $?
    ;;

  stop)
    #
    # Stop Tomcat
    #
    #$DAEMON_HOME/src/native/unix/jsvc \
    $DAEMON_HOME/bin/jsvc-src/jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
    ;;

  *)
    echo "Usage tomcat.sh start/stop"
    exit 1;;
esac
* 最初のLANG=Cを指定しないと後でLucene Web Serviecが返す日付がおかしなことになる

Lucene Web Serviceのインストール

ここからwarファイルをゲット webappディレクトリにコピー
$ sudo cp lucene-ws-1.0_01.war /usr/java/apache-tomcat/webapps/
tomcatを起動すると自動的に展開されるのでシンボリックリンクを張っておく
$ sudo /etc/init.d/apache-tomcat start
$ sudo ln -s /usr/java/apache-tomcat/webapps/lucene-ws-1.0_01 /usr/java/apache-tomcat/webapps/lucene
WEB-INF/web.xmlをチェック WEB-INF/web.xml
<?xml version="1.0"?>
<web-app>

    <display-name>The Lucene Web Service</display-name>

    <servlet>
        <servlet-name>LuceneWebService</servlet-name>
        <servlet-class>net.lucenews.LuceneWebService</servlet-class>

        <!-- ADJUST THESE SETTINGS BELOW AS NECESSARY -->
        <!--
            In the presence of 'properties.file' it detected, web service will attempt
            to repopulate parameters with those found within the file pointed to by
            the 'properties-file' name/value pair value.
        -->
        <init-param>
            <param-name>properties-file</param-name>
            <param-value>/var/local/lucene/service.properties</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>1</param-value>
        </init-param>
        <init-param>
            <param-name>directory</param-name>
            <param-value>/var/local/lucene/</param-value>
        </init-param>
        <init-param>
            <param-name>operator.default</param-name>
            <param-value>AND</param-value>
        </init-param>
        <init-param>
            <param-name>field.default</param-name>
            <param-value>all</param-value>
        </init-param>
        <init-param>
            <param-name>title</param-name>
            <param-value>Lucene Web Service</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
      <servlet-name>LuceneWebService</servlet-name>
      <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>
/var/local/lucene/が必要そうなので掘っておく
$ sudo mkdir /var/local/lucene
tomcatの再起動
$ sudo /etc/init.d/apache-tomcat stop
$ sudo /etc/init.d/apache-tomcat start
ブラウザからhttp://localhost:8080/luceneにアクセスすると
<?xml version="1.0" encoding="UTF-8" standalone="no"?><service xmlns="http://purl.org/atom/app#">
	<workspace title="Lucene Web Service (v0.75)">
		<collection href="http://localhost:8080/lucene/document/" title="document">
			<member-type>entry</member-type>
		</collection>
	</workspace>
</service>
とか返ってくるので動いていそう。

Javaはずいぶん長いこと触ってないないので間違っていたらツッコミよろしくです。

WEB+DB PRESS Vol.28
WEB+DB PRESS Vol.28
posted with amazlet at 05.09.13
WEB+DB PRESS編集部
技術評論社 (2005/08/25)
売り上げランキング: 4,363

# とりあえず、時間も時間なので適当にメモです。気が向いたらもうちょっと突っ込んで書くかもです。

WEB+DB PRESS Vol.28の「EJB3時代のデータベース設計」という特集の中でHibernateの面白そうな使い方が書いてありました。

記事中ではHibernate Annotationsを使ってEJB3.0ライクにAnnotationによってマッピングファイルを使うことなくEntitiy Beanを実装する方法が記述されていました。

というわけで、久々にHibernateに触れてみました。

これまではマッピングファイルによってTop-Downにデータベースのスキーマを生成していましたが、Hibernate + Hibernate Annotation + Hibernate Toolsで同様のことができます。Hibernate Ant Toolsのドキュメントに詳しく書かれています。

Hibernate Toolsは本来Hibernateをより簡単に扱うためのEclipseプラグインなのですが、そのコアクラスにはAnt用のタスククラスが含まれています。その中にHibernate Annotationsと連携するSchemaExportなクラスが含まれているのでこいつを利用します。

ただし、現在配布されているHibernate 3.1 beta 2、Hibernate Annotations 3.1 beta 4、Hibernate Tools 3.1 alpha 5の組み合わせではAPIの非互換性から動かないのでCVSリポジトリから最新のコードを取得してコンパイルする必要があります。

HibernateはHibernate3のリポジトリ、AnnotationsとToolsはHibernateExtのリポジトリに含まれます。厳密にはAnnotationsはHibernateExt/metadataに、ToolsはHibernateExt/toolsに含まれますが、コンパイルにHibernateExtのリポジトリがごっそり必要なので要注意です。

それぞれをコンパイルしてhibernate3.jarと必要なライブラリ群、hibernate-annotations.jarとejb3-persistence.jar、hibernate-tools.jar、JDBCドライバ(今回はMySQLを使用)を${project}/libにコピーして

Employee.java
package net.hide_k;

import javax.persistence.*;

@Entity(access = AccessType.PROPERTY)
@Table(name = "t_employee")
public class Employee {

	private Long id;

	private String name;

	@Id(generate = GeneratorType.IDENTITY)
	@Column(name = "id")
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@Column(name = "name")
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

みたいなコードを書いて${project}/binにコンパイルしておきます。

${project}に接続用の設定ファイルとしてhibernate.cfg.xmlを置きます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernatetest</property>
        <property name="hibernate.connection.username">hoge</property>
        <property name="hibernate.connection.password">hoge</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<mapping package="net.hide_k"/>
        <mapping class="net.hide_k.Employee"/>
    </session-factory>
</hibernate-configuration>
スキーマ作成用のAntビルドファイル(schemaExport-build.xml)を以下のように作成します。
<?xml version="1.0" encoding="UTF-8"?>
<project name="Hibernate Annotations" default="schemaExport">
	<property name="build.dir" value="bin"/>
	<property name="lib.dir" value="lib"/>
		
	<path id="lib.class.path">
		<fileset dir="${lib.dir}">
			<include name="**/*.jar"/>
		</fileset>
		<pathelement path="${build.dir}" />
	</path>
		
	<target name="schemaExport">
		<taskdef
		     name="hibernatetool" 
		     classname="org.hibernate.tool.ant.HibernateToolTask" 
		     classpathref="lib.class.path"/> 
		
		<hibernatetool destdir="./"> 
			<annotationconfiguration configurationfile="hibernate.cfg.xml"/>
			<hbm2ddl drop="false"/>
		</hibernatetool>
	</target>
</project>

で、このビルドファイルでantすれば、めでたくスキーマが生成されます。(もちろんデータベースの器だけはCREATE DATABASEしておく必要があります。)

まだまだBetaやAlphaということもありますが、膨大なマッピングファイルが消え去るのはちょっと気持ちいいかもしれません。

追記 (2005/09/13 21:38)
本来@Tableを使うにあたってjavax.persistence.Tableをインポートすべきところをorg.hibernate.annotations.Tableをインポートしてました。ごめんなさい。

Apache GeronimoにWebサービスをデプロイする - developerWork
Webサービスの開発をサポートするアプリケーション・サーバーを決定しようとしているのであれば、Apache Software Foundationの最新プロジェクトの1つ、Apache Geronimoアプリケーション・サーバーを試してみてください。この記事では、Java™の専門家である Kunal Mittalが、GeronimoのWebサービス機能の紹介として、標準的なJ2EE Webサービス・コードをGeronimoで書き、開発する方法を解説します。基礎となるSOAP(Simple Object Access Protocol)実装にApache Axisを使用し、AmazonのWebサービスを利用する方法を学びます。また、単純なJSP(JavaServer Pages)ベースのクライアントを使ってWebサービスにアクセスする方法も学びます。

最近、諸々の事情でJavaから遠ざかっていたのですが、久々に触る機会があったのでついでと言っては何ですが、developerWorkをのぞいてみたら面白げな記事がありました。

そもそもApache Geronimoの存在自体知らなかったという体たらくなのですが、要はオープンソースなJ2EE1.4準拠なアプリケーションサーバーらしいです。まだ1.0 Milestone 4と正式リリース前ではありますが、なかなか楽しげです。

記事中ではAmazon Web Serviceを利用したWebサービスの実装とデプロイの仕方が紹介されています。かなり簡単そうです。

ちなみに本国のdeveloperWorksではGeronimoのリソースサイトがあります。

EJBに対する疑問からずーっとJ2EEを避けてきましたがEJB 3.0では、ちょっとは納得できそうな雰囲気ではあるので、手をつけてみようかな~なんて自分で自分の首を絞めるようなことを考えていたりします。

といいつつもSpring + Hibernate + Struts / JSFの方が楽かな・・・なんて腰が引けたことも考えています。

Ajax and XML-RPC (Graham O'Regan's Blog)
In this post I'm going to look at one of the strongest candidates for the new standard in Ajax communication, the incredibly simple XML-RPC protocol. I'm going to use the Apache XML-RPC library to create a simple web service and create a simple Java consumer before looking at how we can use the JSolait JS XML-RPC library to consume the same service in a browser window.
Apache XML-RPCライブリを使ったXML-RPCサーブレットとJSolait JS XML-RPC libraryを使ったAjaxフロントエンドのチュートリアル。

Apache XML-RPCライブラリを使えばPOJOを簡単にXML-RPCとして利用できるという点とJavascriptライブリ集のJSolaitを使えば簡単にXML-RPCを使ったAjaxフロントエンドをインプリメントできるという点が主旨です。

特にJSolaitを使えば
<script type="text/javascript" src="./jsolait/init.js"></script>
<script type="text/javascript" src="./jsolait/lib/urllib.js"></script>
<script type="text/javascript" src="./jsolait/lib/xml.js"></script>
<script type="text/javascript" src="./jsolait/lib/xmlrpc.js"></script>
<script type="text/javascript">
<!--
/**
 * Load the xmlrpc object and a proxy to the service
 */
var xmlrpc = null;
var server = null;

try{
    var xmlrpc = importModule("xmlrpc");
    var server = new xmlrpc.ServerProxy('http://localhost:8080/xmlrpc/test.rpc', ['echoHandler.echo']);
}catch(e){
    reportException(e);
    throw "importing of xmlrpc module failed.";
}

/**
 * Delete the value in the first box and put the result of the XML-RPC
 * call into the second
 */
function echo(input){
	response = server.echoHandler.echo(input);
	document.myForm.input.value = "";
	document.myForm.result.value = response;
}
//-->
</script>

これだけでXML-RPCサーバと通信してAjax出来てしまうのがグッド。
呼び出しはこんな感じですね。

<form name="myForm" action="" method="post">
<input type="text" name="input" onKeyUp="javascript:echo(document.myForm.input.value)" /><br/>
<input type="text" name="result" /><br/>
</form>

Eclipse3.0.xインストール備忘録

EclipseSDKとLanguageパックのダウンロード
日本ミラー(RING)からeclipse-SDK-3.0.1-win32.zipNLpack-eclipse-SDK-3.0.x-win32.zipをダウンロード

Eclipseのインストール
  1. eclipse-SDK-3.0.1-win32.zipを任意のフォルダーに解凍(ex. c:\eclipse)
  2. NLpack-eclipse-SDK-3.0.x-win32.zipを解凍してeclipse/featuresとpluginsフォルダーをc:\eclipse以下に上書きコピー
Eclipseの起動
  1. c:\eclipse\eclipse.exeをダブルクリック
  2. ワークスペース・ランチャーのダイアログが表示されたら[この選択をデフォルトとして使用し、今後この質問を表示しない]をチェックしてOK
JREの変更 デフォルトではJREがc:\Program Files以下を指してるのでJDKの物に変更する
  1. [ウィンドウ]-[設定]で設定ダイアログを開く
  2. [Java]-[インストール済みのJRE]を選択
  3. [インストール済みのJava Runtime Environment(JRE)]のjre1.4.2_xxを選択して[編集]をクリック
  4. [JRE名]お好みで
  5. [JREのホームディレクトリー]をJDKの物に変更する(ex. c:\java\jdk1.4.2_06)
  6. [Javadoc URL]をローカルの日本語版に変更する(ex. c:\java\jdk1.4.2_06\docs\ja)
  7. [OK]をクリックして終了

JDK1.5が出ているにも関わらず今さらですがJDK1.4からサポートされたNIO APIに手をつけ始めました。

僕の場合、仕事上必要となるのはSocket、ServerSocketに変わるSocketChannelやServerSocketChannelあたりの理解なのでしょうが、いかんせんUNIX上でのCの開発経験がないのでselect()システムコールと言われても「???」って感じなのです。

とりあえずThreadの管理から開放される感覚を味わいたかったのでServerSocketChannelとSelectorを使った簡易サーバーでも書いてみました。

日本語での解説やいい事例の紹介が非常に少ないため困っていた中、dw:Java technologyで見つけたのが


です。
特に後者は例としてHTTPサーバーの簡易実装とパフォーマンス比較が乗っていて興味深いです。

あと、英語ですが

も、とっかかりとして参考になりました。

早いところ
Java NioJava Nio
Ron Hitchens

が翻訳されることをきぼんぬ。

かなり遅くなりましたがプロジェクトの整理ついでにEclipseを2.1.3から3.0.1に移行しました。

eclipse1.gif

30秒ほど何をどうすればいいのか悩んだのは内緒です。

eclipse2.gif

ワークベンチも雑誌などでみて知ってはいたけどえらい見た目が変わりましたね。

使っているプラグインは どれもこれも問題なく使えてます。

まぁ今のところ何の恩恵も感じてない代わりに大した問題もないのでよしとしよう。

J2SE 5.0「Tiger」で何が変わるか?

最近面白くない記事が多かった@ITだけど、Tigerについてよくまとめられている記事。かなり劇的な変更なので安定するまでしばらくかかりそうだけど、非常に便利な機能が多いので早く使えるようになりたい。

Javaの次期バージョン「Mustang」、2006年デビューへ

Javaプラットフォームのメジャーアップグレードを発表したばかりのSun Microsystemsが9月30日、コードネーム「Mustang」と名付けたJavaの次期リリースに関する一部情報を公開した。2006年春にデビューを見込んでいる。

J2SE 6.0になるのかな?気の早い話だこと。

J2SE 5.0がリリースされた。主な機能強化はあちこちで紹介されているので簡潔に

  • generics
  • 拡張ループ文
  • static import
  • タイプセーフenum
  • 可変長引数
  • JVMの強化
  • JVMの監視・管理機能

などなど。時間ができたら触ってみよう。

・・・いかに新しいもの追っかけていないかが露呈。8/31にすでにリリースされていた模様

個人的に大きいのは

ValidWhen - The Struts Validator now supports a ValidWhen rule, so that one validation can be dependant on another.

これでActionForm#validate()にコードを書かずに済むかも。

いつの間にかTomcat5.5.1がリリースされていた。

Tomcat 5.5 is designed to run on J2SE 5.0 and later, and requires
configuration to run on J2SE 1.4. Make sure to read the "RUNNING.txt"
file in this directory if you are using J2SE 1.4.

In addition, Tomcat 5.5 uses the Eclipse JDT Java compiler for compiling
JSP pages. This means you no longer need to have the complete
Java Development Kit (JDK) to run Tomcat, but a Java Runtime Environment
(JRE) is sufficient. The Eclipse JDT Java compiler is bundled with the
binary Tomcat distributions. Tomcat can also be configured to use the
compiler from the JDK to compile JSPs, or any other Java compiler supported
by Apache Ant.

というわけでJ2SE 5.0ベースでEclipse JDTをJSPのコンパイラに使うようになったわけですな。とりあえず様子見です。

プロフィール

このアーカイブについて

このページには、過去に書かれたブログ記事のうちJavaカテゴリに属しているものが含まれています。

次のカテゴリはLinuxです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。