2013年4月29日月曜日

CentOSでPlay! framework

開発環境


  • CentOS 6.3
  • Play! v2.1.0
  • sbt v0.12.2
  • jdk v1.6.0_24

 jdkはyumなんかで入っているものとして進めていく。


Install Play framework

$ cd ~
$ mkdir workspace
$ cd workspace
$ wget http://downloads.typesafe.com/play/2.1.0/play-2.1.0.zip
$ unzip play-2.1.0.zip
$ sudo cp play-2.1.0 /usr/local/
すべてのユーザでplayコマンドを使えるようにpathを通す。
$ sudo vi /etc/profile
/etc/profile
# added
export PATH=$PATH:/usr/local/play-2.1.0
$ source /etc/profile
playコマンド打つ前に、
java.io.FileNotFoundException: /usr/local/play-2.1.0/framework/sbt/boot/update.log
とか
Ooops - Something went wrong! Exception:java.io.IOException:
Cannot write parent directory:
Path(/home/foo/workspace/helloworld/app)
of /home/foo/workspace/helloworld/app/controllers
とか怒られないようにするためにゴニョゴニョ。
$ sudo touch /usr/local/play-2.1.0/framework/sbt/boot/update.log
$ sudo chmod -R a+w /usr/local/play-2.1.0/
play new sampleAppってコマンドでアプリの雛形作るときの sampleApp/app/controllers/フォルダが出来ないことに対するピンポイントな対応がいまいちよくわからんです。
【参考】play-mailing-llistでのやりとり

ここいらでplayコマンドが有効化どうかの確認。
$ cd ~/workspace
$ play help
      _            _
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/

play! 2.1.0 (using Java 1.6.0_24 and Scala 2.10.0), http://www.playframework.org
Welcome to Play 2.1.0!

These commands are available:
-----------------------------
license            Display licensing informations.
new [directory]    Create a new Play application in the specified directory.

You can also browse the complete documentation at http://www.playframework.org.

Install sbt

wget使ってsbt.zipをインスコ。yum使ってinstallしてる人もいるっぽい。
$ cd ~/workspace
$ wget http://scalasbt.artifactoryonline.com/scalasbt/sbt-native-packages/org/scala-sbt/sbt//0.12.2/sbt.zip
$ unzip sbt.zip

sbt-launch.jarを/bin/ディレクトリにコピー
$ sudo cp sbt/bin/sbt-launch.jar /bin/

$ cd /bin/
$ sudo ls -l | grep sbt

$ sudo vi sbt
# /bin/sbt 実行権限付与
$ cd /bin/
$ sudo chmod 755 sbt
$ sudo chmod 755 sbt-launch.jar
$ sudo ls -l | grep sbt
-rwxr-xr-x  1 root root     120  4月 29 20:14 2013 sbt
-rwxr-xr-x  1 root root 1105354  4月 29 20:02 2013 sbt-launch.jar

アプリの雛形を作る

$ cd ~/workspace
$ play new helloworld
       _            _
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/

play! 2.1.0 (using Java 1.6.0_24 and Scala 2.10.0), http://www.playframework.org

The new application will be created in /home/ryota/workspace/helloworld

What is the application name? [helloworld]
>

Which template do you want to use for this new application?

  1             - Create a simple Scala application
  2             - Create a simple Java application

> 2
OK, application helloworld is created.

Have fun!

$ ls helloworld
README  app  conf  project  public  test

$ cd helloworld
$ sbt
[info] Loading project definition from ~/workspace/helloworld/project
[info] Set current project to helloworld (in build file:~/workspace/helloworld/)

[helloworld] $ reload
[helloworld] $ update
[helloworld] $ compile
[success] Total time: 37 s, completed ごにょごにょ

ApacheとPlay!のNettyを連携

vhost使って、
domain/play
にアクセスしたときにhelloworldアプリに飛ぶように設定する。別にこの設定しなくても細かいこと気にしない人はiptablesの9000番port開ければいいと思ふ。
# インクルードするconfigファイルを置くディレクトリを作る
$ sudo mkdir /etc/httpd/conf/extras

# play用のエラーログ・ファイルを作る
$ sudo touch /var/log/play-error_log

# インクルードするファイルを作る
$ sudo vi /etc/httpd/conf/extras/httpd-play.conf
httpd-play.conf

    ServerAdmin foo@foo.com
    DocumentRoot "/var/www/html"
    ServerName play.foo.com
    Errorlog "/var/log/play-error_log"

        ProxyPass /play http://127.0.0.1:9000
        ProxyPassReverse /play http://127.0.0.1:9000
        RequestHeader unset Authorization

        
            Order allow,deny
            Allow from all
        

