Java

java.net.URL#openStream()はclient timeoutしない

JavaのSocket周りでは割とよくある感じですが、以下のコードだとconnectもreadもデフォルトで無限に待ち続ける挙動をします。 BufferedImage image = ImageIO.read(new URL(url).openStream()); Javadocをみると以下の通り。 Opens a connection to this URL…

StringBuffer or StringBuilder?

StringBuilderがStringBufferよりどれほど高速か、実際に少しパフォーマンス比較をしてみました。 useStringBuffer : 141 milsec. useStringBuilder : 125 milsec. useStringBuffer : 156 milsec. useStringBuilder : 125 milsec. useStringBuffer : 141 mil…

SJIS環境からのクエリ文字列に対するURLDecoderでの文字化け

モバイルなどのShift_JIS環境から投げられたGETパラメータのクエリをjava.net.URLDecoder.decode(String, String)でdecodeしようとすると文字化けしてしまう場合があります。これはURLDecoder.decodeにバグがあるというわけではなく、URLEncoder.encodeでenc…

List型からのtoArray

以下のようにjava.util.List#toArray()では、引数に配列型のインスタンスを渡して配列の型を確定します。 List<SampleBean> list = new ArrayList<SampleBean>(); SampleBean[] res = list.toArray(new SampleBean[0]); 引数で空インスタンスを渡さないと、Object[]として返すのでCla</samplebean></samplebean>…

リリース前に単体テスト全実行

PerlのCPANモジュールはインストール時にmake testで単体テストを全実行しますが、Javaで単体テストを全実行したいという場合、antのタスクを作って組み込みます。説明を付したタスクのサンプルが以下のような感じになります。 <target name="maketest"> <delete dir="test" failonerror="false" /> <mkdir dir="test/classes" /> <mkdir dir="test/result" /> </mkdir></mkdir></delete></target>

抽象メソッドの引数名

例えばライブラリをつくってjarにして配布した場合、Eclipse等のIDE上でinterface型オブジェクトのメソッド補完するときに引数の変数名がjava.lang.Stringなら「s」とかjava.lang.Objectなら「obj」とかになってしまうのをどうににかできないかなと少し調べ…

RomeでRSSフィードをパース

初めて使ったのですが、Romeはフォーマットを意識する必要もなく簡単にRSSフィードのパースができて素晴らしいですね。 import java.net.URL; import java.util.List; import org.xml.sax.InputSource; import com.sun.syndication.feed.synd.SyndEntry; imp…

読み込んだリソースを必要十分な配列長にする

