[seasar-dotnet:932] 作成したDaoインタフェースのメソッド呼び出しで例外発生
Yoshihiro OSHITA
[E-MAIL ADDRESS DELETED]
2008年 10月 11日 (土) 14:31:02 JST
S2Dao.NETを使い始めたばかりの初心者です。
MLの投稿も初めていたします。
SQLiteのDBアクセスに対してS2Dao.NETを利用してみようと思い、Consoleアプリのサンプルを作成してみました。
しかし、作成したDaoインタフェースのメソッド呼び出しで例外発生し、原因が分からずに困っています。
長くなりますが、環境などを詳細に書きますと以下のようになっています。
環境----------------------------------
OS:Windows XP SP3
言語:C#(.NET Framework3.5)
開発環境:VisualStudio 2008
DB:SQLite(SQLite.dll 1.0.59.0)
S2Dao.NET:1.3.11
--------------------------------------
構成----------------------------------
【ソリューション】
MyS2DaoSample
┗━【プロジェクト】MyS2DaoSample
┣━【参照】Seasar.dll、Seasar.Dao.dll、SQLite.dll
┣━【設定ファイル】app.config、app.dicon,Dao.dicon,S2Dao.dicon,Ado.dicon(それぞれ、「常にコピーする」に設定)
┣━【クラス】ILibraryDao.cs, Library.cs, Program.cs
┗━【DBファイル】Library.SQ3
--------------------------------------
app.config----------------------------
<configuration>
<configSections>
<section name="seasar" type="Seasar.Framework.Xml.S2SectionHandler,
Seasar" />
</configSections>
<seasar>
<configPath>App.dicon</configPath>
<assemblys>
<assembly>Seasar.Dao</assembly>
<assembly>System.Data.SQLite</assembly>
</assemblys>
</seasar>
</configuration>
--------------------------------------
App.dicon-----------------------------
<components>
<include path="Dao.dicon"/>
</components>
--------------------------------------
Dao.dicon-----------------------------
<components namespace="Dao">
<include path="S2Dao.dicon"/>
<component class="MyS2DaoSample.ILibraryDao">
<aspect>S2Dao.Interceptor</aspect>
</component>
</components>
--------------------------------------
S2Dao.dicon---------------------------
<components namespace="S2Dao">
<include path="Ado.dicon" />
<component class="Seasar.Extension.ADO.Impl.BasicDataReaderFactory" />
<component class="Seasar.Extension.ADO.Impl.BasicCommandFactory" />
<component class="Seasar.Dao.Impl.FieldAnnotationReaderFactory" />
<component class="Seasar.Dao.Impl.DaoMetaDataFactoryImpl" />
<component name ="Interceptor"
class ="Seasar.Dao.Interceptors.S2DaoInterceptor"/>
</components>
--------------------------------------
Ado.dicon-----------------------------
<components namespace="Ado">
<component name="SQLiteClient" class="Seasar.Extension.ADO.DataProvider">
<property
name="ConnectionType">"System.Data.SQLite.SQLiteConnection"</property>
<property
name="CommandType">"System.Data.SQLite.SQLiteCommand"</property>
<property
name="ParameterType">"System.Data.SQLite.SQLiteParameter"</property>
<property
name="DataAdapterType">"System.Data.SQLite.SQLiteDataAdapter"</property>
</component>
<component name="DataSource"
class="Seasar.Extension.Tx.Impl.TxDataSource">
<property name="DataProvider">SQLiteClient</property>
<property name="ConnectionString">
"Data
Source=Library.SQ3;New=True;Compress=False;Synchronous=Off;UTF8Encoding=False;Version=3"
</property>
</component>
</components>
--------------------------------------
このような設定ファイルを作成しました。
これに対して、作成したDaoインタフェースのソースは、
ILibraryDao.cs ===========================
namespace MyS2DaoSample {
[Bean(typeof(Library))]
public interface ILibraryDao {
Library[] GetAllLibraries();
int Insert(Library library);
int Update(Library library);
int Delete(Library library);
}
}
=======================================
のようになっており、Entityクラスは、
Library.cs ===============================
namespace MyS2DaoSample{
[Table("lib_mgmt_list_tbl")]
public class Library
{
private String _libID;
private String _libName;
private String _userName;
private DateTime _creationTime;
private DateTime _lastAccessTime;
private DateTime _lastWriteTime;
public Library() {}
public String LibID {
get { return _libID; }
set { _libID = value; }
}
public String LibName {
get { return _libName; }
set { _libName = value; }
}
public String UserName {
get { return _userName; }
set { _userName = value; }
}
public DateTime CreationTime {
get { return _creationTime; }
set { _creationTime = value; }
}
public DateTime LastAccessTime {
get { return _lastAccessTime; }
set { _lastAccessTime = value; }
}
public DateTime LastWriteTime {
get { return _lastWriteTime; }
set { _lastWriteTime = value; }
}
}
}
=======================================
のようにしました。これをMain関数で
Program.cs ===============================
namespace MyS2DaoSample{
class Program {
static void Main(string[] args) {
try {
SingletonS2ContainerFactory.ConfigPath = "App.dicon";
SingletonS2ContainerFactory.Init();
IS2Container container =
SingletonS2ContainerFactory.Container;
ILibraryDao libraryDao =
(ILibraryDao)container.GetComponent(typeof(ILibraryDao));
Library[] libs = libraryDao.GetAllLibraries();
Console.WriteLine("終了");
}
(略)
}
}
}
=======================================
のようにして、GetAllLibrariesメソッドを呼びました。
ここで、「オブジェクト参照がオブジェクトインスタンスに設定されていません。」
という例外が発生します。StackTraceは、
=======================================
場所 Seasar.Extension.Tx.Impl.TxDataSource.GetConnection()
場所 Seasar.Dao.Dbms.DbmsManager.GetDbms(IDataSource dataSource)
場所 Seasar.Dao.Impl.DaoMetaDataImpl.Initialize()
場所 Seasar.Dao.Impl.DaoMetaDataFactoryImpl.CreateDaoMetaData(Type daoType)
場所 Seasar.Dao.Impl.DaoMetaDataFactoryImpl.GetDaoMetaData(Type daoType)
場所 Seasar.Dao.Interceptors.S2DaoInterceptor.Invoke(IMethodInvocation
invocation)
場所 Seasar.Framework.Aop.Proxy.AopProxy.Invoke(IMessage msg)
場所 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&
msgData, Int32 type)
場所 MyS2DaoSample.ILibraryDao.GetAllLibraries()
場所 MyS2DaoSample.Program.Main(String[] args)
場所 C:\Documents…\Visual Studio
2008\Projects\MyS2DaoSample\MyS2DaoSample\Program.cs:行 22
=======================================
のようになっております。
原因について、ご教授いただけないでしょうか?
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20081011/f2432e97/attachment.html>
seasar-dotnet メーリングリストの案内