Apache本体のconfigファイルで追加configファイルをインクルードするようにごにょごにょ。
/etc/httpd/conf/httpd.conf
### added begin
## Include /etc/httpd/conf/extras/*.conf 
Include conf/extras/*.conf
### added end
Apacheの再起動
$ sudo service httpd restart
Stopping httpd:     [  OK  ]
Starting httpd:      [  OK  ]
helloworldアプリの起動
$ cd ~/workspace/helloworld
$ sbt
[helloworld] run

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)
ブラウザで
http://your-domain-here/play
にアクセスして、Welcome to Play 2.1.0 見たいページ出ればおk。

2013年4月4日木曜日

Play! on Heroku でDBにMySQL使ってみる

 Play!(Java)で作ったアプリケーションを開発用途としてHerokuにDeplyしてみたかったので、ちょっと試してみた際のメモ。

※Heroku addon xeroundは5月頭にFree Planはなくなるという通知を受けました。

  • 開発環境
Mac OSX
jdk1.6
Scala2.10.0
Play!(Java)2.1.0
sbt 0.12.2

  • 前提
Herokuのアカウント
sshでHerokuにログインできる

HelloWorldアプリをHerokuにとりあえずDeploy


 まずはPlay!でHelloWorldサンプルをつくる。
$ mkdir ~/workspace/
$ cd ~/workspace/
$ play new helloworld

アプリの雛形ができる

$ cd helloworld
$ sbt
[helloworld] $ play
       _            _
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/

play! 2.1.0 (using Java 1.7.0_07 and Scala 2.10.0), http://www.playframework.org

> Type "help play" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.

[helloworld] $ reload
[helloworld] $ update
[helloworld] $ compile
[helloworld] $ run
とりあえずブラウザで http://localhost:9000/ にアクセスしてみる。ページがちゃんと表示されればおk。
 この状態でとりあえずHerokuにDeployしてみる。
$ pwd
~/workspace/helloworld/

$ git init
$ git add .
$ git commit -m "init"
[master (root-commit) 20c2af7] init
 14 files changed, 240 insertions(+)
 create mode 100644 .gitignore
...

$ heroku create
Creating 【Heroku上に作成されたアプリ名】... done, stack is cedar
http://【Heroku上に作成されたアプリ名】.herokuapp.com/ | git@heroku.com:【Heroku上に作成されたアプリ名】.git
Git remote heroku added

$ git push heroku master
...
-----> Play 2.x - Java app detected
-----> Installing OpenJDK 1.6...done
-----> Building app with sbt
-----> Running: sbt clean compile stage
       Getting net.java.dev.jna jna 3.2.3 ...
...
       [success] Total time: 6 s, completed Mar 31, 2013 3:28:58 PM
-----> Dropping ivy cache from the slug
-----> Discovering process types
       Procfile declares types           -> (none)
       Default types for Play 2.x - Java -> web

-----> Compiled slug size: 119.3MB
-----> Launching... done, v6
       http://【Heroku上に作成されたアプリ名】.herokuapp.com deployed to Heroku

To git@heroku.com:【Heroku上に作成されたアプリ名】.git
 * [new branch]      master -> master

メッセージに表示されている通り、ブラウザで http://【Heroku上に作成されたアプリ名】.herokuapp.com にアクセスして、ローカルでやったときと同じようにページが表示されればおk。ミスってたら heroku logs コマンドでLogを見るべし。

 Herokuの設定を確認。
$ heroku config
=== 【Heroku上に作成されたアプリ名】 Config Vars
DATABASE_URL:                postgres://FooHoge
HEROKU_POSTGRESQL_GREEN_URL: postgres://FooHoge
JAVA_OPTS:                   -Xmx384m -Xss512k -XX:+UseCompressedOops
PATH:                        .jdk/bin:.sbt_home/bin:/usr/local/bin:/usr/bin:/bin
REPO:                        /app/.sbt_home/.ivy2/cache
SBT_OPTS:                    -Xmx384m -Xss512k -XX:+UseCompressedOops
デフォルトのデータベースURLはポスグレですね。

HelloWorldアプリをDB(MySQL)を使った簡易アプリに変えていく


まずはローカルで。conf/application.confを編集する。
$ pwd
~/workspace/helloworld/
$ vim conf/application.conf
・conf/application.conf 抜粋(JNDI,mysql, Ebeanの設定)
# You can expose this datasource via JNDI if needed (Useful for JPA)
db.default.jndiName=DefaultDS

# mysql config
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://127.0.0.1:3306/helloworld?characterEncoding=UTF8"
db.default.user="root"
db.default.password=""

# Ebean configuration
ebean.default="models.*"
MySQLでdatabase helloworldを作成(コンソールから)
on Terminal
$ mysql -uroot

on MySQL Console
mysql> CREATE DATABASE helloworld;
Query OK, 1 row affected (0.05 sec)
project/Build.scalaのdependencyにmysql-driverを追加する
$ pwd
~/workspace/helloworld/
$ vim project/Build.scala
・project/Build.scala抜粋
val appDependencies = Seq(
    // Add your project dependencies here,
    javaCore,
    javaJdbc,
    javaEbean,
    "mysql" % "mysql-connector-java" % "5.1.24"
  )
最小限のコードを追加・編集する(本エントリではEclipseを使っている)。追加するのは以下の3つ。
・controllers/Application.java
・models/Foo.java
・views/foo.scala.html

 Eclipseにプロジェクトをインポートする。
$ pwd
~/workspace/helloworld
$ sbt
[helloworld] $ reload
[helloworld] $ update
[helloworld] $ eclipse
・controllers/Application.java
package controllers;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.PersistenceException;

import com.avaje.ebean.Ebean;

import models.Foo;
import play.Logger;
import play.mvc.Controller;
import play.mvc.Result;
import views.html.foo;
import views.html.index;

public class Application extends Controller {
  
    public static Result index() {
     List listFoo = new ArrayList();
     
     Foo foo1 = new Foo();
     foo1.name = "rkaneko";
     foo1.age = 25;
     listFoo.add(foo1);
     
     Foo foo2 = new Foo();
     foo2.name = "okenakr";
     foo2.age = 52;
     listFoo.add(foo2);
     
     try {
      Ebean.save(listFoo);
     } catch (PersistenceException e) {
      Logger.info(e.getMessage());
     }
     
        return ok(index.render("Your new application is ready."));
    }
  
    public static Result foo() {
     List listFoo = Foo.findAllList();
     return ok(foo.render(listFoo));
    }
}

・models/Foo.java
package models;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import play.db.ebean.Model;

@Entity
@Table(name = "foo")
public class Foo extends Model {

 /** serial id */
 private static final long serialVersionUID = 1L;
 
 /**
  * Id .
  * Primary key
  */
 @Id
 public Long id;
 
 /** name */
 public String name;
 
 /** age */
 public Integer age;
 
 /** finder */
 public static Finder<Long, Foo> find = new Finder<Long, Foo>(Long.class, Foo.class);
 
 /**
  * Get all entities list .
  * @return
  */
 public static List findAllList() {
  return find.all();
 }

}
・views/foo.scala.html
@(listFoo: List[Foo])

