Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Java

Default ClassLoader configuration in several Application Servers

Java application uses ClassLoaders in parent-first mode. On the other hand, some JavaEE Application Servers are not parent-first mode in default, and/or have preferences to configure ClassLoader behavior. # Application Server Default mode …

How to see an AOP pointcut matches to a method signature

Situation You are developing an Java application with Spring Framework. You are trying to write an AOP pointcut to weave some logic into a method invocation, but the weaved logic doesn't seems be running. Problem Mistakes are sometimes in …

A List of What Cannot JCache do

JCache cannot save the order of insertion. You should use LinkedHashMap for that purposes. JCache cannot update whole entries in a cache atomically. You should use AtomicReference or some locking mechanisms for that purpose. (Ofcourse you …

How to join nested collections with Stream API

For example, in PushOperation.java in EGit, PushOperationSpecification contains LinkedHashMap<URIish, Collection<RemoteRefUpdate>>. So you can join all remote name with Stream API like: String specs = this.specification.getURIs().stream() .map(uri -> this.specification.getRe</uriish,>…

You cannot wrap checked exceptions with lambda in Java

Context You can use lambda as lazy evaluation syntax in Java. Problem You can wrap RuntimeException with lambda like (it shows "omit exception"): import java.util.function.Supplier; public class OmitRuntimeException { public static void ma…

What does "US-ASCII only" means in Java regexp?

Java Patten class (regexp) supports POSIX character classes like \p{XDigit}. They are very useful when you want to check hex strings. In Java API Document, POSIX character classes say (US-ASCII only). What does it mean? https://docs.oracle…

Trimmed characters by trim() are different between languages

String object in .NET (PowerShell), JavaScript, and Java all have trim() method. But trimmed characters by trim() are different between these languages. # codepoint .NET JavaScript Java 1 0000-0008 ✘ ✘ ✔ 2 0009-000D ✔ ✔ ✔ 3 000E-001F ✘ ✘ ✔…

Delombok removes super(); in default constructors

Context: You have a class that has one or more constructors other than default constructor, so you have to define the default constructor explicitly. You use Lombok to generate some methods/fields. You use static code analyzers that warn e…

Javadocの{@value}タグで日本語が表示できない

Javadocには、static finalな定数のJavadocコメントに「{@value}」という内容を含めると、そこを定数の値で置き換えるという機能がある。 例えば、下記のようなコメントの場合Javadocには「ファイル名 ("AIUEO")」と表示される。 /** ファイル名 ({@value}) …

Eclipse 3.3 (Europa) で行番号を付けて印刷

Eclipse 3.4 ではできるが、Eclipse 3.3 では行番号を付けた印刷ができない。 前述の設定を行っても、エディタのビューに行番号が表示されるだけで、印刷結果には行番号が含まれない。

Eclipse 3.4 (Ganymede) で行番号を付けて印刷

以下の設定を行うとエディタのビューに行番号が表示される。 [設定]-[一般]-[エディター]-[テキスト・エディター]-[行番号の表示]この状態で印刷を行えば、印刷結果にも行番号が含まれるようになる。 (Eclipse 3.4 のリリースノートに記述がありそうだが、…

再帰構造を扱うTailib

Struts(1.x系列)付属のTaglibには、再帰構造を扱えるものがない。再帰的なデータ構造を使う代わりに、平坦なデータ構造でまかなえないか検討すること。 あるいは、再起構造を扱うTaglibを作成すること。

Struts の ActionForm では2文字目が大文字の変数名を使えない

Struts では、内部で使っている Jakarta BeanUtils の制限で、ActionForm に2文字目が大文字の変数名(例えば「xPos」「yPos」とか)を使えない。 これは JavaBeans の仕様 *1 が原因。 まず、先頭から2文字が大文字の変数名では、UpperCamelCase lowerCamel…

デフォルトエンコーディング

Java VM 実行時のデフォルトエンコーディングは OS および実行時の locale によって決定される *1。 ……とあるが、どの OS でどの locale だったらどのエンコーディングになるかは規定されていない模様。 *1:http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs…

例外の区分

Java における「例外」と呼ばれるモノには、言語レベルで次のような区分が設けられている。 チェック例外 java.lang.Exception を継承し java.lang.RuntimeException を継承していない例外。 メソッド単位で言えば、引数に関係なく発生しうる例外が多い(気…

Swing アプリケーションで TrueType フォントを使う

Unix は本当にフォントの設定やら何やらこんがらがってますね…… orz

Tomcat 5.5 における Logger の話

Tomcat 5.0 系列以前では、HttpServlet#log (GenericServlet#log) 等によるログ取りを有効にするためには、それを呼んだときのログの出力先を指定しなければならなかった。で、その指定には Administration Tool を使っていた。 Tomcat 5.5 では、次のような…

JSP/Servlet on Tomcat でアプリケーション作成

最もてこずったのは MySQL とそれを参照するための Tomcat の設定だった。それさえできてしまえば、アプリケーション自体はどうということはない。

SQLite の JDBC ドライバ

http://www.ch-werner.de/javasqlite/ なんだけど、./configure; make; su -c "make install" としたまではいいけれど肝心のテストが通らない。 $ echo $CLASSPATH /opt/SUNWappserver/jdk/lib/tools.jar:/opt/SUNWappserver/jdk/lib/mysql-connector-java-3…

Servlet から JSP へ Dispatch しようとするとまっ白な画面になる

Servlet から JSP へ Dispatch している ブラウザの画面まっ白(ソースを見ても空) ロケーションバーの URL は Servlet のそれ という場合、Tomcat のログ (localhost_log.yyyy-mm-dd.txt) をチェック。次のような内容があって、タグの整合に間違いが見当た…

腐れ正規表現

String#matches(String regex) では、単純な部分文字列のマッチングができない。Perl を使っていた身としては窮屈で仕方がない。 以下のコードでは "ONLY WITH .*" が出力される。 public class Hoge { public static void main(String[] args) { if (("FooB…

web.xml, filter-mapping, url-pattern

Tomcat で使う web.xml の の子要素 には glob しか指定できないみたい。regex が指定できればなぁ……

パラメタ付き SQL(動的 SQL)でエラー

パラメタを含む SQL 文から PreparedStatement オブジェクトを得て、その SQL 文を実行しようとするとエラーが出る場合。次のようなエラーメッセージが特徴的。 java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0…

Tomcat の「配備解除」

Tomcat の Web Application Manager であるアプリケーションを「配備解除」すると、そのアプリケーションのコンテキストに割り当てられたデータソースやデータリンクの情報は消去されてしまう。ログファイルに次のようなメッセージが残るのが特徴的。 javax.…

データベース接続プールの枯渇

データベースへの接続プールを利用する Servlet (or JSP) がエラーを起こし、ログに次のようなエラーが残っていた場合。 javax.servlet.ServletException: Cannot get a connection, pool exhaustedデータベースへの接続が明示的に開放 (close?) されておら…

Tomcat と日本語処理

ハマりにハマった。結局次のページが参考になった: http://www.javadrive.jp/servlet/japan/index1.html . あと、HttpServletRequest#setCharacterEncoding() に対して request.setCharacterEncoding("Shift_JIS");としても効果がないらしいことを確認した。…

Tomcat Web Application Manager の UI はアホみたいである点について

Web browser が、Web Application Manager のページを reload する際の処理がアホだ。 Web Application Manager を開く /hoge を配備解除 Tomcat 停止 ant か何かで /hoge に application を deploy Tomcat 再起動 Web Application Manager を再読み込みする…

Tomcat で Administration Tools を配備解除 (Undeploy) してしまった

Tomcat Web アプリケーション マネージャで、間違えて /admin の「配備解除」をクリックすると、有無を言わさず本当に配備解除されてしまう。どう考えても UI に問題があるよなぁ……。 この「配備解除」は ${CATALINA_HOME}/conf/Catalina/localhost 以下の .…

ant と assertion

assertion 機能を使う場合、次のように javac にオプションを渡してコンパイルをする必要がある。 $ javac -source 1.4 Hoge.javaこれを ant でやるには、javac 要素の属性を、例えば次のように指定する。 <javac srcdir="src" destdir="classes" source="1.4">指定してなかった場合のエラーメッセージは、例えば</javac>…

J2EE インストール (Debian GNU/Linux)

j2eesdk-1_4_2004Q4-beta-linux.bin を Sun の J2EE のページから持ってくる su する 持ってきたファイルを /usr/local にコピー chmod 755 j2eesdk-1_4_2004Q4-beta-linux.bin ./j2eesdk-1_4_2004Q4-beta-linux.bin 適当に質問に答える サンプルもインスト…