[seasar-dotnet:1774] Re: メソッド単位にかけたトランザクションがクラス全体にかかる

kubo [E-MAIL ADDRESS DELETED]
2010年 7月 9日 (金) 23:05:40 JST


久保(jflute)です。

ナガイシさん、こんばんは

> また質問で申しわけありませんが
> オープンソースの利用が初めてでよく分かっていないのですが
> 今回の修正分はどのように提供されるのでしょうか?

基本的に、1.3.18 で反映されます。
オープンソースの組織によって色々変わりますが、
Seasar.NETでは、報告頂いたユーザに修正したSNAPSHOTを
試してもらって、問題なければ次のバージョンに含めるという
手順が主です(そうじゃない手順もありますが)。
もちろんSeasar.NET側でもできるだけテストしますが、
ユーザの環境でないと再現しにくいものもありますし。
ということで、ナガイシさんに確認して頂けたので、
1.3.18 にこの修正が反映される流れです。

パッチを提供する、という運用はあまり行われていません。
オープンソースなので、修正のSNAPSHOTは公開されていますし、
そもそもユーザ自身がソースを修正してそれを利用すれば、
ある意味それがパッチと言えますので。

で、1.3.18 がいつリリースされるかという話は、
おおよそ、"修正項目が増えてきたら"、
"早めに提供したい修正項目があったら"、
"ユーザからのリリース要望があったら"、
"コミッタがリリース作業する時間が確保できたら"
のようなところです。

なので、ナガイシさんのプロジェクトの都合で、
リリースを早めてもらいたいのであれば、
そのように(このMLで)言って頂ければと。
(もちろん、"リリース作業時間の確保" の話もあるので、
すぐにできるかどうか保証はないですが)

