2010年08月31日

9月、10月は多いなぁ

どうも、塩内藤です。

10月末までの発売予定ソフトで欲しいもの、、、

なんか凄い多い、、、どうしよう、、、絶対全部やるの無理だ、、、

この中ではフロントミッションがわりとどうでもいい感じw

逆に絶対外せないのがStar Wars: The Force Unleashed II

どうしようかなぁ、、、


09/02
METROID Other M http://metroid.jp/

09/15
Halo Reach http://www.bungie.net/Projects/Reach/default.aspx

09/16
FRONT MISSION EVOLVED http://www.frontmissionevolved.jp/

09/30
デッドライジング2 http://www.capcom.co.jp/deadrising/2/index.html

10/14
Medal of Honor http://www.medalofhonor.com/

10/21
VANQUISH(ヴァンキッシュ) http://vanquish.sega.jp/

10/28
Fable III http://lionhead.com/Fable/FableIII/

海外ソフト
10/26
Star Wars: The Force Unleashed II http://www.lucasarts.com/
ワスレテタ
posted by しお at 13:34| Comment(0) | TrackBack(0) | Game

2010年08月26日

ThreadLocalで

どうも、塩内藤です。

Webアプリ開発をしていて業務ロジック内とかでRequestとか参照したーーーい!!とかよくあると思いますよ?

少なくとも自分は結構あります。。。

そんな時に、この方法を先生に教えてもらいました。


今更な技術らしいのですが、自分は知りませんでした。。。。

めんどいのでクラスをそのままw

spring3.0のspringMVCで開発してます。

まぁあれです、リクエスト毎のHttpServletRequestとHttpServletResponseをコンテキストに設定後、コンテキストそのものをThreadLocalに登録するみたいな事です。

使い方はHandlerInterceptorAdapterとか継承したクラスのpreHandleメソッドでTestWebContext.init()を呼び出してコンテキストの初期化

あとは、好きなとこでTestWebContext.getContext()からあれやこれやします。

今回はセッション、リクエストへの属性保存と取得。
あとはBeanFactoryも入れてみました。

便利ですねぇ楽ですねぇ



package test.context;

import org.springframework.web.servlet.support.RequestContext;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* コンテキスト
* <p>
* ローカルスレッドにTestWebContextを保持し、<br/>
* リクスト毎のローカル変数としてHttpServletRequestを提供します.
* </p>
*
*
*/
public final class TestWebContext {

/** ThreadLocal. */
private static ThreadLocal<TestWebContext> threadLocal = new ThreadLocal<TestWebContext>();

/** HttpServletRequest. */
private HttpServletRequest request = null;

/** HttpServletResponse. */
private HttpServletResponse response = null;

/** RequestContext. */
private RequestContext requestContext = null;

/**
* コンストラクタ.
*/
private TestWebContext() {
}

/**
* HttpServletRequest getter.
*
* @return HttpServletRequest
*/
public HttpServletRequest getRequest() {
return request;
}

/**
* HttpServletRequest setter.
*
* @param request
* HttpServletRequest
*/
public void setRequest(HttpServletRequest request) {
this.request = request;
}

/**
* HttpServletResponse getter.
*
* @return HttpServletResponse
*/
public HttpServletResponse getResponse() {
return response;
}

/**
* HttpServletResponse setter.
*
* @param response
* HttpServletResponse
*/
public void setResponse(HttpServletResponse response) {
this.response = response;
}

/**
* RequestContext getter.
*
* @return RequestContext
*/
public RequestContext getRequestContext() {
return requestContext;
}

/**
* RequestContext setter.
*
* @param requestContext RequestContext
*/
public void setRequestContext(RequestContext requestContext) {
this.requestContext = requestContext;
}

/**
* リクエスト:値の取得.
*
* @param <T>
* T
* @param key
* String
* @return <T>
*/
@SuppressWarnings("unchecked")
public <T> T fromRequest(String key) {
return (T) this.request.getAttribute(key);
}

/**
* リクエスト:値の保存.
*
* @param key
* String
* @param obj
* Object
*/
public void toRequest(String key, Object obj) {
this.request.setAttribute(key, obj);
}

/**
* If session does exist,return true.
*
* @return boolean
*/
public boolean isSessionExist() {

return this.request.getSession(false) != null;

}

/**
* セッション:値の取得.
*
* @param <T>
* T
* @param key
* String
* @return <T>
*/
@SuppressWarnings("unchecked")
public <T> T fromSession(String key) {
return (T) this.request.getSession().getAttribute(key);
}

/**
* セッション:値の保存.
*
* @param key
* String
* @param obj
* Object
*/
public void toSession(String key, Object obj) {
this.request.getSession().setAttribute(key, obj);
}

/**
* セッション:値のクリア.
*
* @param key
* String
*/
public void clearSession(String key) {
this.request.getSession().removeAttribute(key);
}

/**
* Beanの取得
* <p>
* springにより管理されているBeanをid指定で取得します.
* </p>
*
* @param <T> T
* @param beanId
* コンテナに登録されているbeanId
* @return <T> 取得したBean
*/
@SuppressWarnings("unchecked")
public <T> T getBean(String beanId) {

return (T) this.requestContext.getWebApplicationContext().getBean(beanId);

}

/**
* Beanの取得.
* <p>
* springにより管理されているBeanをクラス指定で取得します.
* </p>
*
* @param <T>
* Class
* @param clazz
* Class<T> コンテナに登録されているbeanのクラス
* @return <T> 取得したBean
*/
public <T> T getBean(Class<T> clazz) {

return this.requestContext.getWebApplicationContext().getBean(clazz);

}

/**
* コンテキストを取得します.
*
* @return TestWebContext
*/
public static TestWebContext getContext() {

return threadLocal.get();

}

/**
* コンテキスト初期化処理
* <p>
* コンテキストをスレッドローカル変数として保持します.
* </p>
*
* @return TestWebContext
*/
public static TestWebContext init() {

TestWebContext testContext = new TestWebContext();

threadLocal.set(testContext);

return testContext;

}

/**
* コンテキストの破棄.
*/
public static void destroy() {

threadLocal.set(null);

}

}