@main("Welcome to Play 2.1") {

Hello Play! framework on Heroku

Use MySQL on Heroku

@for(foo <- listFoo){
IDNameAge
@foo.id @foo.name @foo.age
} }
ブラウザでまず http://localhost:9000 にアクセスして、その後 http://localhost:9000/foo にアクセスして下の画像のようなのが表示されればおk。


HerokuでMySQLを使うための設定

HerokuでMySQLを使うためにxeroundというaddonを入れる。xeroundはAWSを利用したDatabase as a Service(DaaS)。今回はFreeプラン(starter)を利用する。10MBまで無料らしい。このaddonを使用するにはクレカ情報を登録する必要がある。

 クレカ情報を登録してないと、
$ heroku addons:add xeround:starter
Adding xeround:starter on 【Heroku上に作成されたアプリ名】... failed
 !    Please verify your account to install this add-on
 !    For more information, see http://devcenter.heroku.com/categories/billing
 !    Verify now at https://heroku.com/verify
のように登録してねって怒られる。
$ heroku addons:add xeround:starter
Adding xeround:starter on 【Heroku上に作成されたアプリ名】... done, v6 (free)
Use `heroku addons:docs xeround:starter` to view documentation.
herokuの設定確認
$ heroku config
=== 【Heroku上に作成されたアプリ名】 Config Vars
DATABASE_URL:                       postgres://FooHoge
...
XEROUND_DATABASE_NAME:              app何かしらの番号
XEROUND_DATABASE_PASSWORD:          何かしらのパスワード
XEROUND_DATABASE_PORT:              何かしらのポート番号
XEROUND_DATABASE_URL:               mysql://【USERNAME】:【PASSWORD】@instance番号.db.xeround.com.:【PORT】/【USERNAME】
XEROUND_DATABASE_USERNAME:          app何かしらの番号

