Java 環境まわり   LastUpdate:

戻る
001   JAVAWって何?
002   クラスパスの注意点
003   コンパイルのメカニズム
004   クラスパスのあれこれ
005   importのあれこれ
006   xxxx$1.class って 何?
007   jar ユーティリティーの使い方
008   JDB デバッグツールの使い方
009   DBとの接続について
20050125-1 コーディング規約
20050127-1 VBやASPからJavaが呼び出せる?
20050204-1 JAVADOCでパッケージ内容を表示するには?
20050208-1 javaの起動引数について
20050211-1 JARファイルを作る
20050211-2 Ant
20050728 JavaDocでメソッド概要に詳細を表示しないようにするには
20080219 Javaコントロールパネルって何だ?
20080312 Java API Document
20080521 Javaの自動アップデートを取りやめるには
20090309_v1.5系をインストールした時のメモ
20090609_Oracle_JDBCドライバ_周りで_例外が発生
20090722_native2ascii
20090727_ORACLE_JDBCドライバ_のバージョン
20090407_DocLetを自分で作成して、それをデバッグする方法
20090522_jconsole
20100111_Antタスクの基礎
20100118_例外_Bad_version_number
20100117_このクラスは、どこのjarに含まれているのかぁ?
20100130_JAVAのメモリやメソッドの調査ツール_プロファイル
20101109_JMater_

001   JAVAWって何?

javaコマンドの代わりにjavawコマンドを使えば、コマンドプロンプトとは独立に実行されます。

C:\xxx> javaw my.package.MyApplication

と、http://www.dmz.hitachi-sk.co.jp/Java/Tech/jre/execution.html に書いてあった

002    クラスパスの注意点

クラスパスの中にブランク文字が含まれていると、これを引数に渡すような時に 引数が分裂してしまう。そのような時は、フォルダ名をセミコロンで囲っておくと良い。

また、クラスパスの中に漢字が含まれていると、ダメみたいである。

クラスパスの基本的な考え方は、環境変数classpathに依存する。pathではない!

http://java-house.jp/ml/archive/j-h-b/021880.html

2002/02/27

003    コンパイルのメカニズム

たとえば次のようなソースがあるとする。

    
//  Main.java------------------------------------------------------

class Main  {
    public static void main(String args[]){

        P1  p1  =   new P1();   //外部のクラスを生成してみる。

        p1.val1=1;

        System.out.println("Hello World!");
        System.out.println(p1.val1);
    }
}

//  P1.java------------------------------------------------------

class P1    {
    public int val1;
    public int val2;
}

Main.javaをコンパイルするとき、P1クラスが必要になるが、実験によると以下の動きをするようだ。

  1. P1クラスは、コンパイルされている必要はない。P1.javaファイルがあれば、自動的にP1.classにコンパイルしてくれた。
  2. P1.javaまたは、P1.classは、クラスパス上に存在する必要がある。
  3. javaファイルとclassファイルの両方が有る場合、javaファイルを優先してみるようだ。
    classファイルだけでも、もちろんコンパイル可能である。日付がソースの方が新しい場合はP1を自動的にリコンパイルしてくれる。

javacは、必要とするクラスファイルが無いとコンパイルできないので、自動的に最新状態でクラスファイルを整えようとするようです。

詳しい事は、\docs\ja\tooldocs\win32\javac.html に書いてあります。

004    クラスパスのあれこれ

クラスパスを指定する時、c:\test  とすると、test フォルダの中のクラスを検索する。
javac -classpath c:\test *.java

Jarファイルを指定する時は、Jarファイル名をフルパスで指定する必要がある。
javac -classpath .\jar\myClass.jar;.\jar\myClass2.jar xxx.java

クラスを指定する時は、そのクラスが含まれるフォルダ名を指定する。
javac -classpath .\myClass xxx.java

java -cp .\myClass;. xxx

