C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: Seasar2とS2JDBCの使用方法


(過去ログ 20 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■8539 / inTopicNo.1)  Seasar2とS2JDBCの使用方法
  
□投稿者/ exceptions (1回)-(2007/10/02(Tue) 17:47:59)

分類:[Java] 

宜しくお願い致します。

JDK5.0
Eclipse3.2
Tomcat5.5
Tomcat Plugin3.2
Dolteng
DbLauncher

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

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

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

宜しくお願い致します。
引用返信 編集キー/
■8552 / inTopicNo.2)  Re[1]: Seasar2とS2JDBCの使用方法
□投稿者/ かずき (8回)-(2007/10/02(Tue) 22:06:17)
かずき さんの Web サイト
No8539 (exceptions さん) に返信
> 宜しくお願い致します。
>
> JDK5.0
> Eclipse3.2
> Tomcat5.5
> Tomcat Plugin3.2
> Dolteng
> DbLauncher
>
> seasar2のS2JDBCを使用して、DB接続を設定ファイル(dicon?)に外出ししたアプリケーションを作成したいと思っております。
アプリケーションってWebアプリですよね?

> http://s2container.seasar.org/ja/s2jdbc.html
> を参考にS2JDBCを設定しようと思ったのですが、
> 「SelectBeanList.dicon」「SelectBeanListClient」をどこに作成すれば良いのかわかりません。
> 「プロジェクトディレクトリ\examples\jdbc」というディレクトリを作成して、そこに両ファイルを配置すればよいのでしょうか?
Eclipseならソースフォルダにexamples.jdbcというパッケージを作ってください。
そこにSelectBeanList.diconとSelectBeanListClientを入れます。
ただ、サンプルはWebアプリじゃなくてコンソールアプリですけど大丈夫ですか?

引用返信 編集キー/
■8567 / inTopicNo.3)  Re[2]: Seasar2とS2JDBCの使用方法
□投稿者/ exceptions (3回)-(2007/10/03(Wed) 10:14:58)
かずき さん 返信、ありがとうございます。

> アプリケーションってWebアプリですよね?
Javaのバッチ処理を行いたいので、コンソールアプリにするつもりです。

> Eclipseならソースフォルダにexamples.jdbcというパッケージを作ってください。
> そこにSelectBeanList.diconとSelectBeanListClientを入れます。
> ただ、サンプルはWebアプリじゃなくてコンソールアプリですけど大丈夫ですか?
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=[], Message=[Connection is broken [90067-56]], ErrorCode=90067, SQLState=90067)が発生しました
at org.seasar.extension.jdbc.util.DataSourceUtil.getConnection(DataSourceUtil.java:50)
at org.seasar.extension.jdbc.impl.BasicHandler.getConnection(BasicHandler.java:157)
at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:182)
at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:177)
at src.Main.main(Main.java:30)
Caused by: org.h2.jdbc.JdbcSQLException: Connection is broken [90067-56]
at org.h2.message.Message.getSQLException(Message.java:84)
at org.h2.message.Message.getSQLException(Message.java:66)
at org.h2.message.Message.getSQLException(Message.java:105)
at org.h2.engine.SessionRemote.checkClosed(SessionRemote.java:248)
at org.h2.engine.SessionRemote.connect(SessionRemote.java:220)
at org.h2.engine.SessionRemote.<init>(SessionRemote.java:163)
at org.h2.engine.SessionRemote.createSession(SessionRemote.java:158)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:921)
at org.h2.Driver.connect(Driver.java:51)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at org.seasar.extension.dbcp.impl.XADataSourceImpl.getXAConnection(XADataSourceImpl.java:156)
at org.seasar.extension.dbcp.impl.XADataSourceImpl.getXAConnection(XADataSourceImpl.java:146)
at org.seasar.extension.dbcp.impl.ConnectionPoolImpl.createConnection(ConnectionPoolImpl.java:297)
at org.seasar.extension.dbcp.impl.ConnectionPoolImpl.checkOut(ConnectionPoolImpl.java:259)
at org.seasar.extension.dbcp.impl.DataSourceImpl.getConnection(DataSourceImpl.java:63)
at org.seasar.extension.jdbc.util.DataSourceUtil.getConnection(DataSourceUtil.java:48)
... 4 more

調べてみるとHSQLDBが起動してない場合に発生するようですが、今回は先にHSQLDBを起動しているので問題ないと思います。

長文で申し訳ございませんが、ご教示いただけると幸いです。
宜しくお願い致します。
引用返信 編集キー/
■8570 / inTopicNo.4)  Re[3]: Seasar2とS2JDBCの使用方法
□投稿者/ exceptions (4回)-(2007/10/03(Wed) 11:19:49)
追加自己レスです。

JDBC.diconのHSQLDBに関する箇所を以下のように変更したら connection is broken は発生しなくなりました。
ちなみに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>

が、また新たに以下のエラーが発生しました。
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

以上、何らかご教示いただけると助かります。
宜しくお願い致します。
引用返信 編集キー/
■8576 / inTopicNo.5)  Re[4]: Seasar2とS2JDBCの使用方法
□投稿者/ かずき (9回)-(2007/10/03(Wed) 13:24:09)
かずき さんの Web サイト
DBにテーブル作ってますか?
> Caused by: java.sql.SQLException: Table not found in statement [SELECT * FROM emp
引用返信 編集キー/
■8577 / inTopicNo.6)  Re[5]: Seasar2とS2JDBCの使用方法
□投稿者/ かずき (10回)-(2007/10/03(Wed) 13:27:10)
かずき さんの Web サイト
あ〜あとjdbc:hsqldb:memだとメモリ内にDB作っちゃいそうですけど
これは意図どおりですか?
引用返信 編集キー/
■8582 / inTopicNo.7)  Re[6]: Seasar2とS2JDBCの使用方法
□投稿者/ exceptions (6回)-(2007/10/03(Wed) 14:27:12)
返信ありがとうございます。

