Java

文字列結合の+演算子(2)

文字列結合の+演算子(1)のつづきです。 会社で識者の方にいろいろ話を聞いてみたところ、javacによる+演算子最適化の真骨頂は、リテラルの自動結合なんだそうです (下記参照)。逆に言えば、リテラルでない要素が含まれている場合は、あんまり嬉しくない状況…

文字列結合の+演算子 (1)

StringBuffer sql = new StringBuffer(); sql.append("SELECT"); sql.append(" hoge1, hoge2, hoge3, hoge4"); sql.append("FROM"); sql.append(" foo AS a"); sql.append("LEFT OUTER JOIN bar AS b"); sql.append("ON a.hoge1 = b.fuga1"); ... // 以下、…

Tomcat 5.5 で session persistence (using JDBCStore)

tomcat5.5において、セッション情報をRDBMS(PostgreSQL)に格納するということがしたくて休みの間ゴソゴソ試してました。負荷分散したいけど stickysession が使えないという状況下、クラスタ機能を使わずとも、セッションの格納場所をDBに一元化することでど…

java.awt.Fontとか

画像に文字を書き込みたいだけだったのだけど、X上がってないとコンストラクタでこけちゃって使えないのな。いつも使ってたSolarisサーバは常にX上がってる設定になってたようで、お陰で今まで気が付かなかった。最小構成畏れ。まあWindowsなら全然関係ない…

強引にコネクションタイムアウトさせる方法

タイマー監視してる別スレッドから、目的のスレッドに対して Thread.interrupt。タイムアウト設定の無い、古い版のJNDI LDAPサービスプロバイダでも、これで無理やりコネクションタイムアウトさせることができた。C言語でいうところの、signal(SIGALRM,hoge)…

launch4j (2)

Executable JARから実行ファイル作ってふんふ〜ん♪と試験してたら、外だししてるpropertiesファイルの読み込みがうまくいってないことが判明。JARの中(つまりEXEの中)に埋め込んであるリソースは大丈夫なのに。おかしいなあ、カレントディレクトリもEXEの…

launch4j

JavaアプリのEXEラッパー生成ツールをいろいろ試してみたけれど、自分にとって一番感触良かったのはこれ。"JRE"タブの"Env.JRE.path"項目に "jre" と書いておいて実行ファイル作ると、EXE同一ディレクトリに "jre" ディレクトリを検出したときはその中のjava…

JEXL 1.1

http://jakarta.apache.org/commons/jexl/ 式言語のJEXL、新しい版がいつの間にかリリースされていた。 いくつかのバグ修正に、if文やwhile文などが追加された模様。

java.util.String#split

1.4で新設されたメソッド。便利な分解メソッドだ。しかし、こいつの挙動にはまった人が結構いる模様。まあ自分もOROとjava.util.regexとで実装切り替えられるWrapper作ったときに、メソッドの互換性試験してて、はじめて気が付いたんだけどさ。 問題となるの…

ORO

Perl5Util は何故か気に食わないので、1.4のjava.util.regex に近いI/Fの使い方をば。 code import java.util.*; import org.apache.oro.text.regex.*; public class Test { public static void main(String[] args) throws Exception { Perl5Compiler compi…

JCE / Java1.3

JCEのjarファイル群をjre/lib/extディレクトリに配置した上で、セキュリティプロパティ java.security に security.provider.3=com.sun.crypto.provider.SunJCEなんてエントリを追加するのが正道だが、jre添付のファイルを変更するのが憚られる場合は、class…

名前解決

java.net.InetAddress のstaticメソッドを使う方法が手っ取り早い。しかしこの方法では、タイムアウト時間やリトライ回数、キャッシュや取ってくるレコード種別など、細かい制御をかけることができない。いやシステムプロパティである程度制御をかけられるな…

OGNL / JEXL

OGNL: http://www.ognl.org/ ( syntax ) JEXL: http://jakarta.apache.org/commons/jexl/ ( syntax ) 書いておかないとすぐ忘れるのでメモ。 Wrapperこさえる場合には、OGNLには context の変数マップだけじゃなく、root objectという概念もあるので、そこら…

SSLSocket: 任意PATHのストアファイルの使用

デフォルトキーストアのPATHは ${JAVA_HOME}/jre/lib/security/cacerts であるが、これは当然同じPATHのVM上で動く他のプログラムと共有することになる。プライベートVMを用意できる環境ならば問題はないが、他の会社の作ったモジュールも同一VMで動かさなけ…

SSLSocket: 任意PATHのストアファイルの使用(2)

例外がなんか気になったので、デフォルトキーストアから エイリアス を抹殺した後、SSLContext#init の引数を全部nullに書き換えて実験プログラムを実行してみた。発生した例外は以下のとおり。 Exception in thread "main" javax.net.ssl.SSLHandshakeExcep…

aopalliance

Javadoc: http://aopalliance.sourceforge.net/doc/index.html CVS: http://aopalliance.cvs.sourceforge.net/aopalliance/aopalliance/src/main/org/aopalliance/ なんか見てると、FieldInterceptorとか、配布されてる1.0版のaopalliance.jarには入ってない…

Javassist: ClassPoolの親子関係とgetAndRename

package aop; import javassist.*; public class Javassist { public static void main(String[] args) throws Exception { ClassPool parent = new ClassPool(true); ClassPool child = new ClassPool(parent); getAndRename(child, "hoge1"); getAndRename…

Javassist: ClassPoolの親子関係とgetAndRename (2)

Javassistのソースを追っていったら、CtClassの取得まではうまく動作していたことが判明。問題(?)はCtClassを取得した後、所属ClassPoolの変更、およびクラス名の変更を行っている箇所にあった。 ... public CtClass getAndRename(String orgName, String…

Javassist

package aop; import java.util.*; import java.lang.reflect.*; import javassist.*; public class TestJavassist { public static void main(String[] args) throws Exception { ClassLoader usingClassLoader = Thread.currentThread().getContextClassLo…

java.lang.reflect.Proxy

恥ずかしながら使い方を把握していなかった。 import java.util.*; import java.lang.reflect.*; public class TestProxy { public static void main(String[] args) throws Exception { TreeSet set = new TreeSet(); Set proxySet = (Set)Proxy.newProxyIn…

keytool -genkey 叩き台

X500Nameとか見てたら、公開パッケージのみに作り直すの面倒くさくなってきた。。。 つーわけでKeyToolクラスからパクってきて少しいじった下記の非公開パッケージ使用版コードを、一昨日作ったKeyStoreWrapperに組み込む方向で。 import java.io.*; import …

Tomcat5.5 with オレオレ証明書

1. keytool コマンドを使い、鍵を生成 keytoolコマンドは javac とかと同じディレクトリ (${JAVA_HOME}/bin/) に転がっているはず。 > keytool -genkey -alias tomcat -storepass changeit 姓名を入力してください。 [Unknown]: www.oreore.com 組織単位名を…

証明書無視のHTTPSクライアント 1.3 & JSSE

import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import com.sun.net.ssl.Hos…

keyStoreファイルをプログラムから操作

keytoolコマンドの説明をつらつらと読んでいたら、このコマンドによって行える操作は java.security.KeyStore クラスを叩く事によって実現されているようなことが書いてあった。ほへ〜、すると、Runtime.exec とかみっともない事しなくてもプログラムからキ…

Javaプログラムにとって、証明書がインストールされた(信頼済みの)状態にする方法

ブラウザならGUI操作で簡単にインストールできるが、Javaのプログラムの場合はどうするか。Javaプログラム(というかJavaのSSL通信クラス)は、SSL通信の際、下記のPATHにあるキーストアファイルを参照し、受信したサーバ証明書がストアに登録されているエン…

BSFのJavaEngine

引数BSFManagerひとつ(引数名bsf)のメソッドの中身として、入力式の文字列をテンプレート置換 *.javaソースファイル生成 javacコマンドダイレクトコールで *.classファイル生成 ClassLoader.loadClass でload JavaEngineのソースのヘッダ部分にも書いてあ…

Eclipse 3.2 RC2

http://download.eclipse.org/eclipse/downloads/drops/S-3.2RC2-200604281315/index.php リリースされた模様。もうRC2まで行ってるのね。さっそくダウソ中。 いちおうは汎用IDEなのでJavaっていうくくりはどうかと思ったけれど、Java以外の用途で使ってる人…

HttpURLConnection

id:argius:20060427:1146162186悩んでいたのは自分だけじゃなかったのだと安堵しました。代替実装のご紹介ありがとうございます。実は使用するURLConnectionの実装クラスを挿げ替える方法は分かっていたのですが、その実装クラスの作成が面倒ではないかと思…

HttpURLConnection

Javaには java.net.HttpURLConnection というHTTPクライアントのクラスが存在します。しかし、こやつがどうにも込み入った使い方をするには使いづらいのであります。単純にGETしたりPOSTしたりするだけなら問題ないんですが。自分が気になっている点は以下の…

PostgreSQL JDBCドライバの問題

たまには技術系っぽいことでも。 PostgreSQLのJDBCドライバでResultSet#getObjectメソッドを呼ぶと、たまにPGobjectそのものが返却され、目的の型(StringだとかTimestamp)にキャストしようとして失敗、ClassCastExceptionが発生する事があります。これはPost…