2005/07/17 諸事情により、しつもんこーなーを凍結します。
時期は未定ですが、seasar.org 上に同種の場を作成する予定です。
それまでは ML をご利用ください。

しつもんこーなー

ここのページの意味

つまづいたことや困ったこと

S2DaoのDB接続先の切り替えについて

gami (2005-07-07 19:13:39 (木))

S2Daoを使用し、条件によってDBの接続先を変えることは出来るのでしょうか?

やりたい事

パラメータとしてdriverClassName、URL、user、passwordが
渡って来た場合は、この値を使ってDBに接続する。
パラメータで値が渡って来なかった場合は、
j2ee.diconの値でDBに接続する。

以上、宜しくお願いいたします。

S2DAOでPKの無いテーブルのSelect

gami (2005-07-07 18:59:14 (木))

S2DAOでselect文を自動生成させ、
プライマリーキーの無いテーブルで実行したところ
PrimaryKeyNotFoundRuntimeExceptionが発生してしまいます。

これは仕様なのでしょうか?
select文なのでプライマリーキーは関係ないような気もするのですが・・・

回避方法等があれば教えてください。
宜しくお願いします。


org.seasar.dao.PrimaryKeyNotFoundRuntimeException: [EDAO0009]pe.bean.entity.SxScanDataにプライマリーキーが見つかりません

	at org.seasar.dao.impl.AbstractAutoStaticCommand.checkPrimaryKey(AbstractAutoStaticCommand.java:137)
	at org.seasar.dao.impl.AbstractAutoStaticCommand.setupUpdateSql(AbstractAutoStaticCommand.java:110)
	at org.seasar.dao.impl.UpdateAutoStaticCommand.setupSql(UpdateAutoStaticCommand.java:28)
	at org.seasar.dao.impl.AbstractAutoStaticCommand.<init>(AbstractAutoStaticCommand.java:28)
	at org.seasar.dao.impl.UpdateAutoStaticCommand.<init>(UpdateAutoStaticCommand.java:18)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupUpdateMethodByAuto(DaoMetaDataImpl.java:242)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupMethodByAuto(DaoMetaDataImpl.java:134)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupMethod(DaoMetaDataImpl.java:118)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupSqlCommand(DaoMetaDataImpl.java:101)
	at org.seasar.dao.impl.DaoMetaDataImpl.<init>(DaoMetaDataImpl.java:93)
	at org.seasar.dao.impl.DaoMetaDataFactoryImpl.getDaoMetaData(DaoMetaDataFactoryImpl.java:42)
	at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:36)

S2Daoでテーブルの切替

rerun (2005-07-05 19:52:11 (火))

S2Daoで条件によってTBLを切替える事は可能でしょうか。

やりたい事を簡単に説明しますと、

  • レイアウトは全く同じで、日付レンジのみ異なるテーブルが3つある。
  • パフォーマンス上の理由でテーブルは当月データ、前月データ、前々月データに分けられている。
  • 画面から条件指定で対象月を選択して、これらのテーブルから検索させたい。

    上記のような事を実現させたい場合、Bean、Daoインタフェース、SQLファイルをそれぞれ3つずつ作成するしかないのでしょうか。項目が同一なのでせめてBeanだけでも共用したいのですが何かスマートな方法はありますでしょうか。

S2JSFで同一画面遷移時の初期化禁止

rmiya (2005-07-03 02:04:34 (日))

S2JSF 1.0.3でgoogleのような検索画面(同一画面に検索結果を表示)を作成しています。

検索画面にページの初期処理(検索結果を格納している
DTOをクリアしている)を追加した状態で
検索処理を実行すると、
検索処理→初期処理の順番で処理が実行され、
検索結果がクリアされてしまいます。

同一画面に遷移時に、初期処理を実行しない方法はありませんか?

SingletonS2ContainerFactoryのinit

nemo (2005-06-23 17:50:57 (木))

WebアプリケーションでS2コンテナを取得するためにSingletonS2ContainerFactoryを使っています。
S2コンテナを取得する際にinitメソッドの呼びだしが行われているのではないかと思うのですが、
取得後にinitメソッドを呼び出す記述の必要はありますか?

PukiWikiの対策を行ってください

