https://issues.apache.org/activemq/browse/AMQNET-290
Add interfaces for ConnectionFactory, Connection, and Session instances that offer participation in Transactions based on the .NET System.Transactions model.
diff --git a/src/main/csharp/INetTxConnection.cs b/src/main/csharp/INetTxConnection.cs
new file mode 100644
index 0000000..82abc33
--- /dev/null
+++ b/src/main/csharp/INetTxConnection.cs
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS
+{
+ /// <summary>
+ /// The INetTxConnection extends the functionality of the IConnection interface by
+ /// adding the createNetTxSession method (optional).
+ ///
+ /// The INetTxConnection interface is optional. NMS providers are not required to support this
+ /// interface. This interface is for use by NMS providers to support transactional environments.
+ /// </summary>
+ public interface INetTxConnection : IConnection
+ {
+ /// <summary>
+ /// Creates a INetTxSession object.
+ /// </summary>
+ INetTxSession CreateNetTxSession();
+ }
+}
+
diff --git a/src/main/csharp/INetTxConnectionFactory.cs b/src/main/csharp/INetTxConnectionFactory.cs
new file mode 100644
index 0000000..4e5cb2e
--- /dev/null
+++ b/src/main/csharp/INetTxConnectionFactory.cs
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS
+{
+ /// <summary>
+ /// Some application servers provide support for use in a .NET transactions (optional).
+ ///
+ /// To include NMS API transactions in a MSDTC transaction, an application server requires a
+ /// .NET Transaction aware NMS provider that is capable of mapping the MSDTC transaction model
+ /// into operations that are supported by the application server. An NMS provider exposes its
+ /// .NET Transaction support using an INetTxConnectionFactory object, which an application
+ /// server uses to create INetTxConnection objects.
+ ///
+ /// The INetTxConnectionFactory interface is optional. NMS providers are not required to support this
+ /// interface. This interface is for use by NMS providers to support transactional environments.
+ /// </summary>
+ public interface INetTxConnectionFactory : IConnectionFactory
+ {
+ /// <summary>
+ /// Creates a new connection
+ /// </summary>
+ INetTxConnection CreateNetTxConnection();
+
+ /// <summary>
+ /// Creates a new connection with the given user name and password
+ /// </summary>
+ INetTxConnection CreateNetTxConnection(string userName, string password);
+ }
+}
+
diff --git a/src/main/csharp/INetTxSession.cs b/src/main/csharp/INetTxSession.cs
new file mode 100644
index 0000000..804f592
--- /dev/null
+++ b/src/main/csharp/INetTxSession.cs
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Apache.NMS
+{
+ /// <summary>
+ /// The INetTxSession interface extends the capability of Session by adding access to a NMS
+ /// provider's support for the Distributed Transactions (optional). The transaction support
+ /// leverages the .NET Frameworks System.Transactions API.
+ ///
+ /// The NMS Provider implements this interface by participating in the current ambient transaction
+ /// as defined by the System.Transactions.Transaction.Current static member. Whenever a new
+ /// Transaction is entered the NMS provider should enlist in that transaction. When there is no
+ /// ambient transaction then the NMS Prodiver should allow the INetTxSession instance to behave
+ /// as a session that is in Auto Acknowledge mode.
+ ///
+ /// Calling the Commit or Rollback methods on a INetTxSession instance should throw an exception
+ /// as those operations are controlled by the Transaction Manager.
+ ///
+ /// The INetTxSession interface is optional. NMS providers are not required to support this
+ /// interface. This interface is for use by NMS providers to support transactional environments.
+ /// </summary>
+ public interface INetTxSession : ISession
+ {
+ }
+}
+