[mapguide-internals] RE: The pinned connection
Haris Kurtagic
haris at sl-king.com
Sat Oct 24 06:02:47 EDT 2009
I was writing about just one solution ( I hope that my English doesn't add
some misunderstanding :) ).
As you wrote first example is what I was suggesting for first RFC68.
If functionality for RFC78 is done (or is in plan) I would extend connection
so you would start transaction on connection.
Then we would not have two parameters to ExecuteSql but just one.
I will try to explain in code, will just add to your first example :
MgPinnedConnection conn = nullptr;
try
{
conn = MgFeatureService.GetPinnedConnection(resourceId);
conn.BeginTransaction(); // <--- added
MgFeatureService.Update...
MgFeatureService.Update...
MgFeatureService.ExecuteSql(resourceId, sql statement1, conn);
conn.CommitTransaction(); // <--- added
MgFeatureService.ExecuteSql(resourceId, sql statement2, conn);
MgFeatureService.UpdateFeatures(resourceId, MgFeatureCommandCollection,
conn);
conn.Release();
}
catch (NoPinnedConnectionAvailableException ex)
{
.
}
And I would have suggestion to change the name from MgPinnedConnection to
MgConnection or MgFdoConnection or... To me this pinn.. sounds unnecessary
it is just MG/FDO connection to underlying data source.
Haris
-----Original Message-----
From: mapguide-internals-bounces at lists.osgeo.org
[mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of Leaf Li
Sent: Saturday, October 24, 2009 2:40
To: mapguide-internals at lists.osgeo.org
Subject: [mapguide-internals] RE: The pinned connection
Hi Haris,
If my understanding is correct, you propose two solutions in our discussion.
One is simpler. This solution will not affect MgTransaction.
MgPinnedConnection conn = nullptr;
try
{
conn = MgFeatureService.GetPinnedConnection(resourceId);
MgFeatureService.ExecuteSql(resourceId, sql statement1, conn);
MgFeatureService.ExecuteSql(resourceId, sql statement2, conn);
MgFeatureService.UpdateFeatures(resourceId, MgFeatureCommandCollection,
conn);
conn.Release();
}
catch (NoPinnedConnectionAvailableException ex)
{
.
}
Another is in this way. It affects MgTransaction. So we have to change
current design of MapGuide RFC 78 - Enhance transaction capability to
Feature Service. For example, transaction isn't started, committed and
rollbacked by MgFeautreService. It is done by MgPinnedConnection.
> Conn1 = Open(FeatureSourceId)
> Execute SQL(Conn1,..)
> Open(Conn2)
> Execute SQL(Conn2,..)
> Open(Conn3)
> Conn3.StartTransaction()
> Conn3.Committ()
> Execute SQL(Conn3,..)
> Close(conn3)
> Close(Conn2)
> Close(Conn1)
For the second, it think it is the perfect way. I think you are talking
about the first solution in the email below. There are some issues for the
first solution. One of issues is how to execute a transaction against a
existing pinned connection? Maybe we need to add the following method.
Right?
ExecuteSqlNonQuery(MgResourceIdentifier, string, MgTransaction,
MgPinnedConnection)
However, MgTransaction already occupies a connection when calling
FeatureService::BeginTransaction(.). How do we handle them in this time?
So if we want to return a MgPinnedConnection object to users, we should use
the second solution to start a transaction instead of
FeatureService::BeginTransaction(.).
Thanks,
Leaf Li
>Hi Li,
>
>I think that more work is needed for API as proposed in RFC because there
is
>functionality around pinning and unpinning connections and keeping track of
>those. All functionality for the solution I would prefer is already there,
>it is just about the way how is it exposed.
>
>It does changes API but in same way as it changes with transaction RFC78.
>My suggestion would be just to change that one and instead of adding
>transaction as new parameter add connection. And then on connection just
use
>transaction functionality which was developed for RFC78.
Haris_______________________________________________
mapguide-internals mailing list
mapguide-internals at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapguide-internals
More information about the mapguide-internals
mailing list