jarでひとまとまりにされていないパッケージクラスがあったとする。
例として、package myclasses.utilty.class1
このパッケージはc:\java\test\pacage\myclasses\utilty\class1 配下にclassファイルがあったとする。
このパッケージをインポートするソースをコンパイルする時のクラスパスは、
classpath c:\java\test\pacage  となります。
つまり、jarファイルでないので、直接jarファイルを指定しない。しかしパッケージ宣言されているため、パッケージのTopRootであるmyclassが存在するフォルダを指定する。
難しい!!

実行時に-cp でクラスパスを変更すると、set classpath = xxxx で 設定されたものが全て無効となり置き換えられる。よって、直接実行するクラスファイルも -cpで確実に指定する必要がある。 

2001/11/05

005    importのあれこれ

import パッケージ名.*
import パッケージ名.クラス名

importをしなければならないのは、使用するクラスファイルがパッケージ宣言されており、かつ自分自身がそのパッケージに属していないときである。

しかし、毎回 「パッケージ名.クラス名」と書けば、importをしなくても良い。

パッケージ名は、その対象のディレクトリ構造や、存在位置に依存するかのごとく振る舞うが厳密には違う。パッケージ化された時のパッケージ名に従う。よって、実際の存在フォルダ名
クラスファイルか、jarファイルかの存在形態にも依存しない。 

import test.* 
としたとき、これは、「パッケージ名「テスト」に属するものを全て」という意味である。test.c1.c2.myclass は参照されないので注意!

006    xxx$1.callって 何?

インナークラスをコンパイルした時に作成されるみたいだ。

http://www.gimlay.org/~javafaq/S004.html#S004-01

2001/11/05

007    jar ユーティリティーの使い方

jarファイルとは、単なる圧縮ファイルでしかない。実際はzipファイルである。よって拡張子をzipに変更すれば、各種アーカイバーソフトで閲覧などが可能である。

java tool、jar ユーティリティーのよくある使い方

jar -tf xxxxx.jar             jarファイルの中の一覧を表示する。
jar -tf xxxxx.jar > xxx.txt    一覧をテキストファイルに吐く。
jar -xf xxxxx.jar               jarファイルを展開する。(解凍する)

jar cvf explib.jar exp\*.class   expフォルダ以下のclassファイルをexplib.jar という名前で圧縮する
jar tvf explib.jar                   explib.jar の中身の一覧

 

2001/11/06 


 

008    JDB デバッグツールの使い方

data_008.mht でも止めた方がいいよ!

2001/11/23


 

009    DBとの接続について

Webアプリケーションからデータベースを利用するには大きく分類すると以下の3点の方法がある。

  1. 自分でコネクション、コネクションプールを実装する方法。
  2. J2EE APIを使用して、コネクションを取得する方法。
  3. Webサーバーにコネクション情報を登録して、WebサーバーのAPIよりコネクションを取得する方法。

詳細は追って掲示予定。

2002/01/31

ドライバタイプの1〜4についての記述は
http://www.atmarkit.co.jp/fjava/rensai/jdbc01/jdbc01.html
2002/12/17

タイプ カテゴリ Oracle
1 JDBC-ODBCブリッジ・ドライバ  
2 ネイティブ・ブリッジ・ドライバ OCI(Oracle Call Interface)ドライバ
3 ネット・プロトコル・ドライバ  
4 ネイティブ・プロトコル・ドライバ THIN ドライバ

タイプ1:JDBC-ODBCブリッジ・ドライバ

J2SEに含まれています。これを使用するには、クライアントにインストールされている既存のODBCドライバが必要

 

タイプ2:ネイティブ・ブリッジ・ドライバ

データベース製品固有のクライアント・ライブラリが必要


 

タイプ3:ネット・プロトコル・ドライバ

タイプ3ドライバは、JDBCドライバでネイティブAPIをサポートする必要がないため、タイプ4ドライバに比べて軽量である点がメリットです。ですが、システム構成が複雑

 

タイプ4:ネイティブ・プロトコル・ドライバ

タイプ4のネイティブ・プロトコル・ドライバは、データベース製品固有のネイティブAPIを完全にJavaのみで実装。クライアント・ライブラリをインストールする必要がない。


20050125-1 コーディング規約

