ラベル java の投稿を表示しています。 すべての投稿を表示
ラベル java の投稿を表示しています。 すべての投稿を表示

2012年1月26日木曜日

[Java][Derby] Derbyに急にAcccessControlExceptionで接続できなくなったとき

急にDerbyに接続できなくなって、コンソールには次のようなエラーメッセージが出ているとき。特に、複数のプロジェクトをビルドパスに含む構成にしているとき。
java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
とりあえず、依存先のプロジェクトを一旦ビルドパスから外し、再度加えてみる。
プロジェクトのクリーンもする。

参考:http://old.nabble.com/Re%3A-java.security.AccessControlException%3A-access-denied-%28java.io.FilePermission-derby.log-read%29-p19211798.html


セキュリティポリシーの変更をした場合などは、多分そちらが原因。
参考:
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/security/overview/jsoverview.html
http://db.apache.org/derby/docs/10.7/devguide/cdevcbabejdfj.html

2011年10月31日月曜日

[Java][Maven] 今さらかもだけどMaven入門してみた(5) - パッケージング

今回は、次のような構成にしてみた。
-bin/
  -App.bat: 起動用のバッチファイル
-config/
  -各種設定ファイル
-lib/
  -作成したJar
  -依存しているJar
実際には大体こちらの通り。
http://d.hatena.ne.jp/cnaos/20100102/1262430319
Jarの作成にはmaven-jar-pluginを、bin, config, libの各ディレクトリの作成とリソースのコピー、batファイルの作成にcodehausのappassembler-maven-pluginを使った。
手順は次の通り。

  1. appassemblerなどのリファレンスを見ながら、pom.xmlを書く。
  2. Run As > Maven buildでビルドする(このとき、goalにはpackageを指定する)
  3. 成果物をみて、期待と違えば再度設定する
最終的にできたpom.xmlは以下の通り。
<build>
        <!-- src/main/configはデフォルトではリソースとして登録されていないので、手動で追加
            (src/main/resourcesはデフォルトで登録されている) -->
        <resources>
            <resource>
                <directory>${basedir}/src/main/config</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>jp.example.App</mainClass>
                            <packageName>jp.example</packageName>
                        </manifest>
                    </archive>
                    <!-- 設定ファイルをJarから除外 -->
                    <excludes>
                        <exclude>*.properties</exclude>
                        <exclude>*.xml</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.1.1</version>
                <configuration>
                    <programs>
                        <program>
                            <mainClass>jp.example.App</mainClass>
                            <name>App</name>
                        </program>
                    </programs>
                    <!-- repository作成 -->
                    <repositoryLayout>flat</repositoryLayout>
                    <repositoryName>lib</repositoryName>
                    <!-- 設定ファイル -->
                    <configurationDirectory>config</configurationDirectory>
                    <copyConfigurationDirectory>true</copyConfigurationDirectory>
                    <configurationDirectory>config</configurationDirectory>
                    <!-- コンソールを出すか -->
                    <showConsoleWindow>true</showConsoleWindow>
                </configuration>
                <!-- packageフェーズで実行されるようにする -->
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>assemble</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

[Java][Maven] 今さらかもだけどMaven入門してみた(4) - ユニットテスト

テストコードの作成
ユニットテストにはJUnitが利用されているので、テストコードの作成については、JUnitのリファレンスを参照する。

テストの実行
Run As > Maven test
で実行する。
そうすると、次のような出力が出る。

[INFO] Scanning for projects...
[INFO]                                                                      
[INFO] ------------------------------------------------------------------------
[INFO] Building M2ETest 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ M2ETest ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Trials/M2ETest/M2ETest/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ M2ETest ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ M2ETest ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Trials/M2ETest/M2ETest/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ M2ETest ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.7.1:test (default-test) @ M2ETest ---
[INFO] Surefire report directory: /Trials/M2ETest/M2ETest/target/surefire-reports
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running jp.test.m2e.foo.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.009 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.563s
[INFO] Finished at: Mon Oct 31 16:26:59 JST 2011
[INFO] Final Memory: 7M/81M
[INFO] ------------------------------------------------------------------------
加えて、target/surefire-reportsのなかに、テストクラスごとにレポートができる。こんな感じ。
-------------------------------------------------------------------------------
Test set: jp.test.m2e.foo.AppTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.009 sec



HTMLで結果を一覧して確認
でも、これだと全体を一度に見られないから不便…と検索したら、レポーティングの一部としてテストを実行することもできるらしい。(ていうかJUnitって結果どうやって見てるの?)
これだと全てのテストの結果をHTMLにまとめて見られる。他の人への状況のシェアも(必要なときは)できるし、とりあえずこれを覚えておけばいい気がする。


