java
接続先を開発環境にしたり、本番環境にしたりと変更したい場合。 javaのDオプションで環境名を渡す java -Denvironment=test sampleServer そうすると System.getProperty("environment") で環境名を取得出来るのでそれを元に接続先を切り替えれば良い。 参…
FacesContext#isValidationFailed() でわかる。 参考: http://docs.oracle.com/javaee/6/api/javax/faces/context/FacesContext.html#isValidationFailed%28%29
すごい謎な現象だった。。一部のファイルがデプロイされないことがあり、デプロイされないファイルの共通点が無いので原因がわかりにくかった。 原因は、GoogleDriveアプリが作る「Icon」という名前のファイルがresources/imgフォルダにあったこと。Iconファ…
JSFではui:repeatを使って繰り返しを表現することが多い。 以下のようにするとイベントハンドラにindexを渡せる。 <ui:repeat items="#{Hoge.items}" var="item" varStatus="stat"> <h:commnadButton action="#{Hoge.hogeAction( stat.index )}" value="押してね♪"/> </ui:repeat> 以下のようにするとイベントハンドラにオブジェクトを渡せる。
resources下にあるテキストファイルをなるべく簡単にまるっと読み込む方法。BufferedReaderとか使って1行ずつ読み込むのはだるい。。 以下のようにするとpathはresourcesからの相対パスで指定出来るし、まるっと読み込めるのでいい感じ。 String path = getC…
JavaだとXPathとかSelectorとか使えないからXMLからデータを取り出しづらい。。 XMLParserはAbstractクラスなので、DOMParserを使う。 コード例は以下。 DOMParser parser = new DOMParser(); InputStream bais = new ByteArrayInputStream(xmlString.getByt…
原因はJVMに割り当てられているメモリが足りないため。 Run/Debug Configuration > VM options に -XX:MaxPermSize=128m を追加すると直った。 参考:
原因はコードがコンパイルされないことだった。何らかのきっかけで前回コンパイル時からコードが変更されているのに、変更が検知されず 何度コンパイルしても新しいコードがコンパイルされない状態になっていた。 以下の環境で発生した。 IntelliJ、JRebel、…
ボタンをクリックした時に掲題のエラーが出た。原因はajaxリクエストと通常のPOSTリクエストを重複して送ってしまっているため。 通常のリクエストを送信するコード(onlick="this.form.submit()"とか)を削除したら直った。 参考:
原因はMyFacesのバグ。WASのJSF実装はApache MyFacesをベースにしていくらか追加実装をして実装しているっぽい。 FlashImplクラスはMyFacesのものを使っているようだが、MyFaces 2.1.8にはimmediate=trueにすると遷移先画面でFlash#getの結果がnullになって…
原因は、クラスのシグネチャが変更後にUpdate applicationを実行したため。 JVMはクラスのシグネチャが変わらない限りにおいてHot Swapできるようになっている。 クラスのシグネチャが変更後にUpdate applicationしたい場合はJRebelを使う。 でもJRebelは高…
基本的なことなんだけど、IntelliJからビルドする時はgradleでビルドしてないということを意識してなかった。。 なのでWASのfeatureを追加したら、追加したfeatureに対応するjarを取り込んでからコードをビルドするようにしてやらないといけない。 gradle cl…
上記記事でfeatureManagerからWASにインストールしたFeatureのjarをコンパイル時に取り込む方法を紹介したが、 これを使ってできたapi.jarにはFeatureのjar本体は含まれず、そのパスのみ入っている。 何も設定しないとIntelliJはパスからjar本体を読み込んで…
設定でAnnotation Processorを有効にしないとメソッド生成してくれないらしい。 Settings -> Compiler -> Annotation Processors -> Enable annotation processingにチェックをつけるとビルドできた。 参考:
原因はWEB-INF/beans.xmlが無いことだった。全く設定する必要が無い場合でも空ファイルを置かないといけないらしい。なんだそれ。。
通常Artifactはwarファイル等に固めるところ、固めずそのまま配置するという意味。 初見でどういう意味か分からなかった。。 参考: https://www.jetbrains.com/idea/help/configuring-web-application-deployment.html
両方SOAPサービスを実装するためにFWだけど、 両方にWSDLからJavaクラスを生成するwsdl2javaが含まれていて、微妙に仕様が違う。 Apache Axis2のwsdl2javaからサーバ実装のスケルトンを生成したところAxis2のクラスを継承していて使いづらかった。 CXFの方が…
既存のsourceSetのクラスへの依存関係を設定しないといけないが、そのやり方が分からなくて困った。 以下のようにclasspathを追加すると、src/main下にあるクラスをsrc/intTest下のクラスから利用できる。 sourceSets { intTest { java { compileClasspath +…
wsdl2java pluginがwsdl2javaタスクをcompileJavaタスクに依存させているせいで buildする度にjavaファイルが生成されて困る。 コマンドラインからはgradle build -x wsdl2javaのようにしてタスクを切れるけど毎回-x書くのはいやだ。。 compileJava.taskDepe…
Web SphereのドキュメントにはAntタスクを実行する〜とか書いてるけど、Ant使いたくない。。 のでGradleプラグインを探したところ、wsdl2javaプラグインがあったのでこれで生成した。 gradle-wsdl-pluginというプラグインもあったけどこっちはうまく生成でき…
そもそもXMLに順序は関係ないと思っていたが、関係ある場合もあるらしい。 XML Schemaを使うとweb.xmlなど特定の用途に使うXMLの仕様を記述できる。 web.xmlのXML Schemaは http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd で、さらにこれは↓を参照して…
インストールされているJDKのバージョン一覧を出す /usr/libexec/java_home -V 現在有効なJDKのバージョンを出す /usr/libexec/java_home JDKのバージョンを切り替える export JAVA_HOME=`/usr/libexec/java_home -v 1.7.0_45` 参考:
多分JavaEEサーバであれば何でもこれでいける。以下のようにweb.xmlに書くとHTTPで通信できなくなる。 <security-constraint> <web-resource-collection> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> 参考:
web.xmlに以下を追加すればいい。この例だと拡張子がxyzになる。 <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.xyz</url-pattern> </servlet-mapping> 拡張子なしにしようと思ってurl-patternを*にしたらうまくいかなかった。 参考:
for eachでiterateする場合、取り出されるオブジェクトの順序が保障されていない処理系もあるが、 Javaの場合はListをiterateするとindexが0のオブジェクトから順に取り出されることが保障されている。 参考:
Java8だとBase64.getEncoder().encodeToString(message);のようにすればいいが、 Java7だとDatatypeConverter.printBase64Binary(message);になる。 参考:
原因はIntelliJのビルド設定にライブラリへの依存関係が設定されていなかったため。 Project Structure > Modules でアプリモジュールを選択して、Dependencies > +ボタン > Library...からgradleでインストールしたライブラリを選択してOKをクリックすると…
NumberFormatを使用する。コード例は以下。 NumberFormat.getNumberInstance(Locale.US).parse("2,000").intValue() 参考: How to parse number string containing commas into an integer in java?
BigDecimal#stripTrailingZerosで削除できる。scaleも合わせて変更してくれる。 decimal = decimal.stripTrailingZeros(); 参考: Check if BigDecimal is integer value
Arrays.asListを使う。 List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21)); {{}}を使ってもできるらしい。こんなの初めて見た。 仕組みとしては、ArrayListを継承した匿名クラスを定義してその中でaddメソッドを呼んでいるようだ。 List<String> list = ne</string></integer></integer>…