Info

Posts from the Java Category

OS X (Lion) に Hadoop 0.21.0 インストールメモ

$ cd dl

$ wget http://ftp.jaist.ac.jp/pub/apache//hadoop/core/hadoop-0.21.0/hadoop-0.21.0.tar.gz

$ tar zxvf hadoop-0.21.0.tar.gz 

$ sudo mv hadoop-0.21.0 /usr/local/

hadoopユーザ作成

$ sudo dscl . -create /Groups/_hadoop PrimaryGroupID 1000
$ sudo dscl . -append /Groups/_hadoop RecordName hadoop

$ sudo dscl . -create /Users/_hadoop UniqueID 1000
$ sudo dscl . -create /Users/_hadoop RealName "Hadoop Admin"
$ sudo dscl . -create /Users/_hadoop PrimaryGroupID 1000
$ sudo dscl . -create /Users/_hadoop NFSHomeDirectory /var/lib/hadoop
$ sudo dscl . -create /Users/_hadoop Password "*"
$ sudo dscl . -append /Users/_hadoop RecordName hadoop

ssh設定

$ sudo su - hadoop
$ ssh-keygen
$ cd .ssh
$ cat id_rsa.pub >> authorized_keys

Hadoop設定

$ sudo vi conf/hadoop-env.sh 
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

confファイル設定 /user/local/hadoop/conf/

core-site.xml 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>
    <name>hadoop.tmp.dir</name>
    <value>/var/lib/hadoop</value>
  </property>

  <property>
    <name>fs.default.name</name>
    <value>hdfs://localhost:9000</value>
  </property>

</configuration>

hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>

</configuration>

mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

  <property>
    <name>mapred.job.tracker</name>
    <value>localhost:9001</value>
  </property>

</configuration>

logsディレクトリ作成

$ sudo mkdir /usr/local/hadoop/logs
$ sudo chown hadoop:hadoop /usr/local/hadoop/logs

NameNodeのフォーマット

$ sudo su - hadoop
$ /usr/local/hadoop/bin/hadoop namenode -format

起動

$ sudo su - hadoop
$ /usr/local/hadoop/bin/start-all.sh

ssh拒否エラーが出た時は、コントロールパネルからリモートログインを許可

http://localhost:50070
アクセスしてみる。

Advertisements

Heroku が Javaをサポートしたということで試してみた。

1. プロジェクト作成

$ mvn archetype:create -DgroupId=com.heroku.javanese -DartifactId=Javanese
$ cd Javanese
$ mvn eclipse:eclipse

eclipseにインポートして covert to maven project

2. HelloWorld.java作成

package com.heroku.javanese;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.*;

public class HelloWorld extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.getWriter().print("Hello from Java!\n");
    }

    public static void main(String[] args) throws Exception{
        Server server = new Server(Integer.valueOf(System.getenv("PORT")));
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");
        server.setHandler(context);
        context.addServlet(new ServletHolder(new HelloWorld()),"/*");
        server.start();
        server.join();  
    }
}

3. pomファイル修正

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.heroku.javanese</groupId>
	<artifactId>Javanese</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>Javanese</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-servlet</artifactId>
			<version>7.4.5.v20110725</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>appassembler-maven-plugin</artifactId>
				<version>1.1.1</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>assemble</goal>
						</goals>
						<configuration>
							<assembleDirectory>target</assembleDirectory>
							<generateRepository>false</generateRepository>
							<programs>
								<program>
									<mainClass>com.heroku.javanese.HelloWorld</mainClass>
									<name>webapp</name>
								</program>
							</programs>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

4. .gitignore ファイル作成

$ echo "target" > .gitignore

5. いろいろ設定

$ mvn install

プロジェクトルートに Procfile ファイル作成

web: sh target/bin/webapp

環境変数 REPO に .m2/repository 設定

$ export REPO=$HOME/.m2/repository

foreman インストール、起動

$ sudo gem install foreman
$ foreman start

6. ローカルアクセスしてみる。
http://localhost:5000/

7. heroku に deploy

$ git init
$ git add .
$ git commit -m "init"
$ heroku create --stack cedar
$ git push heroku master

# heroku.com でプロジェクト名変更
$ git remote rm heroku
$ git remote add heroku git@heroku.com:javanese.git
$ git push heroku master

8. できた〜
http://javanese.heroku.com

前提条件は apache,tomcat,maven がインストールされてる環境である。

1. Apache/Tomcat連携 (proxy_ajp.conf 作成)

[root@li336-103 ~]# vi /etc/httpd/conf.d/proxy_ajp.conf
ProxyPass /manager/ ajp://localhost:8009/manager/
ProxyPass /blog ajp://localhost:8009/blog

2. tomcat設定

[root@li336-103 ~]# vi /usr/local/tomcat/conf/tomcat-users.xml
<tomcat-users>
...
  <role rolename="tomcat"/>
  <user username="username" password="password" roles="tomcat"/>