1) pom.xmlに次の通り記述
<reporting>
    <plugins>
...
        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-report-plugin</artifactId>
        </plugin>
...
    </plugins>
</reporting>
2) プロジェクトディレクトリで次のコマンドを実行する。
mvn site(プロジェクトサイト作成コマンド。この場合、CSSや画像をダウンロードために実行)
mvn surefire-report:report
以上。良い感じのができてちょっと嬉しい。

[Java][Maven] 今さらかもだけどMaven入門してみた(3) - dependency追加、実行

dependency追加
試しにlog4j追加してみる。以降はEclipse上で作業。
手順は次の通り。
Maven > Add dependency > ライブラリ名入れて検索、選択 > scopeを設定

  • Scope:ビルドプロセスの中のいつ、そのDependencyを使うか。例えば、Log4jだったら、Scopeはtest. これを設定することで、必要ない時にそのdependencyを含めなくてよくなる。
ここでつまづいた。。詳細はこちら。

コードを書いて実行
Mavenコマンドで実行してもいいけど、普通にEclipseで実行でいいような気がします。

[Java][Maven] 今さらかもだけどMaven入門してみた(2) - プロジェクト作成、キーワード

■プロジェクト作成

Mavenを実行したい時は(Mavenに限ったことじゃないけど)、mvnコマンドを打ってもいいし、Eclipseプラグインでやってもいい。

1) コマンドで作成→eclipseにインポート
次のコマンドを打つ。
mvn archetype:generate
あとは、聞かれた通りに、

  • 元にするarchetype(プロジェクトのひな形)
  • groupId(パッケージ名)
  • artifactId(プロジェクト名)
を入力する。Eclipseへのインポートは次の通り。
Project Explorerで右クリック、Import > Maven > Existing Maven Project
(このとき.classpathにmavenのプロジェクト構成で決まっているソースパスやコンパイル出力先などが書かれる。)
これで、Eclipse上で作業できるようになる。

2) Eclipseプラグイン(m2e)で作成
Project Explorerで右クリック、New > Project > Maven > Maven Project
で作成。成果物を複数のプロジェクトで構成したい場合は、Maven Projectの代わりにMaven Moduleを選べば、プロジェクト内でのモジュールとなるプロジェクトを作成できる。
ダイアログの途中で選択する項目は次の通り。
  • Archetype
    • webapp向け、scala向け、jetty向け、などなどあるので、自分が作ろうとしているものがないか探す。
    • まずArchetypeカタログを選び、そのカタログに載っている好きなarchetypeを選択する。カタログはとりあえずAll Catalogを選択しておけばいいと思う。ちなみに各カタログについては次の通り。
  • GroupId:パッケージ名
  • ArtifactId:プロジェクト名

■Mavenの概念
ここから先は、とりあえず以下の項目について簡単に理解しておくとスムーズになると思う。

ビルドフェーズ
Mavenでは開発中にどういうフェーズがあるのか、が明確に定義されている。Mavenを実行するときは、フェーズ単位で実行する。
Mavenプラグイン
Mavenの機能は、様々なプラグインの形で提供されている。なので、Mavenを設定する、というのは、実質的には自分のやりたいことに対応するプラグインを選んで、設定して、という作業の繰り返しになる。
  • Ref: Available Plugins: http://maven.apache.org/plugins/index.html

Dependency
=依存するライブラリ、と思っているのだけど、ライブラリ以外にもdependencyになるものってあるのかな?

pom.xml
Mavenプロジェクトの設定ファイル。ここに、使いたいdependencyやプラグイン、プラグインの設定を書いていく。デフォルトのものを継承する形になるので、自分がカスタマイズしたい所だけ書けばいい。デフォルトのPOMはEclipseだとpom.xmlを開くとEffective POMタブで確認できる。

ゴール
プラグインの持つ機能みたいなイメージ。maven archetype:generate, ってするときのgenerateがゴール。pom.xmlで、プラグインに対してどのフェーズで、どのゴールを実行するのかを設定する。

2011年10月28日金曜日

[Java][Maven] 今さらかもだけどMaven入門してみた(1) - メリット、環境構築


今回は、最初にデバイス制御側を作っておいて、少し間があってからデータ取得側を作る、ってスケジュールで細かいこと忘れそう+ユニットテストとか再ビルドとか繰り返す必要がありそう、ということでやってみようかなと。
そういう目的からテスト管理ツール>CIツール(Jenkins)>Maven、って調べて行ってたどり着いた。


■Mavenを使うと嬉しいとき