posted by しお at 13:53| Comment(0) | TrackBack(0) | spring

あろえonly

どうも、塩内藤です。

最近あろえの画像をアップしてなかったので、今日はあろえ画像を、、、

下のはうちに来たばかりの時の画像、、、

aroe.jpg

こっちは、最近の画像
来た時と比べると、、、、全然違う、、、

100820_1538061.jpg

SBSH01231.JPG
posted by しお at 13:34| Comment(0) | TrackBack(0) | あろえとつくし

2010年08月25日

デカクなりましたよ?

どうも、塩内藤です。

こないだ、つくしを病院の定期検診に連れて行ってきました。嫁が、、、

生後5ヶ月なのに体重が6キロ超えたみたいです。。。

あろえが今2歳と8ヶ月で7キロなんですが、もうすぐ追い越しそうです。


下の画像なんですが、来たばっかの頃はこの箱に入っても全然スカスカだったんですが、今ではパツンパツンです。


100824_143439.jpg

100824_1435151.jpg


10キロは超えないで欲しいなぁ
posted by しお at 13:24| Comment(2) | TrackBack(0) | あろえとつくし

2010年08月23日

ひさびさに料理

どうも、塩内藤です。

ひさびさに料理してみました。

といってもパスタを適当に作っただけですが、、、

材料は
パスタ1人分
ツナ缶1個
サダラ用ドレッシング適量
オリーブオイル適量

今回はうちの冷蔵庫に和風ごまドレッシングしかなかったので、それで味付けしました。

作り方は
1.パスタ茹でる
2.フライパンを熱してオリーブオイル適当に入れる
3.パスタの茹で汁ごとぶちこむ
4.ツナ缶ぶっこむ
5.ドレッシングぶっこむ
6.適当に混ぜる

以上

100822_1348221.jpg

茹で汁が多すぎてスープパスタぽくなりましたが、結構美味しかったです。


posted by しお at 13:37| Comment(0) | TrackBack(0) | 料理

2010年08月20日

Lara Croft and the Guardian of Light

どうも、塩内藤です。

Lara Croft and the Guardian of Light購入しました。

結構おもしろいですねぇ、まだ時間がなくてステージ1しかやってないですが、ちゃんと最後までやりそうな予感w

http://www.xbox.com/ja-JP/games/l/laracroftgolxbla/


あと、実績でレッドスカル・コレクターていうのがあるんですが

体験版で解除条件を満たして、ステージクリア後に購入ボタン押したら実績解除されなかった、、、