> DBにテーブル作ってますか?
テーブルは作成して、データも投入済みです。

> あ〜あとjdbc:hsqldb:memだとメモリ内にDB作っちゃいそうですけど
> これは意図どおりですか?
すみません、これは認識不足でした。

JDBC.diconの記述を
<property name="URL">
"jdbc:hsqldb:mem:."
</property>
から
<property name="URL">
"jdbc:hsqldb:hsql://localhost:9001"
</property>
に変更してHSQLDBをtype:serverで再起動したところ、上記エラーは発生しなくなりました。
が、更に新たに以下のエラーが発生しました。。
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.beans.PropertyNotFoundRuntimeException: [ESSR0065]クラス(src.Main)のプロパティ(EMPNO)が見つかりません
at org.seasar.framework.beans.impl.BeanDescImpl.getPropertyDesc(BeanDescImpl.java:132)
at org.seasar.extension.jdbc.impl.AbstractBeanResultSetHandler.createPropertyTypes(AbstractBeanResultSetHandler.java:92)
at org.seasar.extension.jdbc.impl.BeanListResultSetHandler.handle(BeanListResultSetHandler.java:48)
at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:258)
at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:210)
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)

Mainクラスの該当内容は以下です。
List result = (List) handler.execute(null);

SelectBean.diconの下記部分、
<component class="org.seasar.extension.jdbc.impl.BeanListResultSetHandler">
<arg>@src.Main@class</arg>
</component>
特に
<arg>@src.Main@class</arg>
について理解が追いついていません。
調査してますと「SQL文での列名と<arg>タグで指定したBean(class?)のプロパティ名を同じとする」
とのことだったので、Mainクラス内にテーブルのカラム名でフィールドを作成すればよいのでしょうか?

O/Rマッピングについても込みで引き続き調査します。
宜しくお願い致します。
引用返信 編集キー/
■8586 / inTopicNo.8)  Re[7]: Seasar2とS2JDBCの使用方法
□投稿者/ exceptions (7回)-(2007/10/03(Wed) 14:39:38)
追加自己レスです。

「SQL文での列名と<arg>タグで指定したBean(class?)のプロパティ名を同じとする」
を実現するために下記の試行をしました。

SelectBean.diconの
<component class="org.seasar.extension.jdbc.impl.BeanListResultSetHandler">
<arg>@src.Main@class</arg>
</component>
を、
<component class="org.seasar.extension.jdbc.impl.BeanListResultSetHandler">
<arg>@src.DBResultSet@class</arg>
</component>
に変更。
併せてsrc/DBResultSet.javaを以下の内容で作成。
public class DBResultSet {
//HSQLDBのselect結果格納用のプロパティ
public String EMPNO;
public String ENAME;
public String JOB;
public String MGR;
public String HIREDATE;
public String SAL;
public String COMM;
public String DEPTNO;
}

上記で実行するとエラーは発生しませんでした。
しかし出力結果が以下の通りで、DBの出力データが表示されませんでした。
log4j:WARN No appenders could be found for logger (org.seasar.framework.container.factory.S2ContainerFactory).
log4j:WARN Please initialize the log4j system properly.
src.DBResultSet@1ea5671
src.DBResultSet@1d15445
src.DBResultSet@1f3aa07
src.DBResultSet@1fc2fb
src.DBResultSet@139eeda
src.DBResultSet@704baa
src.DBResultSet@77a7f9
src.DBResultSet@1b4fad5
src.DBResultSet@bfea1d
src.DBResultSet@1a33d48
src.DBResultSet@c68c3
src.DBResultSet@b2002f
src.DBResultSet@2a4983
src.DBResultSet@406199

現在DBResultSetクラスのプロパティ設定を見直している途中です。
ところで、DBResultSetクラスのようなDB結果格納オブジェクトは自動生成できないのでしょうか?
O/Rマッピングについても薄学なので、問題解決と併せて、O/Rマッピング概念->実証(Hibernate?)と深めていきたいと思います。

以上、宜しくお願い致します。
引用返信 編集キー/
■8614 / inTopicNo.9)  Re[8]: Seasar2とS2JDBCの使用方法
□投稿者/ かずき (11回)-(2007/10/04(Thu) 00:28:44)
かずき さんの Web サイト
個人的には、Javaの基礎 -> JDBCの基礎 -> Seasar2自体の理解 -> S2JDBCと進んだほうがトラブルが少ないように思います。
遠回りなようでも、そこから理解を進めていくのが近道です。
引用返信 編集キー/
■8615 / inTopicNo.10)  Re[9]: Seasar2とS2JDBCの使用方法
□投稿者/ かずき (12回)-(2007/10/04(Thu) 00:30:17)
かずき さんの Web サイト
自動生成してくれるツールはいくつかあったと思います。
具体名は調べないと出てこないので、ちょっと出せませんが。

自分で作っても、頑張れば数日あれば出来上がると思います。
(Doltengにそういう機能があったかも)
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -