ミランコビッチ (プログラマー)のブログ

プログラムのこととか適当に

JSF2とCDIでAOP(Interceptor)

■JSF2(Mojarra)で管理ビーンをCDIにしている時にAOP(Interceptor)してみたヽ(=´▽`=)ノ

参考にしたのはココココです。(人-)謝謝(-人)謝謝

 

まずはアノテーション。良く分からないのでオマジナイとして名前(MyInterceptorLog)以外全コピーw

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.interceptor.InterceptorBinding;

@Inherited
@InterceptorBinding
@Target({TYPE, METHOD})
@Retention(RUNTIME)
public @interface MyInterceptorLog {
}

 

次にインターセプターの実装クラス。

SerializableしているのはSessionScopedで使うため。

import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;

@MyInterceptorLog @Interceptor
public class LoggingInterceptor implements Serializable {
    private static final Logger LOG = Logger.getLogger(YamchaLoggingInterceptor.class.getName());

    @AroundInvoke
    public Object methodLog(InvocationContext ic) throws Exception {
        LOG.log(Level.INFO, "[start]" + ic.getTarget().getClass().getSimpleName()+ "#" + ic.getMethod().getName());
        try {
            return ic.proceed();
        } finally {
            LOG.log(Level.INFO, "[end  ]" + ic.getTarget().getClass().getSimpleName() + "#" + ic.getMethod().getName());
        }
    }
}

 

 beans.xmlにインターセプタークラス「<interceptors>」の登録

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
 
    <interceptors>
        <class>packege.LoggingInterceptor</class>
    </interceptors>
 
</beans>

 

 管理ビーンにアノテーションを追加

import java.io.Serializable;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import packege.MyInterceptorLog;
 
@SessionScoped
@MyInterceptorLog
@Named(value="b01")
public class B01 implements Serializable{
}

 

実行結果

情報: [start]B01$Proxy$_$$_WeldSubclass#getUserId
情報: [end  ]B01$Proxy$_$$_WeldSubclass#getUserId
情報: [start]B01$Proxy$_$$_WeldSubclass#getUserPw
情報: [end  ]B01$Proxy$_$$_WeldSubclass#getUserPw
情報: [start]B01$Proxy$_$$_WeldSubclass#setUserId
情報: [end  ]B01$Proxy$_$$_WeldSubclass#setUserId
情報: [start]B01$Proxy$_$$_WeldSubclass#setUserPw
情報: [end  ]B01$Proxy$_$$_WeldSubclass#setUserPw
情報: [start]B01$Proxy$_$$_WeldSubclass#aaa
情報: [end  ]B01$Proxy$_$$_WeldSubclass#aaa
情報: [start]B01$Proxy$_$$_WeldSubclass#getUserId
情報: [end  ]B01$Proxy$_$$_WeldSubclass#getUserId
情報: [start]B01$Proxy$_$$_WeldSubclass#getUserPw
情報: [end  ]B01$Proxy$_$$_WeldSubclass#getUserPw

 

 実際のJSFからのメソッドは「aaa」しか呼んでなく、要らないgetter/setterも出ているけど、ちゃんと出たーワーイ!!\(o ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄▽ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄o)/ワーイ!!

 

HTML5でテーブルレイアウトの代案

テーブルレイアウトがダメって良くいわれるけど、

んじゃ、どうすれば良いのか良く分からなかったのでメモ。( ̄ヘ ̄;)ウーン

 

画面全体を3カラムレイアウトにするなどは兎も角、簡単なアンケートなどのお"名前"、"住所"、"電話番号"などを揃えて入力欄を表示したい時などは、どうすれば良いのか分からなかったんだけど、ココにTemplate Layout Moduleを使えばCSSだけで行けるよ!凄い!(ノ゚ο゚)ノ オオオオォォォォォォ-

でも、どのブラウザでも未実装らしいヽ(*゚ω。)ノドテッ!!

 

なので、ココにlabelをdisplayでblockにして、width指定とfloatで回すやり方が書いてあった。

style="display:block ;width: 150px ;float: left;"

あとは<br style="clear: left;" />で解除する。

でけた。ワーイ!!\(o ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄▽ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄o)/ワーイ!!

高さ調整はもうチョット勉強しよう。位置指定はチョットなー

テーブルレイアウトの代案ってなんてキーワードで検索して良いかわからん。( ̄ー ̄?)

具体的な記述が無いものばっかりだ。orz

CSSレイアウト?」

 

Google Directions APIで嵌ったのでメモ

Google Directions API

リクエストパラメータを作成する時に「jp」と「ja」を正しく設定しなかったので反映されなかった。(; ̄Д ̄)あーー

&region=jp
&language=ja

 

それとavoidを両方設定する時の指定のしかたは「,」じゃなくて「|」だった。Σ( ̄ε ̄;|||・・・

&avoid=tolls|highways

 

 

 

 

 

 

PrimeFacesを使ってみる

■JFS2のコンポーネント

PrimeFacesを使ってみる。これも凄いな☆⌒d(*^ー゚)b グッ!!

PickListのEffectに笑った。柱| ̄m ̄) ウププッ

こんなことも出来るだね。♪(* ̄ー ̄)v

 

■昨日の台風でのツイートで

会社「台風で家かえれないから徹夜いけるよね?」 

ってのがあってワロタw

ワロタヾ(@°▽°@)ノあはは

ワロタorz

 

 

JFS2.0のIDセパレータ文字とCSS

■前に「javax.faces.SEPARATOR_CHAR」を

設定してIDとIDのセパレータ文字を変更していたのだけど

OpenFacesのDayTableを使うとコレが問題になって、イベントの編集した後にボタン押してもOverlayが消えない。( ̄▽ ̄;)!!ガーン

しょうがないので設定をやめた。(o・ω・o)

ID指定が出来なくなったので、全部クラス指定でやろうかと思ったんだけど、CSSのセレクト名について調べたらココに「\」でエスケープ出来るよってあったので凄く助かった。「form\.table{}」ちゃんと反映されたワーイ!!\(o ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄▽ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄o)/ワーイ!!

CSSセレクタ名は英数字とハイフンのみしか使っちゃダメなのか、アンダーバーとか使っちゃってるよorz

 

■DayTableが

まだ、完全に動かない。なんだろう「Resource」が認識しないので、

Multiple  Resourcesにリソース毎に名前が表示されないし、色が変わらない。

オンラインデモを確認してみたら公式でも出てない。( ̄ω ̄;)エートォ...

 

 

 

 

 

OpenFacesを使ってみる

■JSF2.0で

ソースをコメントしようとするとエラーになる。(´ ▽`)

