中年プログラマーの息抜き

ブログをはじめました。気の向くままにプログラム関連ネタをメモしていきます。

log4j2の設定

はじめに

・LOG4J1.2からLOG4J2へ変更しました。

JARライブラリを差替

・削除:log4j-1.2.17.jar
・追加:log4j-core-2.6.2.jar、log4j-api-2.6.2.jar、log4j-1.2-api-2.6.2.jar

         <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-1.2-api -->
         <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-1.2-api</artifactId>
              <version>2.6.2</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
         <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-core</artifactId>
              <version>2.6.2</version>
         </dependency>
         <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
         <dependency>
              <groupId>org.apache.logging.log4j</groupId>
              <artifactId>log4j-api</artifactId>
              <version>2.6.2</version>
         </dependency>

LOG4Jの設定(前の設定:log4j.xml

LOG4J2の設定(今の設定:log4j2.xml

NOTE

MYBATIS(mybatis-config.xml)などもLOG4Jで設定していたため、今回は「log4j-1.2-api」も読み込むようにして、他へ影響しないようなところまでを作業しました。 使い心地はどんなでしょうね、これから観察してみます!

TOMCAT起動時エラー調査 : Unknow type constant pool

はじめに

TOMCAT起動時にエラーが出ていたので調べました。

環境

・JAVA8+TOMCAT8.5、JSF2.2、spring4.3

現象

TOMCAT起動時のエラー:
com.sun.faces.config.JavaClassScanningAnnotationScanner$ConstantPoolInfo containsAnnotation 重大: Unknow type constant pool 18 at position 35
com.sun.faces.config.JavaClassScanningAnnotationScanner$ConstantPoolInfo containsAnnotation 重大: Unknow type constant pool 0 at position 36
com.sun.faces.config.JavaClassScanningAnnotationScanner$ConstantPoolInfo containsAnnotation 重大: Unknow type constant pool 0 at position 37
com.sun.faces.config.JavaClassScanningAnnotationScanner$ConstantPoolInfo containsAnnotation 重大: Unknow type constant pool 0 at position 38
com.sun.faces.config.JavaClassScanningAnnotationScanner$ConstantPoolInfo containsAnnotation 重大: Unknow type constant pool 32 at position 39
com.sun.faces.config.JavaClassScanningAnnotationScanner$ConstantPoolInfo containsAnnotation 重大: Unknow type constant pool 18 at position 79
com.sun.faces.config.JavaClassScanningAnnotationScanner$ConstantPoolInfo containsAnnotation 重大: Unknow type constant pool 0 at position 80

説明

調査したところJSF2.2+JAVA8のラムダ実装を利用しているとこのエラーが出るようです。JSF 2以降はアノテーションによって環境設定ファイルを書かなくてよくなりました、そのアノテーションがついたファイルを探し出す過程では、全CLASSをスキャンしているようで、その実装でラムダが利用されているとまずいみたいでした。

解決

このエラーが出ても動作事態は問題なさそうなことと、    そもそも今回のシステムでは、フロント(FILLTER、HTMLなど)でJSF、コントローラー(CONTROLLER、VIEWMODELなど)をSPRING、データ(MODELなど)をMYBATIS、ざっくりでこんな構成なため、JSFの環境設定ではアノテーションを利用していないはず・・    ということで、スキャン対象を限定して対応するとエラーが出なくなりました。・・・無効にして試したかったけど、よくわかりません、どうやるんでしょうね。

web.xml:com.sun.faces.annotationScanPackages
Mojarra 2.0.0 Release Notes -- What’s New

JSFでエラー項目の背景色を変える

はじめに

・今回はJSFで「エラー項目の背景色を変更」してみます。

方法

・PhaseListener(RENDER_RESPONSE)でstyleClass(has-error)を操作ます。

説明

レンダリング直前にCONTEXTを編集

XHTMLでstyleClassを定義
    <input type="text" jsf:styleClass="form-control" />

cssへエラー時の背景色を設定
    .form-control.has-error {
          background-color:#f2dede !important;
    }
    .form-control.has-error:-webkit-autofill {
          -webkit-box-shadow: 0 0 0px 1000px #f2dede inset;
    }

まとめ

・component.clientIdを利用した処理+XHTMLの全コントロールへ設定というほうが柔軟なのかもしれませんが、HTMLで意識して実装しなくてはなりません、 単純なコントロールは今回の方法で十分に機能します。 このためだけにlistener定義するのは、少し大げさなのかもしれませんけど、RENDER_RESPONSEは、他の処理もするので少しコードが増えるだけですよね・・・OK