( ´∀`)つ (2005-06-01 21:49:07 (水))

余裕があればマイナーアップデートも。
http://pukiwiki.org/index.php?PukiWiki%2FErrata
PukiWiki1.4.5_1

S2Daoで1テーブル対Nエンティティ

SAL (2005-05-31 17:30:52 (火))

S2Daoで1つのテーブルを複数のBean(エンティティ)に対応付けたいのですが、実現方法が分かりません。

例えば

Personクラス{

String code;
String name;
Order order;

}

Orderクラス{
 String orderno;

 String item;

}

ORDERテーブル(
 CODE

 NAME
 ORDERNO
 ITEM

)

以上のような構成のとき、PersonDaoでgetAllPersons()をすると、Personクラスだけでなく、関連先のOrderクラスにもorderno,itemをセットしてほしいと思っているのですが実現方法が分かりません。

実現可能かも含め、ご指導下さい。

public class Person {
  public static final String TABLE = "ORDER";

  String code;
  String name;
  Order order;
  ・・・
}
public class Order {
  String code;
  String item;
}
public interface PersonDao {
  public static final Class BEAN = Person;

  Person getPerson(String code);
}

S2DaoでのSQLヒント文

tetsu (2005-05-24 15:50:05 (火))

S2DaoでSQLチューニングとしてヒント文(/*+ ヒント [ヒント] */)を利用しようとしています。

SQL自動生成では対応できないと思いますが、SQLを外部から指定した場合でも無理なのでしょうか。AbstractDaoの実装を行えばいけそうな感触ではありませんが未だ未検証です。

AbstractDaoの実装は工数がかかりますので、外部SQLを利用する場合の逃げ道がありましたらご教示願えないでしょうか。

s2strutsでファイルアップロード

(2005-05-08 02:28:41 (日))

s2strutsでPOJOなFormBeanを使用してFormFileを扱うにはどうしたらよいのでしょうか?

ステートフルを無効にしたい

Flash (2005-04-29 00:16:56 (金))

S2OpenAMFなのですが、
実験のため、StateFull と StateLessの違いを示したいのです。
pojoでjava.io.Serializableを実装したときだけ、StateFullになり、
それ以外はStateLessになるようにするには、どのようにすればよいでしょうか?

デフォルトでは、すべてStateFullになってしまうようなのです。
ご存知の方、教えていただければ幸いです、。

S2Daoで全件削除

(2005-04-18 18:09:53 (月))

Daoインターフェイスに全件削除メソッドを定義しようと思い以下のように記述しましたが、SQL文がSELECT文と解釈されexecuteQuery()が呼び出されるため上手くいきません。

 static String doDeleteAll_QUERY = "delete from EMPLOYEE";
 void doDeleteAll();


解決策をお教えいただけないでしょうか。

Action内の独自クラスにAOP可能?

(2005-04-11 19:26:06 (月))

S2の導入を考えているのですが、S2Struts を使用し、Action内の任意のクラスのメソッドにAOPにてインジェクション可能でしょうか(メソッド実行前・後のログ取得可能でしょうか)。サンプルからActionのexecuteには可能なのはわかったのですが、そのexecute内で呼んでいるクラスに可能かどうか教えていただけますか。(Springでは断念)

s2struts *.do→*.doの遷移

(2005-04-08 09:03:27 (金))

環境:
・Windows 2000 sp4
・j2se 1.4.2
・Tomcat 4.1.30
・Struts 1.2.4
・Seasar 2.2.6
・S2Struts 1.1.5
で開発しているのですが、ActionをPOJOにして、forward先を別のPOJO Actionにすると、getterによるrequestへの自動バインディングが出来ない模様です。
struts-config.xmlのvalidate属性をtrueにして、input属性がPOJO Actionだった場合も同様です。
とりあえずその部分だけ、StrutsのActionを継承させれば回避できます。
他の環境では試してないのですが、不具合でしょうか?

S2DAO1.0.24埋め込み変数コメント

(2005-04-01 20:29:06 (金))

SQLファイルで文字列カラムのWhere句を

wehre ename = /*$dto.ename*/

とした場合、以下のように変数が埋め込まれ

wehre ename = FORD

シングルコーテーションで文字列が囲まれていなく、エラーとなってしまいます。

回避方法を教えてください

s2struts1.1.4でSwitchAction

(2005-03-29 17:36:54 (火))

s2struts1.1.4でSwitchActionをした後
遷移した先のモジュールのActionを実行すると
「処理のためのパスが含まれて居ません」
と出て全てのリクエストが通らなくなります。
なにか特別な設定が必要なのでしょうか?
#s2struts無しの場合正常に動いているアプリケーションです
#s2strutsの設定はドキュメントの通り設定していて、Switch以外は正常に動きます

  • s2struts.diconに記述しているRequestProcessorのinstance属性をprototypeにしてください。次のリリース時にs2struts.diconを修正します。(リクエスト毎にインスタンスを生成する訳ではなくモジュール単位に1回だけ生成するので、パフォーマンスへの影響もありません) -- きむきむ 2005-03-30 12:34:55 (水)
  • 上記設定でうまくいきました! ありがとうございます。  -- 2005-03-31 23:48:39 (木)

S2DaoでのSQLファイルのエンコーディング

HM (2005-03-04 18:14:15 (金))

S2DaoにてUTF-8でSQLファイルを記述しようと思ったのですが、
エンコーディング指定方法がありません。
ソースからは

DaoMetaDataImpl#setUpMethod~
 TextUtil.readText
   InputStreamRaderUtil.create
   InputStreamRaderUtil.create
     new InputStramRead( InputStream, "JisAutoDetect")

で、JIS系列の場合は大抵大丈夫なのでしょうが、I18n
を思うとこの固定値は変更可能であった方が良いと思い
ます。

64bit環境下での動作保障について

もっともっと (2005-03-03 16:07:04 (木))

ハードウェアはSolaris SPARC OS(64bit)で、APサーバにOracle10gで
開発予定です。
上記環境下でS2は動作するのでしょうか?

daoについて

9 (2005-02-16 11:20:09 (水))

mysqlをwindowsにインストールして
実行して動いていたdaoが
Linuxにインストールした際には動かず
下記のようにテーブルが見つからないというエラーが返却されました。

ESSR0071]SQLで例外が発生しました。理由はjava.sql.SQLException: General error,
message from server: "Table 'SN13.tbhz021' doesn't exist"~
       at org.seasar.framework.util.DatabaseMetaDataUtil.getPrimaryKeySet
              (DatabaseMetaDataUtil.java:42)
       at org.seasar.dao.impl.BeanMetaDataImpl.setupDatabaseMetaData
              (BeanMetaDataImpl.java:230)
       at org.seasar.dao.impl.BeanMetaDataImpl.<init>(BeanMetaDataImpl.java:51)
       at org.seasar.dao.impl.DaoMetaDataImpl.<init>(DaoMetaDataImpl.java:82)
       at org.seasar.dao.impl.DaoMetaDataFactoryImpl.getDaoMetaData
              (DaoMetaDataFactoryImpl.java:41)
       at org.seasar.dao.interceptors.S2DaoInterceptor.invoke
              (S2DaoInterceptor.java:35)
       at org.seasar.framework.aop.impl.MethodInvocationImpl.proceed
              (MethodInvocationImpl.java:60)
       at org.seasar.framework.aop.proxy.AopProxy.intercept(AopProxy.java:123)
       at model.dao.sdao.daohz021.Daohz021
              $$EnhancerByCGLIB$$ee4442c4.selectCountByCondition(<generated>)


大文字と小文字の区別によるエラーだと思いましたが
DBのテーブル名もDAOで記載してあるDB名どちらとも大文字で書いてあります。

小文字でsqlが発行されているのではないかと思ったのですが、
そのような仕様だったりするのでしょうか?
dbのインストールミスかもしれませんが上記についてご指導お願いします。

同じ現象です(S2DAOのID自動生成機能について)

いまだ (2005-02-08 15:25:53 (火))

s2-dao-1.0.18を使用しています。
identityを使ったIDの自動生成で、自動生成された値がBeanにセットされません。

DBはHSQLDBです。

・テーブルクリエイト文は以下のとおりです。

create table HOGE (
  ID      INTEGER NOT NULL IDENTITY,
  NAME    varchar(10),
  PRIMARY KEY (ID)
);


・JavaBeansは以下のとおりです。
(検証の為に、idの初期値をわざと-1にしています。)

package examples.dao;

import java.io.Serializable;

public class Hoge implements Serializable {
    public static final String TABLE = "hoge";
    public static final String id_ID = "identity";

    private int id = -1;
    private String name;

    public Hoge() {
    }

    /**
     * @return id を戻します。
     */
    public int getId() {
        return id;
    }
    /**
     * @param id id を設定。
     */
    public void setId(int id) {
        this.id = id;
    }
    /**
     * @return name を戻します。
     */
    public String getName() {
        return name;
    }
    /**
     * @param name name を設定。
     */
    public void setName(String name) {
        this.name = name;
    }
}


・daoは以下のとおりです。

package examples.dao;
public interface HogeDao {
    public Class BEAN = Hoge.class;
    public void insert(Hoge hoge);
}


・diconファイルは以下のとおりです。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
    "http://www.seasar.org/dtd/components.dtd">
<components> 
   <include path="dao.dicon"/>
   <component class="examples.dao.HogeDao">
       <aspect>dao.interceptor</aspect>
   </component>
</components>

・テスト用クラスは以下のとおりです。

package examples.dao;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;

public class HogeDaoClient {

    private static final String PATH = "examples/dao/HogeDao.dicon";

    public static void main(String[] args) {
        S2Container container = S2ContainerFactory.create(PATH);
        container.init();
        try {
            HogeDao dao = (HogeDao) container
                    .getComponent(HogeDao.class);
            Hoge hoge = new Hoge();
            hoge.setName("foo");
            
            System.out.println("before insert id:" + hoge.getId());
            dao.insert(hoge);
            System.out.println("after insert id:" + hoge.getId());
            
        } finally {
            container.destroy();
        }
   }
}



・実行結果は以下のようになります。

before insert id:-1
DEBUG 2005-02-08 15:13:08,405 [main] 物理的なコネクションを取得しました
DEBUG 2005-02-08 15:13:08,415 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-08 15:13:09,336 [main] 論理的なコネクションを閉じました
DEBUG 2005-02-08 15:13:09,366 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-08 15:13:09,376 [main] INSERT INTO hoge (name) VALUES('foo')
DEBUG 2005-02-08 15:13:09,426 [main] CALL IDENTITY()
DEBUG 2005-02-08 15:13:09,436 [main] 物理的なコネクションを取得しました
DEBUG 2005-02-08 15:13:09,436 [main] 論理的なコネクションを取得しました
DEBUG 2005-02-08 15:13:09,476 [main] 論理的なコネクションを閉じました
DEBUG 2005-02-08 15:13:09,476 [main] 論理的なコネクションを閉じました
after insert id:0
DEBUG 2005-02-08 15:13:09,486 [main] 物理的なコネクションを閉じました
DEBUG 2005-02-08 15:13:09,486 [main] 物理的なコネクションを閉じました

テーブルのIDカラムには正しくセットされていますが、
何度実行しても、
after insert id:0
となってしまい、自動生成されたid番号が取得できません。

なお、
SEQUENCEを使ったID自動生成では、うまくidを取得できました。

-1から0に変わっているので、
何かしらセットされているのだと思いますが、うまくいかないようです。

S2DAOのID自動生成機能について

ko-chan (2005-02-08 11:10:26 (火))

ドキュメンテーションの通りにやっているのですが、ID自動生成機能が使えません。
ドキュメンテーションの設定以外にも設定が必要なのでしょうか?

ドキュメントの設定→『public static final String id_ID = "identity";』

selectのDAOについて

9 (2005-01-21 (金) 09:28:41)

char項目をselectのDAOで取得する際、
実際にDBに入っているデータより多くスペース
がついています。(データが2バイト文字の場合)
4桁のcharの項目に1文字(2バイト文字)のデータが入っている場合,
取得されるデータは3つのスペースが付加されます。
2バイト文字がフル桁ではいっている場合もスペースが付加されます。
対応策はないのでしょうか?

daoについて

9 (2005-01-20 (木) 17:14:45)

updateのDAOを作成したのですが、
実際に.sqlのファイルに書いてあるSQL文と
少し違うSQL文が発行されてしまいます。
また、.sqlを修正してもログに書かれるSQL文は変わらなくて
困っています。名前をあわせること以外に何か重要なことでも
有るのでしょうか?

デバッグ方法

うちま (2004-11-25 (木) 20:34:47)

S2JSFやS2Strutsにおけるバインディングの間違い、S2全般でコンポーネント登録漏れ等 dicon が関係する問題が発生した場合はどの様にデバッグを行えば良いのでしょうか。

またkijimunaを利用するにしてもミスを発生させにくいdiconの書き方の骨のようなものがあれば教えて下さい。

ステートパターンの実装

essence (2004-11-25 (木) 13:42:07)

seasar環境でステートパターンを実装するときに、インターフェースと実装の対応が実行時に1対1だと状態によるインスタンスを区別することが難しいと思うんですが、この場合どうしたらいいでしょうか。

無題

(2004-11-18 (木) 23:28:42)

diconが増えてきたのですが、1箇所にまとめたりする方法などあるのでしょうか?

初めて使う人によく聞かれること

S2DAOでのrollbackについて

にと (2005-03-15 11:23:05 (火))

DB更新処理で
1.トランザクション開始
2.テーブルA更新 →成功
3.テーブルB更新 →失敗
4.ロールバック →トランザクション開始まで戻る
のような処理を実現したいのですが、
サンプルソースや情報源教えて下さい。

FAQ向けの質問案


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS