量産メモ帳

忘れっぽいのでメモを残しています。

Java

Javaのclassファイルやjarファイルを逆アセンブルする。

Java の class ファイルを逆アセンブルするコマンドとして javap というものが JDK に用意されています。 https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/javap.html class ファイルはバイトコードなのでテキストエディタで開いても分か…

SoapUIはEclipse用プラグインをサポートしなくなった。

数年前に開発したWebアプリケーションをテストするために、試しに SoapUI というツールを Eclipse にプラグインとしてインストールしましたが、殆ど使わないままお蔵入りになっていました。 で、久々に Eclipse をバージョンアップしようと思い、以前の Ecli…

Javaアプリの接続タイムアウトと読み取りタイムアウトについて。

Java の技術文書を読むと、Java アプリケーションがネットワークに接続する時やファイルを読み込む時のタイムアウトは、デフォルトで"-1"(無制限?)になっているようです。 ネットワークのプロパティ

Linux上で動作するJavaプロセスがDBに接続する時に発生する処理遅延問題を解決する。

Linux 上で動作している Java プロセスが DB にアクセスする時に処理遅延が起きた場合、この引数を指定すると問題が解決することがあります。

Javaプロセスのヒープメモリを解析する。

たまに必要になるが、やり方を忘れてしまうのでメモを残しておく。 コマンドプロンプトを開いて、以下の3つのコマンドを実行する。 jps -lm jmap -dump:format=b,file=java.hprof (JavaプロセスのPID) jhat java.hprof jhat の起動に成功すると、コンソール…

HttpClient#execute メソッドを呼び出したら"302 Moved Temporarily"が返ってきた時の対処方法。