もっかいやらないといけないのね、、
posted by しお at 13:54| Comment(0) | TrackBack(0) | Game

2010年08月18日

どーそーかい

どうも、塩内藤です。

先週の週末に同窓会目的で帰省しました。

今回の同窓会は前回から約10年が経過しています。正直わからない人もチラホラ、、、

男はみんなわかったんですが、、、

遠方から参加されたみなさん、本当にお疲れ様でした。凄く楽しかったです。

次の同窓会は、今回と同じく10年後ですかねぇ、幹事はだれだかわかんないですが、期待してます。


PS
現在、同窓会の写真をダウンロードできるように、ちょこちょこホームページをいぢってます。




土日で体重が2.5キロ増えた、、、マジでやヴぁい、、、


posted by しお at 14:12| Comment(0) | TrackBack(0) | 日記

2010年08月13日

ApplicationEvent

どうもどうも、塩内藤です。

忘れたくなかったので2回目のアップw

ApplicationContextの初期化時に、ある処理を実行したかったのでちょっと調べてみました。

Spring では標準的な Observer パターンによるイベントを伝播する機能があるとの事

ちうことで、実装してみました。


import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.web.context.support.RequestHandledEvent;

/**
* ApplicationContext Observer
*
* @author sio
*
*/
public class ContextObserver implements ApplicationListener<ApplicationEvent> {

/** {@inheritDoc} */
@Override
public void onApplicationEvent(ApplicationEvent event) {

if (event instanceof ContextRefreshedEvent) {

onContextRefreshedEvent((ContextRefreshedEvent) event);

} else if (event instanceof ContextClosedEvent) {

onContextClosedEvent((ContextClosedEvent) event);

} else if (event instanceof RequestHandledEvent) {

onRequestHandledEvent((RequestHandledEvent) event);

}

}

/**
* ApplicationContext が初期化またはリフレッシュされたときに発行されます。
*
* @param event ContextRefreshedEvent
*/
private void onContextRefreshedEvent(ContextRefreshedEvent event) {


}

/**
* ApplicationContext がクローズされたときに発行されます。
*
* @param event ContextClosedEvent
*/
private void onContextClosedEvent(ContextClosedEvent event) {


}

/**
* DispatcherServlet を使用している Web アプリケーションにHTTP リクエストがあった場合に発行されます。
*
* @param event RequestHandledEvent
*/
private void onRequestHandledEvent(RequestHandledEvent event) {


}

}



とりあえず、今回は初期化処理なのでContextRefreshedEventをハンドリングして処理を記述しようかなぁと思ってます。
posted by しお at 14:40| Comment(0) | TrackBack(0) | spring

Star Wars: The Force Unleashed II

どうも、塩内藤です。

Star Wars: The Force Unleashed II Xbox 360 Preview - Video Preview



デラ面白そう!

10月26日が待ち遠しい
posted by しお at 13:37| Comment(0) | TrackBack(0) | Game

2010年08月12日

VANQUISH

どうも、塩内藤です。

10.21発売となるVANQUISH

http://vanquish.sega.jp/

ベヨネッタにハマったので、チョー期待してます。

PS3ベースで作成するって話なんですが、PS3版とxbox版どっちを購入しようか微妙に迷ってます。

オンラインCOOPとかが無いみたいなんで、正直どっちでもいいんですが、どうしようかなぁ、、、


SSF4

なんか、スゲー

http://www.youtube.com/watch?v=smHQiaDVBsg&feature=player_embedded
posted by しお at 13:11| Comment(0) | TrackBack(0) | Game

2010年08月11日

Aware

どうも、塩内藤です。

引き続きspring系で

bean定義のxmlで定義しているメッセージソースをMessageUtilみたいなの作って業務ロジック内でも使いたかった。

で、ちょっと考えてAutowiredとか使えばいいのかなぁと思ってたんですが、Awareなるものがあるそうな

ちゅうことで、実装。

1.MessageUtilにMessageSourceAwareをimplements
2.@Componentを指定してコンポーネントスキャンの対象する
3.受け取ったMessageSourceをstaticで保持

これで、いいみたいです。

下のbean定義のxmlで定義しているメッセージソースをinjectionしてくれます。

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/messages/messages" />
<property name="cacheSeconds" value="0" />
</bean>



package org.sample;

import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
import org.springframework.stereotype.Component;