Sun
http://java.sun.com/docs/codeconv/index.html

日本語訳
http://www.tcct.zaq.ne.jp/ayato/programming/java/codeconv_jp/


20050127-1 VBやASPからJavaが呼び出せる?

Microsoft SDK for Java に含まれる JavaReg を使用してCOMコンポーネントに登録したら、使えるそうだ

あとは、CreateObject をするらしい…。

実験してないよ ネットで上記のキーワードから検索してみてね。


20050204-1 JAVADOCでパッケージ内容を表示するには?

パッケージのソースフォルダに  package.html というファイル名で 配置しておくと、javadocが読み取っていってくれる

<HTML>
<BODY>
JAVA DOC作成用サンプルクラスファイルが含まれています。
</BODY>
</HTML>

http://park15.wakwak.com/~unixlife/java/dev-javadoc.html


20050208-1 javaの起動引数について

java [ options ] class [ argument ... ]
java [ options ] -jar file.jar [ argument ... ]

options

-Dproperty=value
システムプロパティの値を設定します。 value が、スペースを含む文字列である場合は、文字列を次のように二重引用符で囲む必要があります。
        java -Dfoo="some string" SomeClass

Java SDKのドキュメントに詳しく書いてあるです。


20050211-1 JARファイルを作る

JAR ファイルは、ZIP圧縮されたものである。

jar ファイルの作り方の基本

jar cvf xxx.jar xxx

xxx フォルダ配下のファイルを、xxx.jar として作成してくれる。

c:アーカイブを新規作成する
v:標準出力に詳細な出力を生成する
f:アーカイブファイル名を指定する

たとえば、
jp/co/mycomp/projA/ClassA
jp/co/mycomp/projA/ClassB
の場合は、

jar cvf projA.jar jp  とすると、jpフォルダ配下のファイルを圧縮してくれる。


20050211-2 Ant

Ant のメモ
http://muimi.com/j/jakarta/ant/ant2.html


20050728 JavaDocでメソッド概要に詳細を表示しないようにするには

以下のコードをJavaDocで出力した場合

このように、メソッドの概要に全て出力されてしまう


メソッドの概要に、表示されるのは、先頭1行だけというが、何をもって1行か?

読点 ”。” または、ピリオド を以て1行との事だ。<br>や<P>ではないらしいので注意。なお、ピリオドの後は、スペースや改行などが必要である。



20080219 Javaコントロールパネルって何だ?


20080312 Java API Document

Sun Developer Connection 技術情報ポータル
http://sdc.sun.co.jp/portal/index.html


Java 2 Platform Standard Edition 5.0 API 仕様(オンライン)
http://java.sun.com/j2se/1.5.0/ja/docs/ja/
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html

ダウンロード
http://java.sun.com/j2se/1.5.0/ja/download.html


JDK 6 ドキュメント
http://java.sun.com/javase/ja/6/docs/ja/
http://java.sun.com/javase/ja/6/docs/ja/api/


Java 2 Platform, Enterprise Edition, v 1.3.1 API 仕様
http://sdc.sun.co.jp/java/docs/j2ee/sdk_1.3/ja/techdocs/api/index.html


20080521 Javaの自動アップデートを取りやめるには

コントロールパネルから、アクセスできるようだ

チェックをはずせば、いんじゃないかな


20090309 v1.5系をインストールした時のメモ

http://java.sun.com/j2se/1.5.0/ja/download.html

JDK: JDK 5.0 Update 17
 jdk-1_5_0_17-windows-i586-p.exe を実行

JavaAPI Doc

オンライン参照するなら
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html



20090609 Oracle JDBCドライバ 周りで 例外が発生

Eclipse上で Tomcat(6.0)のプロトタイピングをしていたら、Tomcatの初回実行後に、例外が発生してしまう