なんでかなーっと検索してたら、ココにJSF2.0でのコメント方法があった。

とても助かります♪(o ̄∇ ̄)/

 

■OpenFacesを使ってみる

jsf1.2の時のトマホークみたいの無いかなーっと探していたら、OpenFacesってのがあるらしい。デモ画面見たけど良いねヽ( ̄ ̄∇ ̄ ̄)ノ ランラン♪

Day Tableってのが凄いGoogleカレンダーみたいだ、まだエラーが出て上手く動かせてないんだけど面白わーヽ(= ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∇ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄=)ノ

カレンダーなんかは

<o:calendar />

と記述するだけで出来ると(管理Beanは要るけど)か凄いね(゚∇^d) グッ!!

 

 

 

AWSの課金

AWSの課金についてメールが来ていた。

あれ?1年間は無料じゃなかったっけ?と思って詳細をみてみると

Amazon EC2 running」の行が2行になっていたので、2つ目の環境から課金されるみたいだ。(´ρ`)

また、Regionは米国と日本の2つ使っていたんだけど両方のRegionで無料枠が1つづつ適応されていたので1Region1環境はタダになるみたいだ。これは良いね(o^∇^o)ノ

 

実際に掛かった金額は以下の通り

Amazon EC2 runningで150時間3ドル(Regionは米国)

・Elastic Load Balancingで150時間3.5ドル(Regionは米国)

高いのか安いのか良く分からないけど、どうなんでしょうね?( ̄ ̄ ̄∇ ̄ ̄ ̄; 

 

何か公開してるわけじゃなくて、遊ぶために使っているので普段は止めてても良いんだけどやり方が分からないorz

ココにTerminateじゃなくてStopが良いよーって有ったので、

Stopしようと思ったけどAWS Management ConsoleのElastic BeanstalkからのStop方法が分からなかったのでEC2からStopする。

うん、新しいインスタンスが出来たよww

ロードバランサ君が良い仕事しているね♪( ̄▽+ ̄*)

 

というわけでLoad BalancersのStopの仕方が分からなかったので削除(゜△゜)ノ⌒゜

のち、EC2をStopする。うん、一覧から消えたよ?どういうことだ( ̄▽ ̄;)!!ガーン

EBSに一回スナップショットとか取らないと消えちゃうのかな?

やっぱり何も見ずに適当にやるのは良く分からん。けど面白いなこれw

 

RDBの無料は2ヶ月って書いてあった気がするので

幾らになるか気がかりだな。