パスタ習作#2 飽き性な性格なのに#1を書いた以降も意外とパスタ熱が冷めなかった。当たり前のことだが、基本が分かってくると応用ができる。応用ができると自由度が増す。自由を手に入れると継続ができる。批評家の福尾匠が自身の日記に、小倉知巳のペペロンチーノのレシピはよくで…
![はてなブログ | 無料ブログを作成しよう](https://cdn-ak-scissors.b.st-hatena.com/image/square/06a15c64ba0ceec233d86d71001ebb29a9dcbf5d/height=288;version=1;width=512/https%3A%2F%2Fcdn.blog.st-hatena.com%2Fimages%2Ftheme%2Fog-image-1500.png)
ASP,SaaSシステムを構築する場合に、DBはどうするのが一般的なんだろう? 1つのDBで全サイト管理するのか、サイト毎でDB分けるのか? どちらも一長一短あると思うが、自分はDB分ける派だ。 というわけで、S2JDBCで動的にデータソースを切り替えることを調べた。 良いサイトがたくさんあったので、お陰ですんなり出来た。 http://d.hatena.ne.jp/kimpo/20071227 http://d.hatena.ne.jp/newta/20091007/1254920106 http://ymotoba.blogspot.com/2008/10/s2jdbcdb.html http://s2container.seasar.org/2.4/ja/jdbc.html 肝の部分は以下のようだ。 jdbcManager = SingletonS2Container.getComp
S2JDBCがパフォーマンスチューニングをしたということなので、もう一度パフォーマンス比較をしてみました。測定方法は前回と同様、1プロセス内で同じ処理を3回実行して最後の値を取る(最適化された状態で計測するために)、ということをそれぞれのテストケースで3回実行して真ん中の値を使っています。 コードや使用しているライブラリはリポジトリにあります。 https://www.seasar.org/svn/sandbox/doma/trunk/or-mapper-benchmark/ SQLファイルに記述されたSELECT文を使って10000件検索 19,364,522 (nanoTime) : DomaSqlFileSelectDtoTest 39,396,294 (nanoTime) : S2DaoSqlFileSelectDtoTest 12,013,783 (nanoTime) : S2J
前回につづいてパフォーマンス比較をしてみました。ただし、前回と測定方法変えてます。最適化された状態で計測するため1プロセス内で同じ処理を3回実行して最後の値を取る、ということをそれぞれのテストケースで3回実行して真ん中の値を使っています。 コードや使用しているライブラリはリポジトリにあります。 https://www.seasar.org/svn/sandbox/doma/trunk/or-mapper-benchmark/ SQLファイルに記述されたSELECT文を使って10000件検索 22,200,648 (nanoTime) : DomaSqlFileSelectDtoTest 39,252,773 (nanoTime) : S2DaoSqlFileSelectDtoTest 68,378,980 (nanoTime) : S2JdbcSqlFileSelectDtoTest 自動
データベースにH2を使ってCRUDのパフォーマンス比較をしてみました。それぞれ3回実行して真ん中の値を使っています。コードや使用しているライブラリはリポジトリにあります。 https://www.seasar.org/svn/doma/trunk/or-mapper-benchmark/ 10000件SELECT 529,419,874 (nanoTime) : DomaSelectOwnerTest 137,686,988 (nanoTime) : JdbcSelectOwnerTest 1,048,970,551 (nanoTime) : JpaSelectOwnerTest 303,612,949 (nanoTime) : S2DaoSelectOwnerTest 750,473,864 (nanoTime) : S2JdbcSelectOwnerTest 10000件INSERT(
現在執筆しているSeasar2本では以下のプロダクトを紹介しています。 S2Container SAStruts SAStruts-Portlet Maven SAStruts Archetype Mayaa Matatabi S2JDBC S2JDBC-Gen Dolteng Kijimuna DbLauncher SAStruts Plugin S2Unit S2JUnit4 S2JUnit4Plugin S2Mai S2Chronos S2CSV S2Config Fisshplate mobylet The Seasar Projectには他にもいろんなプロダクトがありますが、基本的には「SAStruts + S2JDBCと組み合わせてWebアプリケーションの開発に使用できるもの」というコンセプトでチョイスしました(なのでSAStrutsやS2JDBC以外のWebフレームワーク/D
実は9月の終わり頃からSeasar2の本を書いています。 基本的にはSAStruts+S2JDBCを使用したWebアプリケーション開発向けの内容なのですが、S2Containerのついての詳細な解説や、SAStrutsやS2JDBCと組み合わせて利用可能なそのほかのプロダクトについてもかなりのページを割いています。全部で500ページくらいになる見込みで、4月上旬に翔泳社さんから出る予定です。 500ページという分量からもわかる通り、SAStrutsやS2JDBCの表面的な利用方法に留まらず、そこそこマニアックなところまで踏み込んでいます。もちろんリファレンスとしても使える内容になっています。Web上のドキュメントと被る部分もありますが、Seasar2はこれまでWeb上のドキュメントは比較的充実しているものの、書籍や雑誌等の記事は入門的なものが多かったので、そこを埋めることができるといいなと
Koichi Kobayashi [E-MAIL ADDRESS DELETED] 2008年 4月 25日 (金) 21:00:12 JST 前の記事 [Seasar-user:13957] [S2JDBC] 動的にスキーマを切替えてテーブルアクセスするには 次の記事 [Seasar-user:13961] Re: [S2JDBC] 動的にスキーマを切替えてテーブルアクセスするには 記事の並び順: [ 日付 ] [ スレッド ] [ 件名 ] [ 著者 ] 小林 (koichik) です. Date: Fri, 25 Apr 2008 20:39:10 +0900 From: "Nobutaka Yamada" <[E-MAIL ADDRESS DELETED]> To: [E-MAIL ADDRESS DELETED] Subject: [Seasar-user:13957] [S2J
koichikさんからコメントもらっちゃった、ワーイ。 で、 Customizer で適切な JdbcManager が DI されるようにするのがオススメです. とのことなので、 前回の1つ目の方法をベースにServiceにDIするJdbcManagerを切り替えるようにしてみる。 とりあえずカスタマイザを作ってみた。 /** * DIするプロパティ設定をカスタマイズします。 * @author newta */ public class DIPropertyCustomizer extends AbstractCustomizer { private final String expression; private final String propertyName; public DIPropertyCustomizer(String propertyName,String expr
■ [Seasar]S2JDBCとS2JDBC-Genあれこれ S2JDBC-Genはエンティティや名前クラス(Namesクラス)だけでなく、テストケースや、SQLファイルをテストするためのテストケースなども生成してくれる非常に便利なツールです。SQLファイルの一括テストはDBFluteにそういう機能があると聞いて「いいなー」と思っていたのですが、S2JDBCでもS2JDBC-Genを使えば実現できたのでした。個人的にエンティティごとにサービスを作るのは、特にS2JDBC(のSQL自動生成で検索する場合)には向いていないと思います。そもそもエンティティ毎にサービス(Dao)を作ると各業務依存のメソッドが大量に作成されて収集がつかなくなる可能性が非常に高いですが、S2JDBCだとさらにLazyロードができないので、同じ検索条件でジョインするエンティティだけが違うメソッドが作られることになるは
SeasarのS2JDBCで複数DB 方法は2つあります。 ・JdbcManagerを2つ用意する方法。 ・SelectableDataSourceProxyを使用する方法。 まず、1つ目のJdbcManagerを2つ用意する方法から jdbc.diconを元にDataSourceを2つ定義します。 H2とOracleの設定です。DBのチョイスは適当。 ここは2つあるだけでいつもと一緒。 jdbc-a.dicon <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components namespace="jdbc"> <include pa
このエントリでは、S2JDBC-Genを使って手軽にデータベースリファクタリングをする方法を紹介します。S2JDBC-Genは、Javaコード(S2JDBCのエンティティ)の修正をデータベーススキーマに反映させるツールです。 S2JDBC-Genの実行に必要な動作環境は、EclipseプラグインのDoltengを使うと簡単に用意できます。Eclipseはバージョン3.4、Doltengは昨日リリースされたばかりの0.33.0を使います。 長くなりすぎたので見出しを。。。 Doltengのインストール Doltengプロジェクトの作成 Antのコンソールエンコーディングの設定 (Windows上でEclipse3.4を動かす場合にだけ必要) H2の起動とデータの確認 データベースからエンティティの生成 エンティティからDDLとダンプデータの生成 DBリファクタリング(新たなカラムの導入) D
SELECT文の骨格は同じなんだけど、where句があったりなかったり、Pagingがあったりなかったりするなど、微妙に違うSQL文は良くでてきます。 S2JDBCを使うと、SELECT文の骨格を返すメソッドを用意することで、それをViewのように再利用することができます。例えば、次のような感じ。 protected AutoSelect createView() { return select().leftOuterJoin(dept()) .leftOuterJoin(address()); } public List findAll() { return createView().getResultList(); } public Emp findById(Integer id) { return createView().id(id).getSingleResult(); } pu
最新版のSeasar2とS2JDBC-Genによって、タイプセーフなデータベースプログラミングが可能になっています。それをHibernateと比較しながら見ていきましょう。 Hibernateの元ネタはこちら。 Hibernate 入門記 クリテリア 最初は単純なLikeを使う例。 Hibernateはこうなります。Expression.*をstaticインポートしています。 session.createCriteria(Model.class) .add(like("name.firstName", "Yu%")) .list();これまでのS2JDBCだとこんな感じ。 jdbcManager.from(Model.class) .where("name.firstName like ?", "Yu%") .getResultList()S2JDBCのタイプセーフな書き方だととこうなりま
エンティティの結合を検索時に指定することがほとんどなので findByIdやfindAllなんかは実運用では出番があまりないかもです。 AbstractService に次のようなメソッドを用意すれば、結合も汎用的に扱うことができます。 AbstractService.java public class AbstractService<ENTITY> extends S2AbstractService<ENTITY> { public List<ENTITY> findAll(String leftOuterJoin, String orderBy) { return select().leftOuterJoin(leftOuterJoin) .orderBy(orderBy).getResultList(); } public ENTITY findById(Integer id, St
エンティティの結合を検索時に指定することがほとんどなので findByIdやfindAllなんかは実運用では出番があまりないかもです。 AbstractService に次のようなメソッドを用意すれば、結合も汎用的に扱うことができます。 AbstractService.java public class AbstractService<ENTITY> extends S2AbstractService<ENTITY> { public List<ENTITY> findAll(String leftOuterJoin, String orderBy) { return select().leftOuterJoin(leftOuterJoin) .orderBy(orderBy).getResultList(); } public ENTITY findById(Integer id, St
このエントリーではSeasar 2.4.26 から 導入された S2AbstractService について書かせて頂きます。S2AbstractService を活用することで、タイプセーフを保ちつつも、データアクセスロジック関連のソースコードを大幅に減らす効果が期待できます。 S2JDBC の弱点 S2JDBCを使えば、お手軽かつパワフルにデータアクセス処理が実現できます。しかし、生のS2JDBCを野放し状態に使った場合、プロジェクトの規模が少し大きくなると、ソースコードの重複を生みやすくなる問題に直面します。具体的に、次の1件分のデータ取得処理ですら、コピー&ペーストされて複数箇所で使用されてしまいます。 Emp emp = jdbcManager.from(Emp.class).id(empId).getSingleResult(); 対処方法は、共通処理を抽出してメソッド化するこ
先日、ある企業様向けにSeasar2の研修を行ってきました。 この企業は、SIerではありません。様々なインターネット関連のサービスを 手がけていますが、SIerにソフト開発を発注する立場のユーザー企業です。 この企業のすごいところは、Webアプリケーション開発の最先端の プログラミング技術を普段プログラムを書かない担当者にも 組織的にプログラミング技術を学ばせている点です。 少し前に id:higayasuo さんのブログの 『元請けもきちんとプログラミングできるようになること』 というエントリが反響を呼んでいました。詳しくは以下をご覧ください。 プログラミングできない元請けがプログラム設計書をレビューするという矛盾 http://d.hatena.ne.jp/higayasuo/20080415/1208224902 このエントリのコメントやトラックバックからすると、 元請け企業のプロ
S2JDBCは、S2Dao譲りのSQLファイルを使うこともできます。 http://s2container.seasar.org/2.4/ja/s2jdbc_manager.html#S2Dao%E8%AD%B2%E3%82%8A%E3%81%AESQL%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB examples/entity/Employee/selectAll.sql select ... List<EmployeeDto> results = jdbcManager.selectBySqlFile( EmployeeDto.class, "examples.entity.Employee.selectAll") .getResultList();もちろん、ページングもできます。 List<EmployeeDto> results = jdbcManage
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く