ULogComposerクラスを用いてログを出力する場合
例
(ULogComposerを用いてログ出力を行う場合)
import java.sql.Connection; import java.util.Hashtable; import javax.naming.InitialContext; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.fujitsu.interstage.apfw.logging.ApfwLogger; import com.fujitsu.uji.ulog.ULogComposer; ・・・ public class MyApp { Log _log = null; ApfwLogger _al = null; ULogComposer _ulc = null; ・・・ public void method1() { if( _log == null ) { // ログ定義ファイルに記述したULogComposer"ULog1"のログ出力クラスを取得します _log = LogFactory.getLog("ULog1"); _al = (ApfwLogger)_log; // JNDI環境の設定 Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.fujitsu.symfoware.jdbc2.jndisp.SYMContextFactory"); env.put(Context.PROVIDER_URL,"SYM://..."); InitialContext ctx = null; DataSource ds = null; Connection connection = null; try { ctx = new InitialContext(env); ds = (DataSource)ctx.lookup("jdbc/..."); connection = ds.getConnection(); // ULogComposerを取得します _ulc = (ULogComposer)_al.getULogComposer(connection); if( _ulc != null ) { // ログを出力します _ulc.println(null,null,"someMethod start"); } else { // 高信頼ログ出力クラスのオブジェクトがnullのため、ログの出力ができません ・・・ } // 高信頼性ログの出力を終了する場合に、クローズをします if( _ulc != null ) { _ulc.close(); } // コネクションをクローズします if( connection != null ) { connection.close(); } } catch(Throwable t) { // 例外の処理をおこないます ・・・ } } } } |
Spring Frameworkが提供するAOP機能を利用して、以下の処理を業務アプリケーションから分離する事が可能になります。
JNDI環境の情報を設定する処理と高信頼性ログを出力するためのULogComposerを取得する処理をSpring Frameworkが提供するAOP機能を利用して業務アプリケーションの前処理として作成する
高信頼性ログ出力クラス、およびコネクションのクローズ処理をSpring Frameworkが提供するAOP機能を利用して業務アプリケーションの後処理として作成する
Spring FrameworkのAOP機能を利用して、高信頼性ログを利用するために必要な処理を業務アプリケーションの処理から分離する事で、業務アプリケーションはcommons-loggingのAPIで高信頼性ログを利用する事が可能になります。
ULogComposerクラスを用いてログを出力する場合(commons-logging APIとAOP機能)
例
(commons-logging API、Spring FrameworkのAOPを用いてログ出力を行う場合)
package test; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; ・・・ public class MyApp { // AOP機能のクラスからアクセス可能にします protected Log _log = null; public MyApp() { if( _log == null ) { // ログ定義ファイルに記述したULogComposer"ULog1"のログ出力クラスを取得します _log = LogFactory.getLog("ULog1"); } } public void method1() { // ログを出力します Try { _log.info("someMethod start"); } catch(Throwable t) { // 例外の処理をおこないます ・・・ ] } } |
例
(AOP機能の利用)
package test; import java.sql.Connection; import java.util.Hashtable; import javax.naming.InitialContext; import javax.sql.DataSource; import com.fujitsu.interstage.apfw.logging.ApfwLogger; import com.fujitsu.uji.ulog.ULogComposer; ・・・ public class MyAppAop { ApfwLogger _al = null; ULogComposer _ulc = null; ・・・ // サーバアプリケーションのmethod1が実行される前に動作するメソッド public void execMethod1Before() { _al = (ApfwLogger)MyApp._log; // JNDI環境の設定 Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.fujitsu.symfoware.jdbc2.jndisp.SYMContextFactory"); env.put(Context.PROVIDER_URL,"SYM://..."); InitialContext ctx = null; DataSource ds = null; Connection connection = null; try { ctx = new InitialContext(env); ds = (DataSource)ctx.lookup("jdbc/..."); connection = ds.getConnection(); // ULogComposerを取得します _ulc = (ULogComposer)_al.getULogComposer(connection); } catch(Throwable t) { // 例外の処理をおこないます ・・・ } } // サーバアプリケーションのmethod1が実行された後に動作するメソッド public void execMethod1After() { try { // 高信頼性ログの出力を終了する場合に、クローズをします if( _ulc != null ) { _ulc.close(); } // コネクションをクローズします if( connection != null ) { connection.close(); } } catch(Throwable t) { // 例外の処理をおこないます ・・・ } } |
注意
Spring FrameworkのBean定義ファイルのインスタンス生成方式にはsingletonを指定しないでください
例
(アプリケーションとAOP機能)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <aop:config> <aop:aspect id="ct001_asp" ref="MyAppAop"> <aop:pointcut id="pointcut" expression="execution(* method1())"/> <aop:before pointcut-ref="pointcut" method="execMethod1Before"/> <aop:after pointcut-ref="pointcut" method="execMethod1After"/> </aop:aspect> </aop:config> <bean id="MyAppAop" class="test.MyAppAop"/> <bean id="MyApp" class="test.MyApp"/> </beans> |