1. 開発プロセスでの細々とした作業(プロジェクト作成、ライブラリの配置、テストツールの設定、テストレポートの作成など)に時間をかけたくないとき。
大概のステップは、何も準備をしていなくても、
mvn (フェーズ名)
ってすれば、とりあえず何かしらの成果物ができる。そこから、自分のやりたいことに合わせて設定ファイルを作ればいい。

2. ビルド作業を自動化したいとき。
ビルドツールの役割そのままだけど。
何人かビルドする人がいる、開発期間に間が空く、という時、一度設定すれば2度目以降は全く同じようにできる。

3. プロジェクトのディレクトリ構成を考えるのに時間をかけたくないとき。
プロジェクトのディレクトリ構成を考えなくていいし、他のプロジェクトを読むのも簡単になる。それに、Jetty, GAE, Scalaなど、メジャーなターゲットなら大抵プロジェクト構成が提供されているから、スタートしやすくなる。

4. 社内や、個人でもいいけど、自前で作ったライブラリを共有する複数のプロジェクトがあって、そのライブラリが更新されたりするとき。
Mavenローカルレポジトリを作れば、全員がそこに置かれているライブラリの最新版を使うことになるので、プロジェクトごとに違うバージョンのライブラリを使ってて何がなにやら、という状況にならなくて済む。
一番お世話になる機会はなさそうだけど、実現したら一番強力な機能かもしれない。


■環境構築

今回は、自前リモートリポジトリ作成はなし(リポジトリへの配備もなし)、プロキシ設定もなしです。

MavenはもともとSnow Leopardにインストールされているし、EclipseプラグインもEclipse Indigoにm2eが同梱されていた。Mavenのバージョンは最新だった(Maven 3.0.3)ので、環境構築作業はとりあえず何もせずにスタート。


■エントリー時の注意点
Maven 1.xとMaven 2.x/3.xは互換性が無いので、情報収集するときにはMaven 1.xのものでないかどうか注意!
コマンドがmavenだったり、プロジェクト設定ファイルがproject.xmlだったりしたらMaven 1.x(Maven 2.x/3.xではそれぞれmvn, pom.xml)。

2011年10月18日火曜日

[Java][Maven] log4jをdependencyに追加しようとしたらMissing artifactエラーになった

まずはmvnコマンドでプロジェクト作成、Eclipseにインポートしたまではよかったのだけど、試しに、とlog4jをAdd dependencyダイアログからPOMに追加したら、
Missing artifact log4j:log4j:bundle:1.2.16 
と言われた。ちなみにそこのdependencyタグはこんな感じ。
<dependency> 
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.16</version> 
   <scope>compile</scope>
   <type>bundle</type>
 </dependency>
けっこう探した結果、全く同じ問題が解決していた人がいたので、同様に解決。
http://maven.40175.n5.nabble.com/log4j-log4j-bundle-1-2-16-Bundle-or-JAR-td3281135.html

typeタグ(依存関係の種別を書いておく)をbundleでなくてjarにした。
bundleで探せてないってことは、どこかのパスが通ってないのが原因のような気がするけど、それがどれか(まだ)分からないから、とりあえずJarでもいいや。。

2010年10月26日火曜日

maven導入

1) ダウンロードとインストール
バージョン:Maven3.0
http://maven.apache.org/download.html
インストール場所:C:\JavaTools\apache-maven-3.0

2) 環境変数の設定

ユーザ環境変数PATH:アーカイブ・ファイルを展開したディレクトリの直下にあるbinディレクトリ
 C:\JavaTools\apache-maven-3.0\bin
システム環境変数JAVA_HOME:JDKのインストール・ディレクトリを設定する

 C:\Program Files\Java\jdk1.6.0_17

3) プロキシの設定
C:\JavaTools\apache-maven-3.0\conf\settings.xmlを次の通りに設定
id: uchidayoko
active: true
protocol: http
username/password: コメントアウト
host: 192.168.26.1
port: 8080
nonProxyHosts: コメントアウト

http://maven.apache.org/settings.html#Proxies

4) 新規プロジェクトの作成
> mvn archetype:create -DgroupId=《グループID》 -DartifactId=《アーティファクトID》
http://www.itarchitect.jp/enterprise/-/45149-3.html

2010年10月5日火曜日

JavaのThread, Que

キュー、デック(両端キュー)そのものの実装は、少しずつ機能が違うものが何種類かあるので、
好きなものを選ぶ。
参考:
http://www.atmarkit.co.jp/fjava/javatips/182java064.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20070831/280869/

けど・・・機能を説明してる単語がわからないものばっかり。。。


キューへのアクセス方法については、
マルチスレッドのデザインパターン
・Guarded Suspention
・Producer-Consumer
・Worker-Thread
を参考にすればよさそう。