致命的: Error while registering Oracle JDBC Diagnosability MBean.
javax.management.MalformedObjectNameException: Invalid character
文字列の形式が有効な ObjectName に対応していません。
in value part of property
at javax.management.ObjectName.construct(ObjectName.java:602)
at javax.management.ObjectName.<init>(ObjectName.java:1403)
at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:303)
at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:213)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:209)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at resources.CustomerResource.getCustomerAsXml(CustomerResource.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
以下省略

環境 Eclipse 3.4.2
Oacle 11g 11.1.0.6.0
JDBC 11.1.0.6.0 ojdbc6.jar

対処方法

Oracleから、JDBCの新しい版がでているので、それを使用せよ

Oracle 11.1.0.7.0-Production JDBC 4.0 compiled with JDK6

以下のページから入手
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_111060.html


20090722 native2ascii

プロパティファイルに漢字が含まれている場合、そのまま読み込むと文字化けする。このような場合ユニコード変換を行なうようだ。

で、ユニコード変換を行うツールが native2ascii

JAVA_HOME のbin ファルダ配下にあります。

使い方は

native2ascii test.txt test.property

test.txt を 変換して  test.property に出力

native2ascii  -encoding UTF-8  test.txt test.property

test.txt をUTF-8 エンコーディングとみなして test.property に出力

-encoding を指定しない場合は、システム標準のエンコーディングになるようです。

その他の説明
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/tooldocs/win32/native2ascii.html

java6では native2ascii は 不要だとか?
http://d.hatena.ne.jp/shin/20090707/p4


20090727 ORACLE JDBCドライバ のバージョン

ojdbc5.jar JDK1.5用
ojdbc6.jar JDK1.6用

20090407 DocLetを自分で作成して、それをデバッグする方法

JavaDocを生成するのは ドックレット担当している。ドックレットを変更してJavaDocの出力レイアウトを変更することができる。

詳しくはこちらで
DocLetを自分で作成して、それをデバッグする方法


20090522 jconsole

GUIで メモリの使用状況などがみれる便利な JDKの標準ツール

EclipseのAllInOneパッケージでインストールした場合はJconsoleを起動しても、が、表示され、起動しなかった。

原因は、Jconsole.jar というモジュールが無いかららしい。

EclipseのAllInOneパッケージでインストールした時になぜ、Jcosole.exe は含まれるのに、Jconsole.jar が含まれないのかは不明


20100111 Antタスクの基礎

AntはJavaベースのビルドツール

AntはJakartaプロジェクトの中でも人気のあるツールの1つ

ダウンロードサイト
http://ant.apache.org/bindownload.cgi

Antの実行に必要な環境変数は以下の通り
・JAVA_HOME
・ANT_HOME
・PATH       antのbinが追加されていること。

build.xmlはAntを実行する際に参照されるAntの振る舞いを記載した設定ファイル
Antはこの設定ファイルに従い、javacの実行、jarファイルの作成などを行う。

Apache Ant 1.5 マニュアル
http://www.jajakarta.org/ant/ant-1.5/docs/ant-1.5/j/docs/manual/index.html

参考
http://www.atmarkit.co.jp/fjava/rensai2/jakarta02/jakarta02.html

 


builder.xmlの構成

<プロジェクト>
  <プロパティ/>

  <ターゲットA>
    <タスクA/>
  </ターゲットA>

  <ターゲットB 依存=ターゲットA>
    <タスクB/>
  </ターゲットB>

</プロジェクト>


プロジェクト

プロジェクトはbuild.xmlに1つだけ存在し、build.xmlを管理するもの

name プロジェクト名を指定する 任意
default antコマンドの引数にターゲットが指定されなかった時に実行されるターゲット名を指定する 必須
basedir ビルド処理のベースとなるディレクトリを指定する。指定しない場合は、build.xmlが設置されているディレクトリになる。 任意

<project name="example" default="compile" basedir=".">
  --------------------
  <target name="compile">
    --------------------
    --------------------
  </target>
</project>

プロパティ

プロパティはタスク内で使用できる変数を宣言する。
変数値は${name}で参照。
JavaAPIのシステムプロパティをあらかじめ設定された変数として参照することも可能。

name プロパティ名を指定する 必須
value プロパティ名に対する値を指定 必須

<property name="dirA" value="D:\Program Files\java" />

antの組み込みプロパティ


ターゲット

ターゲットはビルド処理で行われる一連の一まとまりの処理を管理

name ターゲット名を指定 必須
depends 依存するターゲットのnameを指定
指定したターゲットが実行されるまで、このターゲットは実行されない。
カンマで複数指定する事が可能
任意
if 設定されていなければならならいプロパティ名を指定。設定されていない場合、このターゲットは実行されない 任意
unless 設定してはいけないプロパティ名を指定。設定されている場合、このターゲットは実行されない 任意
description ターゲットの概要を記載 任意

ターゲットcompileでソースファイルをコンパイルし、ターゲットjarでコンパイルされたclassファイルをjarファイルに圧縮する例

ターゲットjarはターゲットcompileに依存しており、ターゲットcompileが実行されないと実行されることはない。

<target name="compile">
  <!-- コンパイル処理 -->
</target>

<target name="jar" depends="compile">
  <!-- jar処理 -->
</target>

タスク

タスクはターゲット内の個々の処理を表す。
Antでは、非常に多くのタスクが定義されているが、そのうち主要なもの一部について

詳細は、http://www.jajakarta.org/ant/ant-1.5/docs/ant-1.5/j/docs/manual/index.html

javacタスク

javacコマンドと同様の処理を行う。

srcdir javaソースファイルがあるディレクトリを指定する。 必須
destdir コンパイルしたclassファイルを出力するディレクトリを指定する。 任意
classpath classpathを指定する。 任意
classpathref あらかじめpathで設定したパスを指定 任意
includes コンパイルに含めたいファイルを指定する。 任意
excludes コンパイルから除きたいファイルを指定する。 必須

jarタスク

指定したファイルをjarファイルに圧縮する処理を行う。

destfile 圧縮されるjarファイル名を指定する。 必須
basedir jarファイルに圧縮したいファイルのルートディレクトリを指定する。 任意

mkdirタスク

ディレクトリを作成する処理を行う。

dir
作成するディレクトリ名を指定。
必須

copyタスク

指定したファイルをコピーする処理を行う。

dir
コピーしたいファイル名を指定する。
必須
tofile コピー先のファイル名を指定する いずれかを必須指定
todir コピー先のディレクトリ名を指定する。

例 mkdirタスクを使用した例、javacタスクを使用した例

<target name="compile">
  <!-- ディレクトリの作成 -->
  <mkdir dir="D:\classes"/>
  <!-- ソースファイルのコンパイル  -->
  <javac srcdir="D:\sources"
         destdir="D:\classes"
         includes="HelloWorld.java" />
</target>

echoタスク

System.outが上書きされない限り、メッセージを現在のロガーやリスナーにエコーします。メッセージがフィルタリングされるログレベルを制御する levelを指定することができます。

属性
説明
必須
message エコーするメッセージ この要素タグの間の文字データ部分にデータが無い限りは Yes
file メッセージを書き出すファイル 任意
append 既存のファイルに追記するかどうか 任意 ディフォルトはfalse
level このメッセージがレポートされるレベルを制御します。
 "error"、"warning"、"info"、"verbose"、"debug"のいずれかです。
任意 ディフォルトはwarning

antコマンド

antで使用するいくつかの代表的なコマンド例

ant

ビルド処理を行う。
設定ファイルはカレントディレクトリにあるbuild.xmlを使用。
ターゲットはprojectタグのdefault属性で指定されたターゲットを実行。

ant ターゲット名

ターゲット名を指定してビルド処理を行う。

ant -buildfile 設定ファイル

設定ファイル名がbuild.xmlでない場合や、カレントディレクトリにbuild.xmlがない場合に、-buildfileオプションで設定ファイルを指定する。

ant -version

現在使用しているAntのバージョンを表示する。

ant -help

antコマンドで利用できるオプションを表示する。


実例

C:\Javaディレクトリで作業をしており、ビルド処理後、コンパイルされたclassファイルをC:\Classesディレクトリへ配置する例。

<?xml version="1.0" encoding="Shift_JIS"?>
<project name="example" default="compile" basedir="C:\">

  <!-- propertyタグで変数source、compileを設定 -->
  <property name="source" value="./Java"/>
  <property name="compile" value="./Classes"/>

  <!-- ディレクトリClassesの作成 -->
  <target name="directory">
    <mkdir dir="${compile}"/>
  </target>

  <!-- ディレクトリJava内のソースファイルをコンパイル -->
  <!-- ターゲットdirectoryに依存しているため、
       ターゲットdirectoryを先に実行 -->
  <target name="compile" depends="directory">
    <javac srcdir="${source}"
           destdir="${compile}"
           excludes="build.xml" />
  </target>

</project>

ecllipseを使うと、プロジェクトをビルドするときの build.xml を、生成する事ができる。

../../eclipse/eclipse_index.html#20100111_アントタスクの設定ファイル_build.xml_を自動生成する方法


手始めに、echoを使ったタスクを作成してみた

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--20100111 antでechoを表示してみる -->
<project name="20100111 ant echo" default="start1">

    <target name="start1"  description="start1!">
        <echo message="start1!!!" />
    </target>

    <target name="start2" depends="start1" description="start2!">
        <echo message="start2!!!" />
    </target>

</project>

起動用のバッチファイルを作成してみた

set JAVA_HOME=C:\pleiades-e3.5\jre1.5
set ANT_HOME=C:\pleiades-e3.5\eclipse\plugins\org.apache.ant_1.7.1.v20090120-1145
set PATH=%PATH%;C:\pleiades-e3.5\eclipse\plugins\org.apache.ant_1.7.1.v20090120-1145\bin

ant start1
 

start1を実行

Buildfile: build.xml

start1:
[echo] start1!!!

BUILD SUCCESSFUL
Total time: 0 seconds

start2を実行

Buildfile: build.xml

start1:
[echo] start1!!!

start2:
[echo] start2!!!

BUILD SUCCESSFUL
Total time: 0 seconds

start1は、他に依存していないので、単独で実行しておわり。このとき、start2は実行されない。

start2は、start1に依存しているので、先にstart1が流れてからその後、start2が流れている!


ちょっと実践チックな build.xmlを作成してみた

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--サーブレットのコンパイルをANTでやってみたい-->
<project name="servlet compile sample" default="app.complie" >
 
    <property name="TOMCAT_HOME" value="/usr/share/tomcat5.5"/>
 
 
    <property name="projectRootDir" value="hogehoge"/>
    <property name="webframeworkJavaSourceDir" value="hogehoge"/>
    <property name="webApp1JavaSrcDir" value="hogehoge"/>

    <path id="fw.classpath">
        <pathelement location="./lib/ant_lesson_test_lib.jar" />
    </path>


    <target name="fw.compile"  description="frameworkのコンパイル" >
        <echo message="フレームワークのコンパイル開始" />
        
        <javac srcdir="./fw/src" destdir="./fw/bin" >
            <classpath refid="fw.classpath" />
        </javac>
        
        <echo message="フレームワークのコンパイル終了" />
    </target>

    
    <target name="fw.jar"  description="frameworkをjarにする" depends="fw.compile" >
        <echo message="フレームワークをJARにする 開始" />
        <jar basedir="./fw/bin" destfile="./lib/ant_lesson_fw.jar" />
        <echo message="フレームワークをJARにする 終了" />
    </target>
    
    
    <property name="TOMCAT_HOME" value="C:/pleiades-e3.5/tomcat5.5"/>
 
    <path id="webapplication.classpath">
        <!-- pathelement location="WEB-INF/classes"/ -->
        <pathelement location="${TOMCAT_HOME}/common/lib/servlet-api.jar"/>
        <pathelement location="${TOMCAT_HOME}/common/lib/jasper-runtime.jar"/>
        <pathelement location="${TOMCAT_HOME}/common/lib/jsp-api.jar"/>
        <pathelement location="./lib/ant_lesson_test_lib.jar" />
        <pathelement location="./lib/ant_lesson_fw.jar"/>
    </path>


    
    <target name="app.complie"  description="WEBアプリをコンパイルする" depends="fw.jar" >
        <echo message="WEBアプリをコンパイルする 開始" />
        
        <javac srcdir="./app/src" destdir="./app/WEB-INF/classes" >
            <classpath refid="webapplication.classpath" />
        </javac>
        
        <echo message="WEBアプリをコンパイルする 終了" />
    </target>
    


    <target name="compilewebApp1JavaSrcDir"  description="servlet compile" >
        <echo message="start compile" />

        <javac  
            srcdir="${webApp1JavaSrcDir}"
            destdir="${projectRootDir}/WEB-INF/classes" >
            <classpath refid="webapplication.classpath"/>
        </javac>

    </target>

</project>


20100118 例外 Bad version number

2010/01/19 1:03:45 org.apache.catalina.core.StandardWrapperValve invoke
致命的: サーブレット controlServlet のServlet.service()が例外を投げました
java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class myFramework.HtmlBody)

Javacによると

Java 仮想マシンが、クラスファイルの読み込み中に、そのファイルのメジャーバージョン番号とマイナーバージョン番号がサポートされていないと判定した場合にスローされます。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/


バージョンを調べ方  javap

javap -v クラス名   .class は指定不要

ではさっそく見てみましょう

C:\aaa>
C:\aaa>javap  -v HtmlBody
Compiled from "HtmlBody.java"
public class myFramework.HtmlBody extends java.lang.Object
  SourceFile: "HtmlBody.java"
  minor version: 0
  major version: 49
  Constant pool:
const #1 = class        #2;     //  myFramework/HtmlBody
const #2 = Asciz        myFramework/HtmlBody;

以下省略

なので、HtmlBody は 1.5

同様に呼び元もクラスを見てると

C:\aaa>javap -v ControlServlet
Compiled from "ControlServlet.java"
public class myApp.ControlServlet extends javax.servlet.http.HttpServlet
  SourceFile: "ControlServlet.java"
  minor version: 0
  major version: 49
  Constant pool:

同じだなぁ。。。

オぉぉ発見 親側のlibに jarがある。この中のクラスを展開して java-pしてみれると

C:\aaa>javap  -v HtmlBody
Compiled from "HtmlBody.java"
public class myFramework.HtmlBody extends java.lang.Object
  SourceFile: "HtmlBody.java"
  minor version: 0
  major version: 50