...
</tomcat-users>

3. tomcat-maven-plugin インストール
tomcat-maven-plugin は Maven のセントラルリポジトリではなく、codehaus の Repository で提供されているので、pom.xml でリモートリポジトリ追加。
pom.xml

<project>
...
<repositories>
     <!-- tomcat-maven-plugin -->
     <repository>
          <releases>
               <enabled>false</enabled>
          </releases>
          <snapshots />
          <id>Maven Snapshots</id>
          <url>http://snapshots.maven.codehaus.org/maven2/</url>
     </repository>
</repositories>

<!-- tomcat-maven-plugin -->
<pluginRepositories>
     <pluginRepository>
          <releases>
               <enabled>false</enabled>
          </releases>
          <snapshots />
          <id>Maven Snapshots</id>
          <url>http://snapshots.maven.codehaus.org/maven2/</url>
     </pluginRepository>
</pluginRepositories>

...
</project>

4. tomcat-maven-plugin の設定
pom.xmlとsettings.xmlを設定

pom.xml

<build>
     <!-- tomcat-maven-plugin -->
     <plugins>
          <plugin>
               <groupId>org.codehaus.mojo</groupId>
               <artifactId>tomcat-maven-plugin</artifactId>
               <version>1.0-SNAPSHOT</version>
               <configuration>
                    <server>tomcat</server>
                    <url>http://hoge.com/manager</url>
               </configuration>
          </plugin>
     </plugins>
</build>

settings.xml

</settings>
...
  <servers>
    <server>
      <id>tomcat</id>
      <username>username</username>
      <password>password</password>
    </server>
  </servers>
...
</settings>

5. deploy

macbook:blog dongriab$ mvn tomcat:redeploy

WicketをAppEngineで動かしてみた。
http://wicketonengine.appspot.com/

必要なjarファイル。

  • wicket-1.4.6.jar
  • slf4j-api-1.6.1.jar
  • slf4j-log4j12-1.6.1.jar
  • log4j-1.2.9.jar

1. プロジェクト作成
Eclipseから「Web Application Project」を作成する。

2. jarの配置、Build Path設定
上の4のjarファイルを /war/WEB-INF/lib/ に入れる。
Java Build Pathの設定で、wicket-1.4.6.jarとslf4j-api-1.6.1.jarを追加

3. web.xml

<display-name>wicket on engine</display-name>	

<filter>
	<filter-name>WicketFilter</filter-name>
	<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
	<init-param>
		<param-name>applicationClassName</param-name>
		<param-value>com.appspot.wicketonengine.WicketApplication</param-value>
	</init-param>
	<init-param>
		<param-name>wicket.configuration</param-name>
		<param-value>deployment</param-value>
	</init-param>
</filter>

<filter-mapping>
	<filter-name>WicketFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

4. appengine-web.xml

<sessions-enabled>true</sessions-enabled>

5. パッケージ、クラス作成
パッケージ:com.appspot.wicketonengine
クラス:WicketApplication.java

public class WicketApplication  extends WebApplication{    

	public WicketApplication(){

	}

	public Class getHomePage(){
		return HomePage.class;
	}

	@Override
	protected ISessionStore newSessionStore() {
		return new HttpSessionStore(this);
	}

	@Override
	protected void init() {
		super.init();
		getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
		getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
		getResourceSettings().setResourcePollFrequency(null);
	}
}

以上で、HomePage.javaなど作成して普通のwicket開発〜

————————————————————————————————————————
メモ:
エラー
Uncaught exception from servlet
java.lang.NoClassDefFoundError: Could not initialize class com.google.apphosting.runtime.security.shared.stub.java.lang.management.ManagementFactory

対象法:wicket-***.jarファイルを削除。

エラー
vm_global_library.vmなんちゃ言われたときは、空のvm_global_library.vmファイルをwarに作成して置く。

使えないメソッド?
Form.setVersioned(true);
setDefaultModelObject();
————————————————————————————————————————

ちょっと古いJavaのネタですが…

 System.out.print("011の値は:" + 011);

前回はWindows環境でAndroid1.5を試してみたが今回はMac OS Xで試してみる。

1. SDKダウンロード
http://developer.android.com/sdk/
Mac OS X(intel)版をダウロードする。解凍したらて適当な場所に保存する

2. Eclipseをダウロードする
http://www.eclipse.org/downloads/
一番に下にある、Eclipse Classice の Mac Cocoa 32bitを選択してダウンロード。
同じく解凍したら適当な場所に保存する。

3. ADT Pluginをインストール。
Eclipse.appを起動して、以下のupdate siteからプラグインをインストール
update site: https://dl-ssl.google.com/android/eclipse/

4. emulatorを起動してみる
$ ./emulator
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.

If you are an Android SDK user, please use ‘@’ or ‘-avd ‘
to start a given virtual device (see -help-avd for details).

Otherwise, follow the instructions in -help-disk-images to start the emulator