2010年7月9日金曜日

eclipseの使い方

Ctrl+Spaceのコード補完を早くする
・・・設定場所がわからない
自動遅延時間や、候補に入れるパッケージ?の設定ができる


保管アクション

  • 設定>Java>エディター>保管アクション


値の確認方法

2009年8月3日月曜日

Exception on commit


■千葉工大アプリ

Exception on commit = java.io.IOException: Can't find registry file
っていう例外がEclipse上で出るけど、実行はできる。

情報がほとんどないけど、JMFから来ているらしい。
参考:http://shinoblogbyshiva.blogspot.com/2008_03_01_archive.html

2009年7月30日木曜日

JAVAで画像解析

村上さん調査

http://yamanity.blog.ocn.ne.jp/nyantacos/2009/05/usbjava_f721.html
http://www.javadrive.jp/tutorial/jcolorchooser/index3.html
http://java.sun.com/javase/ja/6/docs/ja/api/
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3843&forum=12

2008年10月8日水曜日

org.apache.commons.validator

GenericValidatorクラスにいろんなvalidationをしてくれるメソッドがある。
http://www.jajakarta.org/commons/validator-1.0.2/ja/withPrimary/org/apache/commons/validator/package-summary.html#doc.Usage
・org.apache.commons.collections
・org.apache.commons.digester
・org.apache.commons.logging
のダウンロード&インストール
・XMLパーサはjavax.xml.parsers.SAXParserがJ2EEに入ってる
・サンプル
http://634.ayumu-baby.com/commons/oss_jakartacommons_validator_sample.html
・ValidatorResourcesInitializer
サンプルにあるValidatorResourcesInitializerクラスが、最新リリースの1.3.1にない。
1.1.4まで遡ったらようやくあった。
とはいえ、ValidatorResourcesInitializerは非推奨になっているみたいだったので、
英文のJavadocみて、1.3.1を用いてやってみる。

バリデートルールのXMLのデプロイ場所、DTDのありかが不明でかなり手間取った。
デプロイ場所は参照元のクラスと同じパッケージの中。
DTDは以下に発見した。
http://commons.apache.org/dtds/
あと、設定XMLファイルのサンプルがなく、書き方が不明な点が多い。
他にもいくつか引っかかったが、それらは比較的簡単に解決できる。
全体に資料が非常に少ない(日本語はもちろん、英語のドキュメントもない)ため、
ひとつひとつのステップを確認しながらとなった。
基本的にStrutsの中にあるものに近いようだ。

正規表現がマッチしない。。。

JSPとheadタグ, CSS

・やっぱりJSPは入れ子にしても最終的にきれいなHTMLが生成されるべきらしい。
・それと、CSSが複数あって、それらにまたがるdivがあったりときは、idで指定するんじゃなくてクラスで指定しておいた方がいいみたいだ。

JNDI(Java Naming and Directory Interface)

http://www.javaroad.jp/opensource/js_tomcat8.htm
http://www.thinkit.co.jp/cert/article/0708/2/9/3.htm
環境に依存する(かつアプリケーション内で共通して使用する)情報をアプリケーション上で一元的に管理する
個々の「.jsp」「.java」ファイルにいちいち接続情報を記述する必要はなくなる
・server.xmlの設定
・Tomcat web.xmlの設定
http://www.thinkit.co.jp/cert/article/0708/2/9/3.htm
・web.xmlの

このあたりの設定をしようとすると、Tomcatの勉強をそれなりにしないといけなくなる・・・
もうちょっと実装してから勉強したいなあ。
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/jndi-datasource-examples-howto.html
http://commons.jakarta.jp/dbcp.html

DBUtils

http://www.atmarkit.co.jp/fjava/javatips/101java013.html
Connection、Statement、ResultSetの代わりになる。
close()を毎回書く&例外時にも書く、のをしなくてよくなる

2008年10月7日火曜日

あいまい検索

・preparedStatementのsqlのパラメータ部分を、
LIKE '%?%' → ps.setString(1, keyword) とするとうまく行かない。
?がシングルクオートで囲まれてるのがよくないようだ。
LIKE ? → ps.setString(1, "%" + key + "%")とすればOK.

beanをコレクションに入れて渡す

・スクリプトレットでアクセス
<%ProductBean p = (ProductBean)a.get(0);
String name = p.getName();
%>
<%=name%>
・ELでアクセス
${a[0].name}
・JSPの中でbeanの扱いが楽みたいなのは、jsp:usebeanタグとbeanのマジックパワーのおかげなのかと思ったけど、がんばっているのはむしろELみたいだ。