見つけた!! これだ。ただしいバージョンでリコンパイルして対応しましょう


20100117 このクラスは、どこのjarに含まれているのかぁ?

http://www.findjar.com/index.x

ここのページが便利


20100130 JAVAのメモリやメソッドの調査ツール プロファイル

..\..\eclipse\profile\profile.html

参考ページ

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35323&forum=12

Java デバッグツール NetBeans Profiler
http://www.okisoft.co.jp/esc/debugtool/netbeans.html


Linux上(CentOS5.0)のTomcatで稼働するアプリケーションにリモートでプロファイリングを行う。
http://d.hatena.ne.jp/flick-flick/20070914

NetBeans ProfilerによるTomcatのリモートプロファイリング
http://www.okisoft.co.jp/esc/debugtool/netbeans6.html


メモリリーク実装例
http://d.hatena.ne.jp/kimabuu/20080124/p1

Javaの理論と実践: 弱参照でメモリー・リークを塞ぐ
http://www.ibm.com/developerworks/jp/java/library/j-jtp11225/

[Java] hprof用CPU使用率解析ツール PerfAnal
http://blog.livedoor.jp/froo/archives/50622163.html

JDK に標準付属のプロファイリングツール hprof の使用方法
http://blog.livedoor.jp/lalha_java/archives/50741776.html

 TRACE の深さを変更するには: depth=n (ex. depth=8)
 


20101109 JMater

http://jakarta.apache.org/jmeter/

JMeter(高機能/フリーなテストツール)第1回:JMeterの基本
http://www.stackasterisk.jp/tech/engineer/jmeter01_01.jsp

JMater install


戻る