2010/7/9  <[E-MAIL ADDRESS DELETED]>:
> 小谷さん
>
> ナガイシです。
>
> ご返信ありがとうございます。
>
> 結果から話しますと
> メソッド単位のトランザクションできるように
> なりました。
>
> 下記の手順でDLLを置き換えてうまくできました。
>
> 修正して頂き、ありがとうございました。
>
>
> また質問で申しわけありませんが
> オープンソースの利用が初めてでよく分かっていないのですが
> 今回の修正分はどのように提供されるのでしょうか?
>
> 今回ご提供頂いたソースは現在、Seasar.NetのHPから
> 入手できる1.3.17とは別もの?なると思います。
>
> 例えば、今回の修正内容は1.3.18や
> 1.3.17のパッチ版などでHPでDLL等含めて提供されるのか
> など、今後の動き・反映の段取りはどうなるのでしょうか?
>
> このあたりの分かるHPや資料などありましたら
> 入手方法を教えて頂ければありがたいのです。
>
> ご指摘等ございましたら、ご返信をお願い致します。
>
>
>
>>ナガイシさん
>>
>>小谷です。
>>
>>もしVisualStudioでC#もコンパイル可能な環境でしたら
>>https://www.seasar.org/svn/s2container.net/trunk/s2container.net/
>>からsuversionでソースコードを取得し、
>>コンパイルして他のseasar.net系のdllも一緒に
>>置き換えてみていただけないでしょうか。
>>(Seasar.Quillのbinフォルダの中にコンパイルした
>>dll等が出力されているはずです)
>>
>>
>>2010年7月8日13:45  <[E-MAIL ADDRESS DELETED]>:
>>> 小谷さん
>>>
>>> ナガイシです。
>>>
>>> 修正ありがとうございます。
>>>
>>> メーリングリストのメールアドレスを変更した為
>>> スレッドが切れた場合は申し訳ありません。
>>>
>>> 投稿元:[seasar-dotnet:1760]メソッド単位にかけたトランザクションがクラス全体にかかる
>>>
>>>
>>> 修正DLLをダウンロードし、置き換えて実行したのですが
>>> 以下のエラーが発生しました。
>>>
>>> Web ServiceのWeb.Configの<quill>タグのところで以下のエラーが
>>> 出ているようです。
>>>
>>> DEBUG 2010-07-08 13:36:17,918 [10] System.Web.Services.Protocols.SoapException:
>>>  System.Web.Services.Protocols.SoapException: サーバーは要求を処理できませんでした。
>>>  ---> System.Configuration.ConfigurationErrorsException:
>>> quill のための構成セクション ハンドラを作成中にエラーが発生しました。:
>>>  アセンブリ 'Seasar, Version=1.3.17.0, Culture=neutral, PublicKeyToken=1d0d0c484d50ca62' から
>>> 型 'Seasar.Framework.Util.ConfigSectionUtil' を読み込めませんでした。
>>>  (D:\Program Files\Source\SampleSmartClient\SampleSmartClient\SampleWebService\web.config line 142)
>>> ---> System.TypeLoadException:
>>>  アセンブリ 'Seasar, Version=1.3.17.0, Culture=neutral, PublicKeyToken=1d0d0c484d50ca62' から
>>> 型 'Seasar.Framework.Util.ConfigSectionUtil' を読み込めませんでした。
>>>
>>> DLLを元に戻すと上記のエラーは発生しませんでした。
>>>
>>> 何かお気づきの点があれば、ご返信をお願いいたします。
>>>
>>>
>>>
>>>
>>>>ナガイシさん
>>>>
>>>>小谷です。
>>>>
>>>>ソースコードを修正しました。
>>>>
>>>>VB.NETをお使いとのことなので
>>>>https://www.seasar.org/svn/s2container.net/trunk/s2container.net/seasar_dotnet1760
>>>>にコンパイル済の修正DLLを一時的に置きました。
>>>>
>>>>お使いのSeasar.Quill.dllをこのDLLに置き換えて
>>>>問題が修正されているか(Transaction属性を指定したメソッドにのみ
>>>>トランザクションが適用されているか)ご確認いただけないでしょうか。
>>>>
>>>>2010年7月7日6:42 koyak <[E-MAIL ADDRESS DELETED]>:
>>>> ナガイシさん
>>>>
>>>> 小谷です。
>>>>
>>>> ご確認ありがとうございます。
>>>> こちらの環境でも問題が再現しました。
>>>>
>>>> 修正方法を考えてみようと思います。
>>>>
>>>> 2010年7月6日21:59 kircheis <[E-MAIL ADDRESS DELETED]>:
>>>>> 小谷さん ご返信ありがとうございます。
>>>>> 回答が遅れてすみません。
>>>>>
>>>>> 最初にログの件ですが
>>>>> SampleBusinessLogicImplクラスのDataInsertメソッドにのみ
>>>>> Transaction属性を付加し、DataInsertメソッドを実行した場合のログです。
>>>>> DEBUG 2010-07-06 14:00:30,225 [4] 論理的なコネクションを取得しました
>>>>> DEBUG 2010-07-06 14:00:30,225 [4] トランザクションを開始しました
>>>>> DEBUG 2010-07-06 14:00:30,225 [4] INSERT INTO M_TEST (BIKO, SEQID,
>>>>> BIRTH, NAME) VALUES ('aaaaa', ' ', '2010-07-06 14.00.19', 'bb')
>>>>> DEBUG 2010-07-06 14:00:30,240 [4] トランザクションをロールバックしました
>>>>> DEBUG 2010-07-06 14:00:30,240 [4] 論理的なコネクションを閉じました
>>>>>
>>>>> 次にDataInsertメソッドにのみTransaction属性を付加し
>>>>> 付加していないSampleBusinessLogicImplクラスのDataUpdateメソッドを
>>>>> 実行した場合のログです。
>>>>> DEBUG 2010-07-06 14:01:45,365 [4] 論理的なコネクションを取得しました
>>>>> DEBUG 2010-07-06 14:01:45,365 [4] トランザクションを開始しました
>>>>> DEBUG 2010-07-06 14:01:45,365 [4] UPDATE M_TEST SET BIKO = 'aaaaaa',
>>>>> BIRTH = '2010-07-06 14.01.38', NAME = 'bbbbb WHERE SEQID = '9 '
>>>>> DEBUG 2010-07-06 14:01:45,381 [4] トランザクションをコミットしました
>>>>> DEBUG 2010-07-06 14:01:45,381 [4] 論理的なコネクションを閉じました
>>>>>
>>>>> Transaction属性を全く付加しない場合のDataInsertメソッドのログは以下の通
>>>>> りです。
>>>>> DEBUG 2010-07-06 14:03:27,365 [4] 論理的なコネクションを取得しました
>>>>> DEBUG 2010-07-06 14:03:27,381 [4] 論理的なコネクションを閉じました
>>>>> DEBUG 2010-07-06 14:03:27,428 [4] INSERT INTO M_TEST (BIKO, SEQID,
>>>>> BIRTH, NAME) VALUES (aaaaa', '9 ', '2010-07-06 14.01.38', 'bbbbb')
>>>>> DEBUG 2010-07-06 14:03:27,428 [4] 論理的なコネクションを取得しました
>>>>> DEBUG 2010-07-06 14:03:27,443 [4] 論理的なコネクションを閉じました
>>>>>
>>>>> 上記のログはSampleBusinessLogicImplクラスのメソッドに
>>>>> Transaction属性を付加した場合です。
>>>>> SampleBusinessLogicImplクラスに対してTransaction属性を
>>>>> 付加した場合、当然トランザクションは実行されます。
>>>>>
>>>>> また、ISampleBusinessLogicインターフェースのDataInsertメソッドや
>>>>> IM_TESTdaoインターフェースのInsertDataメソッドにTransaction属性を
>>>>> 付加してもトランザクションが実行されませんでした。
>>>>>
>>>>>
>>>>>
>>>>> 2番目のWebサービスを介さない場合ですが
>>>>> (1)Windows Form (SampleFormクラス)
>>>>>>>>>> (3)BusinessLogic (SampleBusinessLogicImplクラス
>>>>> (←ISampleBusinessLogicインターフェース)) ※トランザクション属性
>>>>>>>>>> (4)DAO Interface (IM_TESTdaoインターフェース)
>>>>> の構成でもWebサービス経由と同様の結果でした。
>>>>>
>>>>> 何かお気づきの点があれば、ご返信をお願いいたします。
>>>>>
>>>>>
>>>>>
>>>>> (2010/07/06 7:27)
>>>>>> 連投失礼します。
>>>>>>
>>>>>> ナガイシさん
>>>>>>
>>>>>> 小谷です。
>>>>>>
>>>>>> Webサービスを介さなかった場合も同様の結果になるでしょうか?
>>>>>> 念のため試してみていただけないでしょうか。
>>>>>>
>>>>>> (1)Windows Form (SampleFormクラス)
>>>>>>>>>>>> (3)BusinessLogic (SampleBusinessLogicImplクラス(←ISampleBusinessLogicイ
>>>>>> ンターフェース)) ※トランザクション属性
>>>>>>>>>>>> (4)DAO Interface (IM_TESTdaoインターフェース)
>>>>>>
>>>>>> 2010年7月6日6:59 koyak <[E-MAIL ADDRESS DELETED]>:
>>>>>>
>>>>>>> ナガイシさん
>>>>>>>
>>>>>>> 小谷です。
>>>>>>>
>>>>>>> ソースコードを拝見致しましたが、
>>>>>>> メソッドへのトランザクション設定として、
>>>>>>> 特に問題はないように思えます。
>>>>>>>
>>>>>>> 参考までに、ログがありましたら差し支えなければそちらも
>>>>>>> 見せていただけないでしょうか。
>>>>>>>
>>>>>>> 2010年7月6日0:34 kircheis <[E-MAIL ADDRESS DELETED]>:
>>>>>>>
>>>>>>>> はじめまして、ナガイシと申します。
>>>>>>>>
>>>>>>>> 今、以下の環境でQuill + S2Dao.Netでスマートクライアント開発を
>>>>>>>> 行うべく、サンプルを作成しています。
>>>>>>>>
>>>>>>>> 開発環境
>>>>>>>> Windows XP SP3
>>>>>>>> VisualBasic 2008 (.Net Framework3.5)
>>>>>>>> S2Container.Net 1.3.17 (Quill)
>>>>>>>> Oracle11.2.0.1
>>>>>>>> ODP.NET 2.112.1.0
>>>>>>>>
>>>>>>>> サンプル構成
>>>>>>>> (1)Windows Form (SampleFormクラス)
>>>>>>>>>>>>>>>> (2)ASP.NET XML Service (SampleWebServiceクラス)
>>>>>>>>>>>>>>>> (3)BusinessLogic (SampleBusinessLogicImplクラス(←ISampleBusinessLogicイ
>>>>>>>> ンターフェース)) ※トランザクション属性
>>>>>>>>>>>>>>>> (4)DAO Interface (IM_TESTdaoインターフェース)
>>>>>>>>
>>>>>>>> BusinessLogicにDataInsert、DataUpdate、DataDeleteメソッドを作成し
>>>>>>>> 各メソッドにTransaction属性をつけてメソッド単位のトランザクション処理を
>>>>>>>> 行うべく作成を行いました。
>>>>>>>> 各メソッドのコミット、ロールバックは正常に行われるのですが
>>>>>>>> 例えば、DataInsertメソッドにのみTransaction属性を付加しても
>>>>>>>> Transaction属性をつけていないDataUpdate、DataDeleteメソッドで
>>>>>>>> コミット、ロールバックが発生してしまいます。
>>>>>>>> (クラス全体にTransaction属性はなく、DaoにもTransaction属性はありません)
>>>>>>>>
>>>>>>>> DataInsertメソッドの流れの概略は以下の通りです。
>>>>>>>> (1)より(2).DataInsertメソッドを呼出
>>>>>>>>>>>>>>>> (2).DataInsertメソッドより(3)のDataInsertメソッドを呼出
>>>>>>>>>>>>>>>> (3).DataInsertメソッドは(4)のInsertDataメソッドを呼出
>>>>>>>>
>>>>>>>>
>>>>>>>> 下記ソースの
>>>>>>>> <<BusinessLogic>>
>>>>>>>> →※クラス
>>>>>>>> →Public Class SampleBusinessLogicImpl
>>>>>>>> →<Transaction()>
>>>>>>>> Public Overridable Function DataInsert(ByVal entity As M_TESTentity) ~
>>>>>>>> がTransaction属性の部分です。
>>>>>>>>
>>>>>>>>
>>>>>>>> 今回がスマートクライアントもSeasar.Netも初めてで
>>>>>>>> 色々調べてみましたが、トランザクションがかからない現象は
>>>>>>>> よく見かけるのですが、トランザクションの範囲が想定以上に
>>>>>>>> なる現象は発見できませんでした。
>>>>>>>>
>>>>>>>> 下記にソースを記載しております。
>>>>>>>> ソースが長く申し訳ありませんが
>>>>>>>> 何かお気づきの事があればご助言頂きたいと考えております。
>>>>>>>> よろしくお願いいたします。
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> <<Windows Form>>
>>>>>>>> Public Class SampleForm
>>>>>>>>
>>>>>>>> Private Sub btnExec_Click(ByVal sender As System.Object, ByVal e As
>>>>>>>> System.EventArgs) Handles btnExec.Click
>>>>>>>>
>>>>>>>> Dim _SampleWebService As New SampleWebService.SampleWebService
>>>>>>>> Dim _entity As New SampleWebService.M_TESTentity
>>>>>>>> Dim _entityList() As SampleWebService.M_TESTentity
>>>>>>>>
>>>>>>>> With _entity
>>>>>>>> .Seqid = txtID.Text
>>>>>>>> .Name = txtNAME.Text
>>>>>>>> .Birth = CDate(dtpBirth.Value)
>>>>>>>> .Biko = txtBIKO.Text
>>>>>>>> End With
>>>>>>>>
>>>>>>>> Select Case True
>>>>>>>> Case rdoInsert.Checked
>>>>>>>> If _SampleWebService.DataInsert(_entity) Then
>>>>>>>> MessageBox.Show("正常")
>>>>>>>> Else
>>>>>>>> MessageBox.Show("異常")
>>>>>>>> End If
>>>>>>>> Case rdoUpdate.Checked
>>>>>>>> If _SampleWebService.DataUpdate(_entity) Then
>>>>>>>> MessageBox.Show("正常")
>>>>>>>> Else
>>>>>>>> MessageBox.Show("異常")
>>>>>>>> End If
>>>>>>>> Case rdoDelete.Checked
>>>>>>>> If _SampleWebService.DataDelete(_entity) Then
>>>>>>>> MessageBox.Show("正常")
>>>>>>>> Else
>>>>>>>> MessageBox.Show("異常")
>>>>>>>> End If
>>>>>>>> End Select
>>>>>>>> End Sub
>>>>>>>>
>>>>>>>> <<Web Service>>
>>>>>>>> <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
>>>>>>>> <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)>
>>>>>>>> _
>>>>>>>> <ToolboxItem(False)> _
>>>>>>>> Public Class SampleWebService
>>>>>>>> Inherits System.Web.Services.WebService
>>>>>>>>
>>>>>>>> Protected injector As QuillInjector = QuillInjector.GetInstance
>>>>>>>> Protected SampleClass As ISampleBusinessLogic
>>>>>>>>
>>>>>>>> Public Sub New()
>>>>>>>> injector.Inject(Me)
>>>>>>>> End Sub
>>>>>>>>
>>>>>>>> <WebMethod()> _
>>>>>>>> Public Function DataInsert(ByVal entity As M_TESTentity) As Boolean
>>>>>>>> Return SampleClass.DataInsert(entity)
>>>>>>>> End Function
>>>>>>>>
>>>>>>>> <WebMethod()> _
>>>>>>>> Public Function DataUpdate(ByVal entity As M_TESTentity) As Boolean
>>>>>>>> Return SampleClass.DataUpdate(entity)
>>>>>>>> End Function
>>>>>>>>
>>>>>>>> <WebMethod()> _
>>>>>>>> Public Function DataDelete(ByVal entity As M_TESTentity) As Boolean
>>>>>>>> Return SampleClass.DataDelete(entity)
>>>>>>>> End Function
>>>>>>>> End Class
>>>>>>>>
>>>>>>>>
>>>>>>>> <<Web.config>>
>>>>>>>> <quill>
>>>>>>>> <dataSources>
>>>>>>>> <dataSource name="ds">
>>>>>>>> <provider>ODP</provider>
>>>>>>>> <connectionString>"Data Source=ORA_SAMPLE;User
>>>>>>>> ID=sampleuser;Password=samplepwd"</connectionString>
>>>>>>>> <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
>>>>>>>> </dataSource>
>>>>>>>> </dataSources>
>>>>>>>>
>>>>>>>> <assemblys>
>>>>>>>> <assembly>Seasar</assembly>
>>>>>>>> <assembly>Seasar.Dao</assembly>
>>>>>>>> <!-- Oracle Data Provider for .NET を使用する場合に必要です。 -->
>>>>>>>> <assembly>Oracle.DataAccess, version=2.112.1.0, Culture=neutral,
>>>>>>>> PublicKeyToken=89b483f429c47342</assembly>
>>>>>>>> <!--<assembly>SampleBusinessLogic</assembly>-->
>>>>>>>> </assemblys>
>>>>>>>> </quill>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> <<BusinessLogic>>
>>>>>>>> ※インターフェース
>>>>>>>> <Implementation(GetType(SampleBusinessLogicImpl))> _
>>>>>>>> Public Interface ISampleBusinessLogic
>>>>>>>> Function DataInsert(ByVal entity As M_TESTentity) As Boolean
>>>>>>>> Function DataUpdate(ByVal entity As M_TESTentity) As Boolean
>>>>>>>> Function DataDelete(ByVal entity As M_TESTentity) As Boolean
>>>>>>>> End Interface
>>>>>>>>
>>>>>>>> ※クラス
>>>>>>>> Public Class SampleBusinessLogicImpl
>>>>>>>> Implements ISampleBusinessLogic
>>>>>>>>
>>>>>>>> Protected daoObject As IM_TESTdao
>>>>>>>> <Transaction()>
>>>>>>>> Public Overridable Function DataInsert(ByVal entity As M_TESTentity) As
>>>>>>>> Boolean Implements ISampleBusinessLogic.DataInsert
>>>>>>>> Dim intResult As Integer
>>>>>>>> intResult = daoObject.InsertData(entity)
>>>>>>>> Return True
>>>>>>>> End Function
>>>>>>>>
>>>>>>>> Public Function DataUpdate(ByVal entity As M_TESTentity) As Boolean
>>>>>>>> Implements ISampleBusinessLogic.DataUpdate
>>>>>>>> Dim intResult As Integer
>>>>>>>> intResult = daoObject.UpdateData(entity)
>>>>>>>> Return True
>>>>>>>> End Function
>>>>>>>>
>>>>>>>> Public Function DataDelete(ByVal entity As M_TESTentity) As Boolean
>>>>>>>> Implements ISampleBusinessLogic.DataDelete
>>>>>>>> Dim intResult As Integer
>>>>>>>> intResult = daoObject.DeleteData(entity)
>>>>>>>> Return True
>>>>>>>> End Function
>>>>>>>> End Class
>>>>>>>>
>>>>>>>>
>>>>>>>> <<Dao Interface>>
>>>>>>>> ※インターフェース
>>>>>>>> <Implementation()> _
>>>>>>>> <S2Dao()> _
>>>>>>>> <Bean(GetType(M_TESTentity))> _
>>>>>>>> Public Interface IM_TESTdao
>>>>>>>> Inherits AbstractBaseDao
>>>>>>>>
>>>>>>>> Function InsertData(ByVal data As M_TESTentity) As Integer
>>>>>>>> Function UpdateData(ByVal data As M_TESTentity) As Integer
>>>>>>>> Function DeleteData(ByVal data As M_TESTentity) As Integer
>>>>>>>> End Interface
>>>>>>>>
>>>>>>>> ※エンティティクラス
>>>>>>>> <Table("M_TEST")> _
>>>>>>>> Public Class M_TESTentity
>>>>>>>> Inherits AbstractBaseEntity
>>>>>>>>
>>>>>>>> Private _seqid As String
>>>>>>>> Private _name As String
>>>>>>>> Private _birth As Nullable(Of Date)
>>>>>>>> Private _biko As String
>>>>>>>>
>>>>>>>> Public Sub New()
>>>>>>>> _seqid = ""
>>>>>>>> _name = ""
>>>>>>>> _biko = ""
>>>>>>>> End Sub
>>>>>>>>
>>>>>>>> <Column("SEQID")> _
>>>>>>>> Public Property Seqid() As String
>>>>>>>> Get
>>>>>>>> Return _seqid.PadRight(5, " ") 'PrimaryKeyがChar型の場合、桁数に合わせて
>>>>>>>> 空白を付加しないと自動作成SQLと連動できない
>>>>>>>> End Get
>>>>>>>> Set(ByVal value As String)
>>>>>>>> _seqid = value
>>>>>>>> End Set
>>>>>>>> End Property
>>>>>>>>
>>>>>>>> <Column("NAME")> _
>>>>>>>> Public Property Name() As String
>>>>>>>> Get
>>>>>>>> Return _name
>>>>>>>> End Get
>>>>>>>> Set(ByVal value As String)
>>>>>>>> _name = value
>>>>>>>> End Set
>>>>>>>> End Property
>>>>>>>>
>>>>>>>> <Column("BIRTH")> _
>>>>>>>> Public Property Birth() As Date
>>>>>>>> Get
>>>>>>>> Return _birth
>>>>>>>> End Get
>>>>>>>> Set(ByVal value As Date)
>>>>>>>> _birth = value
>>>>>>>> End Set
>>>>>>>> End Property
>>>>>>>>
>>>>>>>> <Column("BIKO")> _
>>>>>>>> Public Property Biko() As String
>>>>>>>> Get
>>>>>>>> Return _biko
>>>>>>>> End Get
>>>>>>>> Set(ByVal value As String)
>>>>>>>> _biko = value
>>>>>>>> End Set
>>>>>>>> End Property
>>>>>>>>
>>>>>>>> End Class
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> seasar-dotnet mailing list
>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>> _______________________________________________
>>>>>> seasar-dotnet mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> seasar-dotnet mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> seasar-dotnet mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>>
>>_______________________________________________
>>seasar-dotnet mailing list
>>[E-MAIL ADDRESS DELETED]
>>https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内