Stack Overflow に解答が載っていました。 java - Httpclient 4, error 302. How to redirect? - Stack Overflow DefaultHttpClient httpclient = new DefaultHttpClient(); httpclient.setRedirectStrategy(new DefaultRedirectStrategy() { public boolean…

Java アプリケーションの実行(exe)ファイルを作る。

Java アプリケーションを実行する場合、大体、こんなコマンドを打つことになるけど、、、 java -cp foo.jar xxx.yyy.zzz.Bar (引数1) (引数2) ... (引数N) 特にクラスの階層が深いと文字入力するのが面倒になってくるので、やっぱりこのようなイメージで実行…

java.sql.DatabaseMetaData#getTables メソッドの戻り値が null になる問題を解決する。

これ、自分もハマったことがある。 Oracle 10g standardへのJDBC接続にてDatabaseMetaData.getTablesメソッドが上手く機能しません。 | JavaのQ&A【OKWave】 確かに第二引数(スキーマ名)に null を指定すればテーブル名を取得できる。 しかし、Oracle の場合…

Java と C# の用語を比較する。

7年前に C# を勉強した時のメモを今更だけどアップロードしておく。 JavaC# JVM (Java Virtual Machine)CLR (Common Language Runtime) バイトコードMSIL (Microsoft Immediate Language) キーワードディレクティブ パッケージ名前空間 (namespace) クラスフ…

eclipse.ini の JVM パラメータを最適化してみた。

PC のメモリの空き容量が不足気味なので、一番メモリを喰っている Eclipse のヒープメモリを調整してみた。 最適化前のパラメータとヒープメモリの推移: -Xms40m -Xmx1024m -XX:MaxPermSize=256m

Java におけるリソースの読み込み方法。

既出の記事があるけど、これはいつも忘れてしまうので、メモさせていただく。 http://d.hatena.ne.jp/waman/20080504/1209861294 Java アプリケーションを実行しているディレクトリ上のリソースを読み込む場合 (引数は相対パス形式) FileInputStream(java.la…

XMLファイルの中身をPOJOのリストに変換する。

XMLファイル名が"pojos.xml"、ルート要素が"PojoRoot"という前提で、以下の様な感じで行ける。 List loadFromXml() throws Exception { Unmarshaller unmarshaller = JAXBContext.newInstance(AnyNameWillDo.class).createUnmarshaller(); JAXBElement eleme…

POJOのリストをXMLファイルに保存する。

こんな感じで行けた。 void saveToXml(List pojoList) throws Exception { Pojo[] pojos = pojoList.toArray(new Pojo[0]); Marshaller marshaller = JAXBContext.newInstance(pojos.getClass()).createMarshaller(); marshaller.marshal(new JAXBElement(ne…

クラスの拡張方法の違い。

Java だと、これで問題なく拡張できる。 public class Base { } public class Sub extends Base { } C++ の場合、以下のように書いても拡張できるようだが、親クラスと子クラスの変数に対する参照が入れ替わったりして、おかしな事になったりする。 class Ba…

ローカル変数の戻り値に対する参照の違い。

Java の場合、あるメソッド内部のローカル変数が、そのメソッドの戻り値として返されても、メソッドを呼び出した側は、受け取った変数を参照することができる。 public static String getString() { String str = "Value of local variable"; return str; } …

配列の要素数の取得方法の違い。

Java の場合はこんな感じになる。 int[] array = new int[] {1,2,3,4,5,6,7,8,9,10}; int arraySize = array.length; 一方、C++ の場合はこんな感じになるようだ。 int array[] = {1,2,3,4,5,6,7,8,9,10}; int arraySize = sizeof array / sizeof array[0]; …

構造体とクラスの違い。

Java には構造体というものはない。 Java のクラスと C++ のクラスは似ている。 ちなみに、C++ のクラスと C のクラスは別物で、そもそも概念が違うようだ。 C++ における構造体とクラスの違いは、以下のページに詳しく書かれている。 構造体とクラス その他…

前書き。

今まで仕事で Java を使うことは多かったが、C++ を使う機会は殆どなかったので、C++ に関する知識は限りなく素人である、と言い訳しておく。

HTTPプロキシやBasic認証を挟んだ wsimport のやり方。

ここに書かれている通りにやってみたが、応答が返って来なかった。 [JAX_WS-231] wsimport can't authenticate - Java.net JIRA Added support for basic authentication and proxy authentication in wsimport.For proxy authentication, set http.proxyUse…

WARファイル内にあるクラスを参照するための pom.xml の記述例。

pom.xml の dependency タグを使って、WARファイルにクラスパスを通すのは無理っぽいので、WARファイルをビルドする時、JARファイルもビルドするようにして、それにクラスパスを通すようにした。 まず、参照される側のモジュールは、plugin ノードの attachC…

Jode を使って複数の class ファイルを一括デコンパイルする。

Jode は jad.exe ではデコンパイルできなかった class ファイルをある程度デコンパイルできた。 GUI ツールの方はやや使いづらいけど、コマンド入力だと jar ファイル内の class ファイルを一括でデコンパイルできる。 デコンパイルできない場合は 0KB の ja…

DJ Java Decompiler を使って class ファイルをデコンパイルする。

結論から言うと、jad.exe と同じ結果になった。 「もしかしてこのソフトは中で jad.exe を使っているの?」と思ったら、どうやらそのようだ。 DJ Java Decompiler is a graphical decompiler and disassembler for Windows 2000/XP/2003/Vista/7 that uses J…

jad.exe を使って複数の class ファイルを一括デコンパイルする。

Eclipse 3.7.1 (Indigo) で jad.exe と JadClipse を使い、class ファイルをデコンパイルしようとしたら、エラーメッセージが表示された。 パッと見、原因が分からず、調査に時間がかかりそうなので、代わりに jad.exe を再帰的に実行することにした。 コマ…

Maven で Java アプリケーションを実行する。

こんな感じで簡単にできるんですね。 mvn exec:java -Dexec.mainClass=com.jgoodies.looks.tests.FontTest -Dexec.classpathScope="test" 勿論、pom.xml がないと失敗しますけど。 参考資料: comscom@Wiki - maven2/コマンド/exec:java(javaのmainメソッド…

スレッドダンプ解析ツール。

侍 - ログ , スレッドダンプ解析ツール TDA - Thread Dump Analyzer — Project Kenai TDA はまだ使ったことない。

Antでループ処理を行う。

久々に Ant でコードを書いてみたが、途中でループ処理の必要性を感じて、どうやって書くんだろうと少し調べた結果、 どうも標準の Ant はループ処理をサポートしていないことに気づいた。 その代わり、ant-contrib というライブラリを使えばループ処理を書…

"Waiting for JSP Index Manager"中にフリーズする。

Eclipse(Indigo) でメソッドの呼び出し元を検索していると、*.java ファイルを一通り検索した後、*.jsp ファイルを検索しに行く訳ですが、 検索中に"Waiting for JSP Index Manager"というメッセージがさり気なく表示されたまま、一向に検索処理が終わらない…

Eclipse が起動中にフリーズする。

最近、Eclipse が起動中にフリーズするようになった。 直接的な原因は、Eclipse が起動した Java プロセスによって確保されたパーマネント領域が不足していたためだった。 けれども、設定ファイル(eclipse.ini)でパーマネント領域を最大で 256MB 確保するよ…

WeakReference と ReferenceQueue

Java Programming Tips:java.lang.ref パッケージの利用方法(SoftReference/WeakReference/PhantomReference) Java弱参照メモ(Hishidama's Java Weak reference Memo) Javaの理論と実践: 弱参照でメモリー・リークを塞ぐ (作成中・・・)

Java の OutOfMemoryError 対策に関する記事とか。

以下、時系列順: 事例に学ぶWebシステム開発のワンポイント(9):メモリは足りているのに“OutOfMemory” - @IT 現場から学ぶWebアプリ開発のトラブルハック(5):OutOfMemoryエラー発生!? GCがあるのに、なぜ? (1/2) - @IT 現場から学ぶWebアプリ開発の…