@Component
public class MessageUtil implements MessageSourceAware {

private static MessageSource messageSource = null;

/** {@inheritDoc} */
@Override
public void setMessageSource(MessageSource messageSource) {

MessageUtil.messageSource = messageSource;

}


public static String getMessage(String messageCode, Object... args) {

return messageSource.getMessage(messageCode, args, null);

}

}


ついでにBeanFactory用のやつも作成。

こんな感じになりました。

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

@Component
public class BeanFactoryUtils implements ApplicationContextAware {

/** ApplicationContext */
private static ApplicationContext applicationContext = null;

/** {@inheritDoc} */
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

BeanFactoryUtils.applicationContext = applicationContext;

}

@SuppressWarnings("unchecked")
public static <T> T getBean(String beanId) {

return (T) applicationContext.getBean(beanId);

}

public static <T> T getBean(Class<T> clazz) {

return applicationContext.getBean(clazz);

}

}


よくよく調べるとAware系のインターフェイスが存在してて、その手間を省くためにAutowiredが出てきたぽい?

Autowiredだと複数の実装クラスが存在してると@Qualifier使ってbeanIdガチ指定しないといけない気がするけど、どうなんだろう、、、
posted by しお at 13:03| Comment(0) | TrackBack(0) | spring

2010年08月10日

interceptor

どうも、塩内藤です。

こないだからの続きでRequestMappingのinterceptorを作ってみました。

ソース
  
package org.lesson.interceptor;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class RequestMappingInterceptor {

@Around("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public Object doRequestMappingIntercept(ProceedingJoinPoint pjp) throws Throwable {

return pjp.proceed();

}
}


これで、RequestMappingアノテーションが付いたメソッド全部をインターセプト

参考にしたのは、ドラチックコードアシスターc9katayama先生!

http://d.hatena.ne.jp/c9katayama/20080802/1217670477

アザース


posted by しお at 15:13| Comment(0) | TrackBack(0) | spring

2010年08月06日

RequestMapping時のメソッドシグネチャ

どうも、塩内藤です。

spring3.0でのspringMVC

@Controllerを使用するときに、ちょっとした疑問

まぁ使用するにあたってbeanの定義ファイルに<mvc:annotation-driven />という1行が必要みたいなんですが、ここまでは全然おけ


その後にControllerのクラス作成して下みたいにメソッドを定義していきます。

@RequestMapping(method = RequestMethod.POST)
public ModelAndView onPost()

で、まぁこの時のメソッドシグネチャがイマイチワカンネ

HttpServletRequestを引数に指定すれば入ってくるし、無くても問題なし

というか、requestかsessionスコープに入ってるやつ指定したらなんでも引数として受け取れるんですかねぇ??

ソース見ろって話なんですが、調べるのめんどいので見てないです。。。

だた、引数でBindingResult受け取ったときにvalidate対象のモデル、BindingResultの順番に定義しないとシグネチャエラー的な事言われた気がする。。。

正直よくわからない、、、


エライ人だれかオシエテー
posted by しお at 13:23| Comment(0) | TrackBack(0) | spring

2010年08月05日

悪魔城ドラキュラHD

どうも、塩内藤です。

悪魔城ドラキュラHD購入しました。

やった感じはコナミワイワイワールドが真っ先に思い浮かびました。

キャッキャ言いながらやるゲームのような気がしますねぇ


アイテムも一人が宝箱開けると全員にアイテムが渡るので、色んな心配もなさげ


まぁちょいちょいやって行こうと思います。



ドラキュラと全然関係なんですが、午前中のニュースで100歳以上の高齢者が10数人行方不明って言ってて、出かけて帰ってくると40人に増えてた。。。。
posted by しお at 13:16| Comment(0) | TrackBack(0) | Game

2010年08月02日

リリース前日

どうも、塩内藤です。

昨日の日曜日は休日出勤でした。

システムのリリース前日ということで本番環境にあげたアプリがちゃんと動くか確認

で、、、まさかのBug発生、、、

緊急修正、緊急リリース、、、涙目でした。。。

そんな中、ボスから堂島ロールの差し入れが、、、


自分は食べたの初めてだったんですが、チョーウマかった。

また食べたいなぁ

100801_1841411.jpg


堂島ロールの後ろに移ってるキーボードがせつない、、、
posted by しお at 13:35| Comment(0) | TrackBack(0) | 日記