$

Virtual Device作成
$ ./android create avd -n dongrikim -t 2
Error: Target id is not valid. Use ‘android list targets’ to get the target ids.

$ ./android list targets
Available Android targets:
なにも出てこない!

調べたところSDK Componentsを入れないと作れないらしい。
Android SDK and AVD ManagerでComponentをインストール

インストール完了したらもう一度
$ ./android list targets
Available Android targets:
id: 1 or “android-3”
Name: Android 1.5
Type: Platform
API level: 3
Revision: 1
Skins: HVGA (default), HVGA-L, HVGA-P, QVGA-L, QVGA-P
id: 2 or “Google Inc.:Google APIs:3”
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 3
Description: Android + Google APIs
Based on Android 1.5 (API level 3)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: QVGA-P, HVGA-L, HVGA (default), QVGA-L, HVGA-P
・・・・・・・・・・・・・・・・・・・・・・・
$

今度は出てきた。

Virtual Device作成
$ ./android create avd -n dongrikim -t 7
Android 2.1 is a basic Android platform.
Do you wish to create a custom hardware profile [no]
Created AVD ‘dongrikim’ based on Android 2.1, with the following hardware config:
hw.lcd.density=160
$
成功したようだ。

avdを指定してemulatorを起動してみる
$ ./emulator -avd dongrikim

appengine-java-php

1. Quercusライブラリダウンロード
http://quercus.caucho.com/ から Quercus 3.1.6をダウンロードする(Quercus 4.0.1は文字化けが発生するので、今回は3.1.6を使うようにする)
jar xf quercus-3.1.6.war
(quercus.jar, resin-util.jar, script-10.jar)

2. Jettyライブラリダウンロード
http://dist.codehaus.org/jetty/jetty-6.1.17/ から jetty-6.1.17.zip をダウンロード
(jetty-6.1.17.jar, jetty-util-6.1.17.jar)

3. ライブラリをlibフォルダに入れる
1と2で取得したjarファイルを war/WEB-INF/lib に入れる

4. 設定ファイル修正
4-1 appengine-web.xml

<static-files>
  <exclude path="/**.php" />
</static-files>
<resource-files>
  <include path="/**.php" />
</resource-files>

 
4-2 web.xml

<servlet>
  <servlet-name>Quercus Servlet</servlet-name>
  <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
  <init-param>
    <param-name>script-encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
    <param-name>ini-file</param-name>
    <param-value>WEB-INF/php.ini</param-value>
    </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>Quercus Servlet</servlet-name>
  <url-pattern>*.php</url-pattern>
</servlet-mapping>

 
4-3 php.ini ファイル作成
war/WEB-INF の下に php.ini ファイルを新規作成

unicode.semantics=on
unicode.http_input_encoding=UTF-8
unicode.output_encoding=UTF-8
unicode.runtime_encoding=UTF-8

 
5. info.php
warの下にinfo.phpを作成

<?php
phpinfo();
?>

 
6. アクセスしてみる。
http://localhost:8080/info.php

エラー内容:

[info] Starting service...
[174  javajni.c] [error] 指定されたモジュールが見つかりません。
[994  prunsrv.c] [error] Failed creating java 
               C:\Program Files\Java\jre6\bin\client\jvm.dll
[1269 prunsrv.c] [error] ServiceStart returned 1
[info] Run service finished.

 
解決法:

C:\Program Files\Java\jre6\bin\下の「msvcr71.dll」をC:\WINDOWS\system32にコピーする。

struts2

1.Filter
Struts2.0

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>
    org.apache.struts2.dispatcher.FilterDispatcher
  </filter-class>
</filter>

Struts2.1

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>
    org.apache.struts2.dispatcher.ng.filter.
    StrutsPrepareAndExecuteFilter
  </filter-class>
</filter>

 
2.アノテーションクラス

@Namespace, @Resultなどのアノテーションクラスが、strtus2-core-2.0.x.jar から struts2-codebehind-plugin-2.1.x.jarに移されてる。よって、2.1でアノテーション使う場合は、libに struts2-codebehind-plugin-2.1.6.jar を入れる必要がある。

3.タグ
tabbedpanel、tree、datetimepicker などのタグがクラスが、 strtus2-core-2.0.x.jar から struts2-dojo-plugin-2.1.6.jar に移されてる。よって、2.1で上のようなタグを使う場合は、libに struts2-dojo-plugin-2.1.6.jar を入れる必要がある。

taglibの定義とサンプル

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<table width="300"><tr><td>
<sx:tabbedpanel id="tabpanel1">
 <sx:head/>
 <sx:div id="tab1" label="TAB1" theme="ajax">タブ1</sx:div>
 <sx:div id="tab2" label="TAB2" theme="ajax">タブ2</sx:div>
 <sx:div id="tab3" label="TAB3" theme="ajax">タブ3</sx:div>
</sx:tabbedpanel>
</td></tr></table>