$ heroku config:add DATABASE_URL=ここにXEROUND_DATABASE_URLを入力する
Setting config vars and restarting arcane-coast-2375... done, v8
DATABASE_URL: ここは設定したXEROUND_DATABASE_URLが表示される

HerokuにDeployしたときにデータベース接続先をxeroundデータベースにする設定

conf/application.conf の設定を少し変更・追加する。
$ pwd
~/workspace/helloworld/
$ vim conf/application.conf
・conf/application.conf
# mysql config
db.default.url="ここにはXEROUND_DATABASE_URLを記入?characterEncoding=UTF8"
db.default.user="ここにはXEROUND_DATABASE_USERNAMEを記入"
db.default.password="ここにはXEROUND_DATABASE_PASSWORDを記入"

# for heroku Evolutions config Deploy時にEvolutionsでデータベースマイグレーションを行う設定
applyEvolutions.default=true

Herokuに再度Deployする

アプリの方は完成したので再度HerokuにDeployする。
$ pwd
~/workspace/helloworld
$ git add .
$ git commit -m "added xeround config on application.conf"
$ git push heroku master
これで、特にエラーメッセージも出ずに、再度ブラウザでHeroku上のアプリにアクセスして無事ページが表示されればおk。  とりあえず、Play! on HerokuでMySQL使ってみるっていう目標で最小限のことはできたけど、application.confはもう少しDevとProduction時の設定を柔軟に書きたい。


参考

2013年2月16日土曜日

Jetty WebSocketを試してみてハマったこと

(※KK.Konさんにコメントによる指摘を頂いたので一部訂正しました 2013/03/02) 

 リアルタイム通信対戦を実現したくて,jetty-websocketを調べていた時にハマったアレコレ。

 参考にしたサイトは以下の通り。
eclipse jetty.project@github
RFC6455-The WebSocket Protocol 日本語訳
DENSO Smart Tech Award 2013#AndroidでSTAエミュレータを使用する
codehaus.org#Maven Jetty Plugin

 このエントリではサーバ・クライアント共にJavaで実装する。

 アプリケーションサーバにはJetty(v20121106)を使用する。JettyでWebSocketを扱っているブログ記事は多いのでコードに関する解説はry)

 クライアントサイドで使用するライブラリは何を使うのがいいか迷ったけど,サーバでJetty使うならクライアント側でもJettyのライブラリ使うのが現状では一番いいような希ガス。

 調べたライブラリは以下の通り。
