Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

seasar2の使用方法について

宜しくお願い致します。

seasar2のS2JDBCを使用してDB接続を設定ファイル(dicon?)に外出ししたアプリケーションを作成したいと思っております。

まず
http://s2container.seasar.org/2.4/ja/setup.html
を参考に
JDK->Tomcat->Eclipse->seasar2のオールインワンパッケージであるchura(doltengをインストールすると自動で入ったみたい?)をインストールしました。
各ソフトウェアのバージョンも上記リンクの通りです。

次に
http://s2container.seasar.org/ja/s2jdbc.html
を参考にS2JDBCを設定しようと思ったのですが、
「SelectBeanList.dicon」「SelectBeanListClient」をどこに作成すれば良いのかわかりません。
「プロジェクトディレクトリ\examples\jdbc」というディレクトリを作成して、そこに両ファイルを配置すればよいのでしょうか?
ディレクトリパスとパッケージパスを混同してしまっているのかもしれませんので小職でも引き続き勉強してるのですが、わかる事がありましたら是非ご教示下さい。

宜しくお願い致します。

2

回答

10168

閲覧

2件の回答

評価

0

classが設置されているフォルダ・・・

評価

0

あのひと様 返信ありがとうございます。

EclipseにJavaプロジェクトを作成して、構成を以下のようにしました。

seasartest(プロジェクトルート)
 convention.dicon
 jdbc.dicon
 /hsql
 /bin
 /sql
 /jdbc
  SelectBeanList.dicon
 /lib
  aopalliance-1.0.jar
  commons-logging-1.1.jar
  geronimo-ejb_2.1_spec-1.0.jar
  geronimo-j2ee_1.4_spec-1.0.jar
  geronimo-jta_1.1_spec-1.0.jar
  hsqldb-1.8.0.1.jar
  javassist-3.4.ga.jar
  junit-3.8.2.jar
  junit-addons-1.4.jar
  log4j-1.2.13.jar
  ognl-2.6.9-patch-20070624.jar
  poi-3.0-FINAL.jar
  portlet-api-1.0.jar
  s2-extension-2.4.17.jar
  s2-framework-2.4.17.jar
 /src
  Main.java(メインクラス)

「SelectBeanList.dicon」の内容は以下です(宣言略)。
<components>
<include path="j2ee.dicon"/>
<component name="selectBeanListHandler"
class="org.seasar.extension.jdbc.impl.BasicSelectHandler">
<property name="sql">
"SELECT * FROM emp"
</property>
<property name="resultSetHandler">
<component class="org.seasar.extension.jdbc.impl.BeanListResultSetHandler">
<arg>@src.Main@class</arg>
</component>
</property>
</component>
</components>

また「SelectBeanListClient」の代わりである「Main」の内容は以下です(同)。
public class Main {
private static final String PATH =
"jdbc/SelectBeanList.dicon";
public static void main(String[] args) {
S2Container container = S2ContainerFactory.create(PATH);
container.init();
try {
SelectHandler handler = (SelectHandler)
container.getComponent("selectBeanListHandler");
List result = (List) handler.execute(null);
for (int i = 0; i < result.size(); ++i) {
System.out.println(result.get(i));
}
} finally {
container.destroy();
}
}
}

上記から、seasartest/hsql/bin/runHsqldb.batでHSQLDBを起動して、EclipseからMainを実行します。
すると以下のエラーが出力されました。
log4j:WARN No appenders could be found for logger (org.seasar.framework.container.factory.S2ContainerFactory).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.seasar.framework.exception.SQLRuntimeException: [ESSR0072]SQLで例外(SQL=[SELECT * FROM emp], Message=[[ESSR0072]SQLで例外(SQL=[SELECT * FROM emp], Message=[Table not found in statement [SELECT * FROM emp]], ErrorCode=-22, SQLState=S0002)が発生しました : [SQLで例外(Message=[Table not found in statement [SELECT * FROM emp]], ErrorCode=-22, SQLState=S0002)が発生しました。], [Table not found in statement [SELECT * FROM emp]], ErrorCode=-22, SQLState=S0002)が発生しました
    at org.seasar.extension.jdbc.util.ConnectionUtil.prepareStatement(ConnectionUtil.java:92)
    at org.seasar.extension.jdbc.impl.BasicStatementFactory.createPreparedStatement(BasicStatementFactory.java:39)
    at org.seasar.extension.jdbc.impl.ConfigurableStatementFactory.createPreparedStatement(ConfigurableStatementFactory.java:67)
    at org.seasar.extension.jdbc.impl.BasicHandler.prepareStatement(BasicHandler.java:171)
    at org.seasar.extension.jdbc.impl.BasicSelectHandler.prepareStatement(BasicSelectHandler.java:232)
    at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:208)
    at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:184)
    at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:177)
    at src.Main.main(Main.java:30)
Caused by: org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[SELECT * FROM emp], Message=[Table not found in statement [SELECT * FROM emp]], ErrorCode=-22, SQLState=S0002)が発生しました
    at org.seasar.extension.dbcp.impl.ConnectionWrapperImpl.wrapException(ConnectionWrapperImpl.java:544)
    at org.seasar.extension.dbcp.impl.ConnectionWrapperImpl.prepareStatement(ConnectionWrapperImpl.java:162)
    at org.seasar.extension.jdbc.util.ConnectionUtil.prepareStatement(ConnectionUtil.java:90)
    ... 8 more
Caused by: java.sql.SQLException: Table not found in statement [SELECT * FROM emp]
    at org.hsqldb.jdbc.Util.throwError(Unknown Source)
    at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
    at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
    at org.seasar.extension.dbcp.impl.ConnectionWrapperImpl.prepareStatement(ConnectionWrapperImpl.java:158)
    ... 9 more

調べてみるとHSQLDBが起動してない場合に発生するようですが、今回は先にHSQLDBを起動しているので問題ないと思います。
ちなみにJDBC.diconのHSQLDBに関する抜粋箇所は以下です。
<!-- for HSQLDB -->
<component name="xaDataSource"
    class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
    <property name="driverClassName">
        "org.hsqldb.jdbcDriver"
    </property>
    <property name="URL">
        "jdbc:hsqldb:mem:."
    </property>
    <property name="user">"sa"</property>
    <property name="password">""</property>
</component>

以上、何らかご教示いただけると助かります。
宜しくお願い致します。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。