リソース上のファイルからbyte配列でデータを取得する場合にデータを必要十分な配列長に格納する実装を書いてみました。 private byte[] _getFileContentInByteArray(InputStream is, byte[] registeredArr, int bufArrLen, int depth) throws IOException {…

ArrayListの全要素取得パフォーマンス比較

java.util.List型(ArrayListでインスタンス化)コレクションを全要素取得するような処理の以下の3つについてパフォーマンスを比較してみました。 get(index)でアクセス Iteratorを取得して使用 拡張for文 なお、比較には拙作のツールを使用しました。http:/…

Arrays.asListの使いどころ

Arrays.asList()は、配列*1を引数にとって固定長のjava.util.List型のオブジェクトを生成するメソッドです。このstaticメソッドが返すオブジェクトはjava.util.Arrays$ArrayListクラスでインスタンス化され、内部的にはListの型パラメータで指定した型(なけ…

マルチスレッドにおけるMapオブジェクト

身近でjava.util.HashMapのインスタンスがスレッドセーフでない事に起因したトラブルの話があったので、実際にサンプルを作って試してみました。まず各スレッドで動作するRunnableなworkerクラス。 import java.util.Map; public class Worker implements Ru…

Matcher#appendReplacement()の問題

経験豊富なJava屋さんの中では常識なのかもしれませんが、、String#replaceAll(String, String)またはString#replaceFirst(String, String)で第二引数の置換文字列(replacement)に$を含めると以下の2パターンの例外が発生します。 public class Replacemen…

GAE for Javaにsa-strutsアプリ→slim3-strutsアプリをデプロイ

以下のエントリを参考にさせていただいて、特にはまるところもなくデプロイまで確認できました。http://googleappengine.seesaa.net/article/117110106.htmlといっても、まだブランクのままなのでこれからつくっていきます。 追記(4/12)sa-strutsと書いて…

Jadを探し回った

GAE用に新しくGanymedeを入れたので、JadclipseのインストールでJadを探していたら、本家のサイトが死んでいるのですんなり入手できず、ここにあたるまで見つけられませんでした。http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=48514&forum=12&3…

GAE for Javaで環境構築からデプロイまで

とりあえず昨日サインアップだけはやったのですが、今日はデプロイまでの手順を確認しました。 といっても非常に簡単です。基本的にはここに書いてあることをやるだけです。http://code.google.com/intl/ja/eclipse/docs/getting_started.html 以下は私がや…

GAE for Javaとりあえずサインアップした

Google App Engine for Javaがテスト運用を開始したということで、とりあえずサインアップをしておきました。何か作ってみたいと思ってます。ファイルシステムへのアクセス禁止ということで、どういうアプリをデプロイするか考えないといけませんね。

PreferencePageのパスワードマスク

どこ見たらいいかなという感じだったのですが、Googleコード検索で以下のライブラリがヒットしました。http://www.google.co.jp/codesearch/p?hl=ja#huR6Kv39C40/trunk/plugin/src/org/hackystat/sensor/eclipse/preference/SensorPreferencePage.java&q=ecl…

復元したSerializableなオブジェクト

外部ファイルに出力したSerializableなオブジェクトをデシリアライズして得たオブジェクトについて少し試してみました。 package net.seratch.sample.serializable; import java.io.Serializable; public class Weblog implements Serializable { private st…

Java Quick Starter(JQS)でFirefoxパフォーマンス悪化&Firebugのresume動作不正

「なんか急にFirefoxの動作が鈍くなったな」と思っていたところ、いつの間にかJava Quick Starterなるアドオンが勝手にインストールされている事に気づきました。そういえば、さっきJREの自動アップデートを受け入れたのでした。そのタイミングでアドオンも…

文字列比較でstr.equals()を使う理由の説明テンプレート

「==」でマッチするのは参照先が同じ参照(ポインタ)の場合のみ。まれに「==」で比較ができてしまう場合があるのは、文字列リテラルで同じ値の場合には同じ実体をみる参照となるためであり、リテラルでない場合は文字列として同じ値であっても実体は別物で…

Constructorオブジェクトを使ってみる

commons-loggingのソース解析を読んでいて興味がわいたので、Constructorオブジェクトを使ったインスタンス生成を試しました。内部クラスで試してみたら例外発生。デバッグ実行してみるとparameterTypesの配列長が1になっています。 内部クラスの時はnewInst…

Apache連携でAjax4JSFが無効化される事象

現場での事象で詳細なログなど手元にないので説明中心の記事になってしまいますが、SeamアプリをJBoss ASにデプロイ、起動してポート8080から直接アクセスすると正常に動作していたA4Jが、Apache連携してApache経由でアクセスしたところ、まったく動作しなく…

super呼び出し

2chのJavaのスレ読んでて、「superキーワード、クラスメソッドで使えないのなんで?」っていう話題が。 302 :デフォルトの名無しさん :sage :2008/10/25(土) 20:38:46 クラスメソッドの中でthisキーワードを使えないは理解できるんですが、superまで使え…

クラス名やメソッド名に日本語を使えるの知らなかった

素でミスして全角の混じったメソッドをcommitしてた酔狂なメンバーがいて、それがコンパイルエラーにならない事から初めて知りました。きっと私が今まで知らなかっただけで、有名な話なのだとは思うのですが、面白いですね。 package cx.ath.seratch; public…

反面教師

もし以下のようなコードを書いてしまうと、#{exA.doSomething()}を呼んでも全く意味がなくなってしまいます。 @Stateless @Name("exA") public class ExampleABean implements ExampleA { @In @Out private ExampleEntity exEntity; @In private ExampleB ex…

Seamからのインジェクション

追記(6/25):この記事は理解不足なまま書かれたものですので、参考にしないで下さい。 前にMVCをきっちり分けたフレームワークを作って開発していくつもり、みたいな事を書いたのですが、実際に検討していくうちにキレイに分けていくのはなかなか難しいな…

JSF1.2以降ってinput buttonサポートしてないのか

表題の通りなのですが、具体的には <h:commandButton type="button" value="hogehoge">みたいに書いても、変換されたHTMLをみるとバッチリsubmit化しているよ、というような事です。 ネット上での話題が少ないJSFにあって結構有名なトピックのようで「JSF input button」あたりでググると英語で普通にいろいろ</h:commandbutton>…

(削除済)

追記(6/25):この記事は理解不足なまま書かれたものですので、参考にしないで下さい。 追記(2009/6/6):今になって読み返すとあまりにも理解していないまま書いている文章で、これがウェブ上に残り続けるのは恥ずかしすぎるので、、、削除させて下さい。…

deploy時の***-ds.xmlの配置

EJB3連携のSeamウェブプロジェクトをつくって、IDE上からJBoss ASにdeployするときに***-ds.xmlが管理されていません。そのままASを起動してもEntityManagerFactoryが読めない的エラーになってdeployは失敗してしまいます。ds.xmlを右クリック→「Deploy To S…

JBoss Toolsのインストーラ

「Seamはじめました」と書いたところ、早速コメントをいただいてJBoss Toolsのインストーラを自宅の開発PCに入れてみました。これで家でもサクサクやれそうです。しかし、all-in-oneで入れられるインストーラって便利ですね。 http://journal.mycom.co.jp/co…