jetty-websocket@github
TooTallNate/Java-WebSocket@github
rbaier/weberknecht@github

 今回はjetty-websocket使ったけど,もし他の使いたいならweberknechtよりはTooTallNate/java-WebSocketの方が良いかも。weberknechtはConnectionが開かなかった時に出るArrayIndexOutOfBoundsExceptionに対する処理を行なっていない。TooTallNateはこの例外処理を行なっている。

 ソースはgithubにおいてあります。(サーバサイドクライアントサイド
どちらもMaven使ってやりました。サーバ側はeclipse+WTPでもやってみたけど自分で突っ込むjarが多くて最初は戸惑う。少し試すだけならmaven使うのがいい。

 ハマったことは、

・TooTallNate・weberknechtとサーバjettyの相性
mavenにmvn jetty:stopでjettyを止めるようにする設定をpomに加えると動かなくなる
 (fixed 2013/03/02)
ていう2点 1点 (fixed 2013/03/02)。

 1点目はTooTallNateもしくはweberknechtをクライアント側で使う場合、jettyの8番台でmaven central repoにおいてある一番新しいv20121106では動かなかった(v20120910では動く)。詳しい原因はわからないが、jettyとJava-WebSocketで扱っているWebSocketのバージョンが違うのかなぁ・・・誰か詳しい人に教えてほちぃ。

 2点目はpom見てもらえば分かるんですけど、mavenコマンドからjettyサーバを止めるための設定をpomに加えると、これまたうまく動作しなくなります。これの原因もわかってない・・・ jetty止めるときはControl+Cで妥協しました。

 ちなみにmvn jetty:stopのためにpomに付け加えたのは以下のコメントアウト部分。
 pom.xmlのstopPortをserverPortと違うものにするとmvn jetty:stopのコマンドでjettyをストップできました。セキュリティの観点から?、jettyではコンテンツアクセスのポートとサーバ管理のアクセスポートを別にしているようです(ていうか通常はこのような実装?)。ポートに関して勉強不足でした。すいませんでした。
(fixed 2013/03/02)
(訂正前)

    org.mortbay.jetty
    jetty-maven-plugin
    ${jetty.version}
    
        
            /WebSocketServer
        
        
    
    

訂正後

    org.mortbay.jetty
    jetty-maven-plugin
    ${jetty.version}
    
        
            /WebSocketServer
        
        10
        hoge
        8090
    
    
        
            start-jetty
            pre-integration-test
            
                run
            
            
                0
                true
            
        
        
            stop-jetty
            post-integration-test
            
                stop
            
        
    

 以上がハマったアレコレでした。

 ちなみに実行してみた画面キャプチャは↓

2013年1月28日月曜日

CentOSにおけるjettyのdaemon化

以前のエントリ(CentOSにjettyを導入する)
の続き.

参考にしたサイトは
nobukatsu.jp#jettyのデーモン化
VINELINUX#chkconfigコマンドによる自動起動の設定
UNIX LINUX コマンド・シェルスクリプト リファレンス#if文とtestコマンド

では,早速

 /etc/init.d/以下にjettyファイルを作成する
$ sudo vim /etc/init.d/jetty
作成するファイルは以下の通り
↑のファイルの/usr/local/jettyの部分は自分の環境に合わせる.

 /etc/init.d/jettyに実行権限追加
$ sudo chmod 755 /etc/init.d/jetty
$ ls -l /etc/init.d/jetty
-rwxr-xr-x XXX XXXX XXXX 日付とか /etc/init.d/jetty
nobukatsu.jp#jettyのデーモン化 で紹介されているのと違う点は,bashコマンドが使えない環境でも,daemonが動く,という点.

作成したjettyファイル内の
if [ -z `/usr/bin/pgrep -f "java -jar start.jar"` ];
の部分だが,このバッククォート「`」でくくられている部分を,
if [ -z $(/usr/bin/pgrep -f "java -jar start.jar") ];
のように書くと,bashコマンドがデフォルトで使えないようなSolarisでは動かないという指摘を先輩エンジニアから受けました.
 bashコマンドがないような環境を使用しない人にとってはあまり関係のない話です.今回は古の技術を尊重してやってみました.

 ちなみに,Centでshとbashの関係を調べてみると,
$ ls -alF /bin/sh
/bin/sh -> bash*
という風になっていて,shにはbashのシンボリックが貼られていることがわかる.
ついでにMacOS Xでは
$ ls -alF /bin/sh
/bin/sh*
$ ls -alF /bin/bash
/bin/bash*
てな感じです.微妙に違う…
で,ちょっと脱線しましたが最後にデーモンを動かしてみる.

 daemonを動かす
$ sudo service jetty start

CentOSにjettyを導入する


前提

・CentOSにjdkが入っている
・sudoコマンドが使える

install jetty

 eclipse.orgからjettyをインストール
$ cd ~
$ mkdir workspace
$ cd workspace
$ wget http://download.eclipse.org/jetty/stable-8/dist/jetty-distribution-8.1.8.v20121106.tar.gz
--日付--  http://download.eclipse.org/jetty/stable-8/dist/jetty-distribution-8.1.8.v20121106.tar.gz

いろいろメッセージが表示される

`jetty-distribution-8.1.8.v20121106.tar.gz' に保存中

100%[======================================>] 9,064,609    615K/s 時間 18s     

日付 (494 KB/s) - `jetty-distribution-8.1.8.v20121106.tar.gz' へ保存完了 [9064609/9064609]
 tar展開
$ tar xvzf ./jetty-distribution-8.1.8.v20121106.tar.gz
 jettyを/usr/local/に移動
$ sudo mv ./jetty-distribution-8.1.8.v20121106 /usr/local/jetty-distribution-8.1.8.v20121106

$ cd /usr/local/
$ ls -a
.
..
jetty-distribution-8.1.8.v20121106
 シンボリック作成
$ sudo ln -s /usr/local/jetty-distribution-8.1.8.v20121106/ /usr/local/jetty8
$ ls -a
.
..
jetty8
jetty-distribution-8.1.8.v20121106
 8080port開放
$ sudo vim /etc/sysconfig/iptables
以下を追加
# added begin
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
# added end
 jetty起動
$ cd /usr/local/jetty8/
$ java -jar start.jar
 起動確認
http://ホストネーム:8080
にアクセスして,jettyのページが表示されればおk.

 強制停止
$ sudo kill -9 `pgrep -f "java -jar start.jar"`

あとはApacheの連携とか,daemon化とか…

2012年7月29日日曜日

CentOS 6.2 Java環境構築メモ

  • 開発環境
さくらVPS
OS:CentOS 6.2 x86_64
jdk 1.7.0_05


  • 前提
sudoコマンドが使える (参考:アカベコマイリ - さくらのVPS を改めて使いはじめる 2 – sudo と SSH ポート変更)

ホスト名XXX
ユーザ名gari
作業用ディレクトリ~/workspace

・作業用ディレクトリ作成
[gari@XXX ~]$ mkdir workspace
[gari@XXX ~]$ ls -l
drwxrwxr-x 2 gari gari  xxxx Jul 27 15:56 workspace

・WinSCP等で jdk-7u5-linux-x64.rpm をworkspaceに入れておく.
[gari@XXX ~]$ cd workspace
[gari@XXX workspace]$ ls -l
-rw-rw-r-- 1 gari gari xxxxxxxx Jun 18 09:35 jdk-7u5-linux-x64.rpm

・実行権限付与
[gari@XXX workspace]$ chmod +x jdk-7u5-linux-x64.rpm
[gari@XXX workspace]$ ls -l
-rwxrwxr-x 1 gari gari xxxxxxxx Jun 18 09:35 jdk-7u5-linux-x64.rpm

・Javaパッケージをinstall
[gari@XXX workspace]$ sudo rpm -Uvh jdk-7u5-linux-x64.rpm
[sudo] password for gari:
Preparing...                ########################################### [100%]
   1:jdk                    ########################################### [100%]
Unpacking JAR files...
        rt.jar...
        jsse.jar...
        charsets.jar...
        tools.jar...
        localedata.jar...

・バージョン確認
[gari@XXX workspace]$ java -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

・環境変数の追加
[gari@XXX workspace]$ sudo vi /etc/profile
[sudo] password for gari:
最終行に以下を追加
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

・環境変数を反映
[gari@XXX workspace]$ source /etc/profile

  • Java動作確認
[gari@XXX workspace]$ vi HelloWorld.java

・Javaファイル作成
HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World.");
    }
}

・コンパイル
[gari@XXX workspace]$ javac HelloWorld.java
[gari@XXX workspace]$ ls -l
total xxxxx
-rw-rw-r-- 1 gari gari      xxx Jul 27 15:56 HelloWorld.class
-rw-rw-r-- 1 gari gari      xxx Jul 27 15:56 HelloWorld.java
-rwxrwxr-x 1 gari gari xxxxxxxx Jun 18 09:35 jdk-7u5-linux-x64.rpm

・実行
[gari@XXX workspace]$ java HelloWorld
Hello World.


参考Web
Java - オヤジのサーバ構築に挑戦! Wiki* - サーバ構築 Java SDK 導入

Eclipse indigo + WTP + Jetty WTP PluginでWeb Application メモ

Jettyを試してみたくなったので,そのための環境構築メモ.

  • 開発環境
jdk 1.7.0_05
Eclipse Classic 3.7.1 - indigo
jetty-8.1.5.v20120716
---

  • Eclipse Plugin install
WTPのPluginは

http://download.eclipse.org/webtools/repository/indigo/

Jetty WTP Pluginは

http://download.eclipse.org/jetty/updates/jetty-wtp

から,それぞれインストール.

  • EclipseでServer Project作成
まず,EclipseでServer Projectを作成する.
この作業は,eclipseのJetty WTP Pluginのページを参考にした.

http://wiki.eclipse.org/Jetty_WTP_Plugin/Jetty_WTP_Create_Server


  • サンプルアプリケーション作成
これも同様に,eclipseのJetty WTP Pluginのページを参考にした.

http://wiki.eclipse.org/Jetty_WTP_Plugin/Jetty_WTP_Dynamic_Web_Project

上の参考の Step 6 で
以下のような

Caused by: java.lang.NoClassDefFoundError: javax/transaction/UserTransaction

エラーが出たが,以下の2つのページを参考にして解決することができた.

知らんがな - Jetty 8 on Fedora 17 (x86_64)
stackoverflow

必要なjarファイルは以下サイトからダウンロードできる.

http://download.java.net/maven/2/javax/transaction/jta/1.0.1B/

あとは例のごとく,ブラウザで以下にアクセスして,表示ができれば環境構築は完了.

http://localhost:8080/mywebapp/