Update of /cvsroot/jcframework/dotnet In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9164 Modified Files: CCacheEntry.vb CClassMap.vb CConnection.vb CInjectedObject.vb CPersistenceBroker.vb modPersistenceBrokerSingleton.vb readme.html Log Message: Various bug fixes (infinite loop prevention, type cast error) Addition of performance counters. Update readme.html Index: CPersistenceBroker.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CPersistenceBroker.vb,v retrieving revision 1.79 retrieving revision 1.80 diff -u -d -r1.79 -r1.80 --- CPersistenceBroker.vb 9 Nov 2004 11:46:04 -0000 1.79 +++ CPersistenceBroker.vb 16 Nov 2004 21:39:34 -0000 1.80 @@ -42,6 +42,17 @@ Private m_disposed As Boolean Private m_inPersistChangesLoop As Boolean + Friend PCSQLHits As PerformanceCounter + Friend PCCacheHits As PerformanceCounter + Friend PCInserts As PerformanceCounter + Friend PCUpdates As PerformanceCounter + Friend PCReads As PerformanceCounter + Friend PCDeletes As PerformanceCounter + Friend PCCriteria As PerformanceCounter + Friend PCCacheSize As PerformanceCounter + Friend PCAverageTime As PerformanceCounter + Friend PCAverageTimeBase As PerformanceCounter + '''----------------------------------------------------------------------------- ''' <summary> ''' Flag indicating wether the configuration XML file has been loaded. @@ -162,7 +173,11 @@ Dim cm As CClassMap Dim conn As _CConnection Dim x As RetrieveException - cm = obj.getClassMap + + Dim inTicks As Long, outTicks As Long + inTicks = Now.Ticks + + cm = obj.GetClassMap conn = cm.RelationalDatabase.getConnection(Nothing) conn.AutoCommit = False Try @@ -177,6 +192,9 @@ x = New RetrieveException(ex.Message, ex) Finally cm.RelationalDatabase.freeConnection(conn) + outTicks = Now.Ticks + PCAverageTime.RawValue = outTicks - inTicks + PCAverageTimeBase.Increment() If Not x Is Nothing Then Throw x End If @@ -255,6 +273,8 @@ Dim t As Type Dim resetLoadingFlag As Boolean + PCReads.Increment() + 'Storage for maps we will use to retrieve data (for the sql query) 'each entry will store the class map and the sql alias for the map Dim rMaps As New HybridDictionary @@ -286,6 +306,7 @@ If t Is obj.GetObjectType Or t.IsSubclassOf(obj.GetObjectType) Then Debug.WriteLine("retrievePrivateObject: retreived from cache") obj = tmpObj + PCCacheHits.Increment() Return True End If End If @@ -326,6 +347,7 @@ 'Execute it and fill the data Dim rs As CResultset + PCSQLHits.Increment() rs = conn.processSelectStatement(statement) Debug.WriteLine("Select statement returned " & rs.ResultSet.Tables(0).Rows.Count & " row(s)") If rs.ResultSet.Tables(0).Rows.Count > 0 Then @@ -363,6 +385,7 @@ End While obj.IsProxy = False 'Need to set non-proxy in case object is loaded via a retrieve criteria m_cache.Add(obj) 'Add retrieved object to the cache + PCCacheSize.RawValue = m_cache.Count j = classMapCount + 1 Dim rw As DataRow @@ -391,9 +414,11 @@ tmpObj = m_cache.Item(targetobj) If Not (tmpObj Is Nothing) Then targetobj = tmpObj + PCCacheHits.Increment() Else ' All objects are loaded to the cache regardless of applications cache usage m_cache.Add(targetobj) + PCCacheSize.RawValue = m_cache.Count End If obj.SetAttributeValue(udamap.Target, targetobj.GetSourceObject) If Not targetobj.AssociationsLoaded Then @@ -423,9 +448,11 @@ tmpObj = m_cache.Item(targetobj) If Not (tmpObj Is Nothing) Then targetobj = tmpObj + PCCacheHits.Increment() Else ' All objects are loaded to the cache regardless of applications cache usage m_cache.Add(targetobj) + PCCacheSize.RawValue = m_cache.Count End If If Not targetobj.AssociationsLoaded Then If udamap.LazyLoad Then @@ -452,9 +479,11 @@ tmpObj = m_cache.Item(targetobj) If Not (tmpObj Is Nothing) Then targetobj = tmpObj + PCCacheHits.Increment() Else ' All objects are loaded to the cache regardless of applications cache usage m_cache.Add(targetobj) + PCCacheSize.RawValue = m_cache.Count End If If Not targetobj.AssociationsLoaded Then If udamap.LazyLoad Then @@ -486,9 +515,11 @@ tmpObj = m_cache.Item(targetobj) If Not (tmpObj Is Nothing) Then targetobj = tmpObj + PCCacheHits.Increment() Else ' All objects are loaded to the cache regardless of applications cache usage m_cache.Add(targetobj) + PCCacheSize.RawValue = m_cache.Count End If 'Need to determine if new object is already in the collection @@ -532,9 +563,11 @@ tmpObj = m_cache.Item(targetobj) If Not (tmpObj Is Nothing) Then targetobj = tmpObj + PCCacheHits.Increment() Else ' All objects are loaded to the cache regardless of applications cache usage m_cache.Add(targetobj) + PCCacheSize.RawValue = m_cache.Count End If 'Need to determine if new object is already in the collection '(prevents duplicates when multiple one-to-many associations exist) @@ -587,6 +620,7 @@ m_cache.ObjectsAreLoading = False End If m_cache.Add(obj) + PCCacheSize.RawValue = m_cache.Count Return True End Function @@ -631,13 +665,14 @@ If Not Value Is Nothing Then 'Need to know if returned object is persistent and has a legitimate key If Value.HasValidKey Then - anObjPers = m_cache.Item(Value) + anObjPers = m_cache.Item(Value) If Not anObjPers Is Nothing Then - Value = anObjPers - Value.IsDirty = False - Value.OriginalCacheKey = New CCacheKey(Value) - obj.SetAttributeValue(udaMap.Target, Value.GetSourceObject) - gotValue = True + PCCacheHits.Increment() + Value = anObjPers + Value.IsDirty = False + Value.OriginalCacheKey = New CCacheKey(Value) + obj.SetAttributeValue(udaMap.Target, Value.GetSourceObject) + gotValue = True End If End If End If @@ -657,6 +692,7 @@ retrieveObject(Value, False, False) Else Value = anObjPers + PCCacheHits.Increment() End If Value.IsDirty = False 'After populating a new object Value.OriginalCacheKey = New CCacheKey(Value) @@ -688,6 +724,7 @@ anObjPers.OriginalCacheKey = New CCacheKey(anObjPers) col.Add(anObjPers.GetSourceObject) m_cache.Add(anObjPers) 'Add retrieved objects to the cache + PCCacheSize.RawValue = m_cache.Count cursor.nextCursor() End While End If @@ -721,6 +758,9 @@ '''----------------------------------------------------------------------------- Public Sub saveObject(ByRef obj As IPersistableObject) SyncLock GetType(CPersistenceBroker) + Dim inTicks As Long, outTicks As Long + inTicks = Now.Ticks + Dim conn As _CConnection Dim cm As CClassMap cm = obj.GetClassMap @@ -736,6 +776,9 @@ Throw New SaveException(ex.Message, ex) End Try cm.RelationalDatabase.freeConnection(conn) + outTicks = Now.Ticks + PCAverageTime.RawValue = outTicks - inTicks + PCAverageTimeBase.Increment() End SyncLock End Sub @@ -782,9 +825,13 @@ If obj.Persistent Then statement = cm.getUpdateSqlFor(obj) conn.processStatement(statement) + PCSQLHits.Increment() + PCUpdates.Increment() Else statement = cm.getInsertSqlFor(obj) conn.processStatement(statement) + PCSQLHits.Increment() + PCInserts.Increment() If cm.getIdentitySize > 0 Then If CInt(cm.RelationalDatabase.getValueFor(obj.GetValueByAttribute(cm.getIdentityAttributeMap(1).Name))) = 0 Then obj.SetAttributeValue(cm.getIdentityAttributeMap(1).Name, cm.RelationalDatabase.getIdentityValue(conn)) @@ -802,11 +849,13 @@ If Not obj.GetObjectType.IsSubclassOf(GetType(CPersistentObject)) Then If Not obj.OriginalCacheKey Is Nothing Then m_cache.Remove(obj.OriginalCacheKey) + PCCacheSize.RawValue = m_cache.Count End If End If obj.OriginalCacheKey = New CCacheKey(obj) If m_useCache Then m_cache.Add(obj) 'Add to the cache + PCCacheSize.RawValue = m_cache.Count End If End Sub @@ -841,6 +890,8 @@ SyncLock GetType(CPersistenceBroker) Dim cm As CClassMap Dim x As DeleteException + Dim inTicks As Long, outTicks As Long + inTicks = Now.Ticks cm = obj.GetClassMap Dim conn As _CConnection conn = cm.RelationalDatabase.getConnection(Nothing) @@ -853,6 +904,10 @@ conn.rollback() Finally cm.RelationalDatabase.freeConnection(conn) + outTicks = Now.Ticks + PCAverageTime.RawValue = outTicks - inTicks + PCAverageTimeBase.Increment() + PCAverageTime.NextSample() If Not x Is Nothing Then Throw x End If @@ -875,6 +930,7 @@ Public Sub deleteCachedObject(ByVal obj As IPersistableObject) If m_useCache Then m_cache.Remove(obj) + PCCacheSize.RawValue = m_cache.Count End If End Sub @@ -915,6 +971,8 @@ Dim myKeys(cm.AssociationMaps.Count) As String cm.AssociationMaps.Keys.CopyTo(myKeys, 0) + PCDeletes.Increment() + For i = 0 To cm.AssociationMaps.Count - 1 udaMap = cm.AssociationMaps.Item(myKeys(i)) If udaMap.DeleteAutomatic Then @@ -946,6 +1004,7 @@ Dim statement As CSqlStatement statement = clMap.getDeleteSqlFor(obj) + PCSQLHits.Increment() conn.processStatement(statement) If deleteSuperClass Then @@ -963,6 +1022,7 @@ obj.Persistent = False If m_useCache Then m_cache.Remove(obj) 'remove from the cache + PCCacheSize.RawValue = m_cache.Count End If colCriteriaParameters = Nothing End Sub @@ -1245,9 +1305,12 @@ ''' </history> '''----------------------------------------------------------------------------- Private Function processPrivateCriteria(ByVal pCriteria As CRetrieveCriteria, ByVal conn As _CConnection, ByVal fullObjects As Boolean) As CCursor + PCCriteria.Increment() + Dim statement As CSqlStatement statement = pCriteria.getSqlStatementParameters(fullObjects) + PCSQLHits.Increment() Dim rs As CResultset rs = conn.processSelectStatement(statement) @@ -1275,9 +1338,12 @@ ''' </history> '''----------------------------------------------------------------------------- Private Function processCriteria(ByVal pCriteria As CRetrieveCriteria, ByVal colCriteriaParameters As Collection, ByVal conn As _CConnection) As CCursor + PCCriteria.Increment() + Dim statement As CSqlStatement statement = pCriteria.getSqlStatementParameters() + PCSQLHits.Increment() Dim rs As CResultset rs = conn.processSelectStatement(statement) @@ -1320,6 +1386,7 @@ Public Sub addToCache(ByRef obj As CPersistentObject) If m_useCache Then m_cache.Add(obj) + PCCacheSize.RawValue = m_cache.Count End If End Sub @@ -1336,6 +1403,7 @@ ''' </history> '''----------------------------------------------------------------------------- Public Function processMultiRetrieveCriteria(ByRef pCriteria As CMultiRetrieveCriteria, ByVal fullObjects As Boolean) As CCursor + PCCriteria.Increment() Dim clMap As CClassMap clMap = pCriteria.getFirstObject.GetClassMap @@ -1347,6 +1415,7 @@ statement = pCriteria.getSqlStatementParameters(fullObjects) conn.AutoCommit = False + PCSQLHits.Increment() Dim cursor As CCursor Dim rs As CResultset @@ -1380,6 +1449,7 @@ ''' </history> '''----------------------------------------------------------------------------- Public Function processMultiSummaryCriteria(ByRef pCriteria As CMultiSummaryCriteria) As CCursor + PCCriteria.Increment() Dim clMap As CClassMap clMap = pCriteria.getFirstObject.GetClassMap @@ -1392,6 +1462,7 @@ conn.AutoCommit = False + PCSQLHits.Increment() Dim cursor As CCursor Dim rs As CResultset Try @@ -1444,6 +1515,7 @@ ''' </history> '''----------------------------------------------------------------------------- Public Function processSummaryCriteria(ByRef obj As CPersistentObject, ByRef pCriteria As CSummaryCriteria) As CCursor + PCCriteria.Increment() Dim clMap As CClassMap clMap = obj.getClassMap(obj) @@ -1456,6 +1528,7 @@ conn.AutoCommit = False + PCSQLHits.Increment() Dim cursor As CCursor Dim rs As CResultset Try @@ -1597,6 +1670,7 @@ conn = firstClassMap.RelationalDatabase.getConnection(Nothing) conn.AutoCommit = False + PCSQLHits.Increment() Dim cursor As CCursor Dim rs As CResultset rs = conn.processSelectStatement(statement) @@ -2066,10 +2140,10 @@ ''' [danymayer] 19/05/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- - Private Function createTargetObjectForMultipleInheritance(ByVal classMap As CClassMap, ByVal objectType As Type, ByVal classNameSpace As String, ByVal dataRow As DataRow, ByVal joins As CJoin, ByVal conn As _CConnection) As CPersistentObject + Private Function createTargetObjectForMultipleInheritance(ByVal classMap As CClassMap, ByVal objectType As Type, ByVal classNameSpace As String, ByVal dataRow As DataRow, ByVal joins As CJoin, ByVal conn As _CConnection) As IPersistableObject Dim de As DictionaryEntry Dim cm, cm1, cm2 As CClassMap - Dim obj As CPersistentObject = Nothing + Dim obj As IPersistableObject = Nothing For Each de In classMap.ChildrenMaps cm = de.Value @@ -2185,6 +2259,12 @@ Return queue End If + If includeBaseObject Then + 'Any object that is processed is automatically marked as isQueued (even if not dirty) + 'so that any recursion is prevented when processing non-dirty objects with circular references + obj.IsQueued = True + End If + If Not checkAssociationsRecursivly Then If includeBaseObject Then 'This will be on when we start saving a normal object. Recursive calls @@ -2206,7 +2286,6 @@ If includeBaseObject Then obj.IsDirty = False 'Added to queue so clear dirty flag queue.Enqueue(obj) - obj.IsQueued = True End If Else 'Determine if the object needs saving @@ -2214,15 +2293,13 @@ If includeBaseObject AndAlso _ (obj.IsDirty AndAlso Not obj.IsProxy AndAlso Not obj.IsReadOnly AndAlso Not obj.IsModifyOnly) Then If obj.GetObjectType.IsSubclassOf(GetType(CPersistentObject)) Then - If CType(obj, CPersistentObject).IsValid Then 'Do not save if object is not valid - obj.IsDirty = False 'Added to queue so clear dirty flag + If CType(obj, CPersistentObject).IsValid Then 'Do not save if object is not valid + obj.IsDirty = False 'Added to queue so clear dirty flag queue.Enqueue(obj) - obj.IsQueued = True End If Else obj.IsDirty = False queue.Enqueue(obj) - obj.IsQueued = True End If End If End If @@ -2373,6 +2450,7 @@ cursor.ClassMap = Nothing cursor.HoldsProxies = False st.SqlString = SQLString + 'PCSQLHits.Increment() cursor.ResultSet = database.getConnection(Nothing).processSelectStatement(st) Return cursor End Function @@ -2406,6 +2484,7 @@ m_databases = Nothing m_cache = Nothing m_disposed = True + PCCacheSize.RawValue = 0 End If End If End Sub @@ -2423,6 +2502,7 @@ Public Sub ClearCache() m_cache.Clear() + PCCacheSize.RawValue = m_cache.Count End Sub Public Sub GetObject(ByRef obj As Object) @@ -2587,4 +2667,100 @@ m_injectedObjects = Value End Set End Property + + Friend Sub InitPerformanceCounters() + If Not PerformanceCounterCategory.Exists("AtomsFramework") Then + + Dim CCDC As New CounterCreationDataCollection + + Dim SQLHitsCount64 As New CounterCreationData + SQLHitsCount64.CounterType = PerformanceCounterType.RateOfCountsPerSecond64 + SQLHitsCount64.CounterHelp = "SQLStatements Executed per Sec." + SQLHitsCount64.CounterName = "PCSQLHits" + CCDC.Add(SQLHitsCount64) + + Dim CacheHitsCount64 As New CounterCreationData + CacheHitsCount64.CounterType = PerformanceCounterType.RateOfCountsPerSecond64 + CacheHitsCount64.CounterHelp = "Cache Reads per Sec." + CacheHitsCount64.CounterName = "PCCacheHits" + CCDC.Add(CacheHitsCount64) + + Dim InsertsCount64 As New CounterCreationData + InsertsCount64.CounterType = PerformanceCounterType.RateOfCountsPerSecond64 + InsertsCount64.CounterHelp = "Inserts per Sec." + InsertsCount64.CounterName = "PCInserts" + CCDC.Add(InsertsCount64) + + Dim UpdatesCount64 As New CounterCreationData + UpdatesCount64.CounterType = PerformanceCounterType.RateOfCountsPerSecond64 + UpdatesCount64.CounterHelp = "Updates per Sec." + UpdatesCount64.CounterName = "PCUpdates" + CCDC.Add(UpdatesCount64) + + Dim ReadsCount64 As New CounterCreationData + ReadsCount64.CounterType = PerformanceCounterType.RateOfCountsPerSecond64 + ReadsCount64.CounterHelp = "Reads per Sec." + ReadsCount64.CounterName = "PCReads" + CCDC.Add(ReadsCount64) + + Dim DeletesCount64 As New CounterCreationData + DeletesCount64.CounterType = PerformanceCounterType.RateOfCountsPerSecond64 + DeletesCount64.CounterHelp = "Deletes per Sec." + DeletesCount64.CounterName = "PCDeletes" + CCDC.Add(DeletesCount64) + + Dim CriteriaCount64 As New CounterCreationData + CriteriaCount64.CounterType = PerformanceCounterType.RateOfCountsPerSecond64 + CriteriaCount64.CounterHelp = "xCriteria per Sec." + CriteriaCount64.CounterName = "PCCriteria" + CCDC.Add(CriteriaCount64) + + Dim CacheSizeCount64 As New CounterCreationData + CacheSizeCount64.CounterType = PerformanceCounterType.NumberOfItems64 + CacheSizeCount64.CounterHelp = "Cache Size (No. of entries)" + CacheSizeCount64.CounterName = "PCCacheSize" + CCDC.Add(CacheSizeCount64) + + Dim AvgOpTimeCount64 As New CounterCreationData + AvgOpTimeCount64.CounterType = PerformanceCounterType.AverageTimer32 + AvgOpTimeCount64.CounterHelp = "Average Operation Time" + AvgOpTimeCount64.CounterName = "PCAverageTime" + CCDC.Add(AvgOpTimeCount64) + + Dim BaseAvgOpTimeCount64 As New CounterCreationData + BaseAvgOpTimeCount64.CounterType = PerformanceCounterType.AverageBase + BaseAvgOpTimeCount64.CounterName = "Average Operation Time Count" + BaseAvgOpTimeCount64.CounterHelp = "PCAverageTimeBase" + CCDC.Add(BaseAvgOpTimeCount64) + + ' Create the category. + PerformanceCounterCategory.Create("AtomsFramework", "Performance Counters for the AtomsFramework", CCDC) + End If + + Dim instanceName As String + instanceName = System.Diagnostics.Process.GetCurrentProcess.ProcessName + ' Create the counters. + PCSQLHits = New PerformanceCounter("AtomsFramework", "PCSQLHits", False) + PCCacheHits = New PerformanceCounter("AtomsFramework", "PCCacheHits", False) + PCInserts = New PerformanceCounter("AtomsFramework", "PCInserts", False) + PCUpdates = New PerformanceCounter("AtomsFramework", "PCUpdates", False) + PCReads = New PerformanceCounter("AtomsFramework", "PCReads", False) + PCDeletes = New PerformanceCounter("AtomsFramework", "PCDeletes", False) + PCCriteria = New PerformanceCounter("AtomsFramework", "PCCriteria", False) + PCCacheSize = New PerformanceCounter("AtomsFramework", "PCCacheSize", False) + PCAverageTime = New PerformanceCounter("AtomsFramework", "PCAverageTime", False) + PCAverageTimeBase = New PerformanceCounter("AtomsFramework", "PCAverageTimeBase", False) + + PCSQLHits.RawValue = 0 + PCCacheHits.RawValue = 0 + PCInserts.RawValue = 0 + PCUpdates.RawValue = 0 + PCReads.RawValue = 0 + PCDeletes.RawValue = 0 + PCCriteria.RawValue = 0 + PCCacheSize.RawValue = 0 + PCAverageTime.RawValue = 0 + PCAverageTimeBase.RawValue = 0 + + End Sub End Class \ No newline at end of file Index: CClassMap.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CClassMap.vb,v retrieving revision 1.44 retrieving revision 1.45 diff -u -d -r1.44 -r1.45 --- CClassMap.vb 10 Nov 2004 01:21:24 -0000 1.44 +++ CClassMap.vb 16 Nov 2004 21:39:34 -0000 1.45 @@ -2065,6 +2065,7 @@ End Property Public Function CreateObjectInstance() As IPersistableObject + Dim ip As IPersistableObject If m_classFactoryName Is Nothing Then Return CreateObjectInstanceNoFactory() End If @@ -2109,7 +2110,8 @@ End Try m_classFactory = CType(obj, IClassFactory) End If - Return CreateObjectInstanceViaFactory() + ip = CreateObjectInstanceViaFactory() + Return ip End Function Private Function CreateObjectInstanceNoFactory() As IPersistableObject Index: readme.html =================================================================== RCS file: /cvsroot/jcframework/dotnet/readme.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- readme.html 10 Nov 2004 11:05:13 -0000 1.1 +++ readme.html 16 Nov 2004 21:39:34 -0000 1.2 @@ -149,8 +149,51 @@ </div> <tr> <td class="groupHeader" align="left" valign="top"> + <div onclick="return CFAQ.display('faq_a_notesv2.0', false);" style="width:100%;cursor:pointer;cursor:hand;"> + <span class="gen"><a class="postlink" href="javascript:void(0)" onclick="return CFAQ.display('faq_a_notesv2.0', true);" onfocus="this.blur();"><b>Changes in v2.0 Final (xx-xx-04)</b></a></span> + </div> + <div id="faq_a_notesv2.0" style="display:none;"> + <table class="details" width="100%" cellspacing="0" cellpadding="3" border="0" align="left"> + <tr class="tableCaption"><td colspan=3>Bugs:</td></tr> + <tr class="tableHeader" valign="bottom"><td valign="top" class="colHeader">Job Id</td> + <td class="colHeader">Description</td> + <td class="colHeader">Details</td> + </tr> + <tr valign="top"> + <td>N/A</td> + <td class="col1">InjectedObjects</td> + <td>hasValidKey was failing in some circumstances<td> + </tr> + <tr valign="top"> + <td>N/A</td> + <td class="col1">Infinite loop during object saving</td> + <td>It was possible for object saving to cause a stack overflow in some rare situations. This is now fixed.<td> + </tr> + <tr valign="top"> + <td>N/A</td> + <td class="col1">Invalid Type Cast error during retrieval</td> + <td>Retrieval of objects that do not inherit from CPersistentObject and that have child objects would fail due to a bug in the code. This is now fixed.<td> + </tr> + <tr class="tableCaption" valign="bottom"> + <td colspan=3><br/>Modifications</td> + </tr> + <tr class="tableHeader" valign="bottom"><td valign="top" class="colHeader">Job Id</td> + <td class="colHeader">Description</td> + <td class="colHeader">Details</td> + </tr> + <tr valign="top"> + <td>N/A</td> + <td class="col1">Performance </td> + <td>Code has been added to allow various performance values to be measured in PerfMon. This includes cache hits, sql hits, retrieves, saves, deletes per second, etc. If you want more, just place a request on the web site.<td> + </tr> + </table> + </div> + </td> + </tr> + <tr> + <td class="groupHeader" align="left" valign="top"> <div onclick="return CFAQ.display('faq_a_changesrc2', false);" style="width:100%;cursor:pointer;cursor:hand;"> - <span class="gen"><a class="postlink" href="javascript:void(0)" onclick="return CFAQ.display('faq_a_notesrc2', true);" onfocus="this.blur();"><b>Changes in v2.0 RC2 (10-Nov-04)</b></a></span> + <span class="gen"><a class="postlink" href="javascript:void(0)" onclick="return CFAQ.display('faq_a_changesrc2', true);" onfocus="this.blur();"><b>Changes in v2.0 RC2 (10-Nov-04)</b></a></span> </div> <div id="faq_a_changesrc2" style="display:none;"> <table class="details" width="100%" cellspacing="0" cellpadding="3" border="0" align="left"> @@ -213,6 +256,8 @@ </tr> </table> </div> + </td> + </tr> <tr> <td class="{faq_block.faq_row.ROW_CLASS}" align="left" valign="top"> <div onclick="return CFAQ.display('faq_a_notesrc1', false);" style="width:100%;cursor:pointer;cursor:hand;"> Index: CConnection.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CConnection.vb,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- CConnection.vb 1 Nov 2004 00:10:50 -0000 1.28 +++ CConnection.vb 16 Nov 2004 21:39:34 -0000 1.29 @@ -469,6 +469,7 @@ Try Dim m_adapter As New OleDbDataAdapter(m_command) If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction + rs.ResultSet.Tables.Add("ole") m_adapter.Fill(rs.ResultSet, "ole") m_adapter.Dispose() Catch err As OleDbException Index: CCacheEntry.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CCacheEntry.vb,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- CCacheEntry.vb 3 Nov 2004 22:26:48 -0000 1.22 +++ CCacheEntry.vb 16 Nov 2004 21:39:34 -0000 1.23 @@ -907,7 +907,7 @@ pObj = ce.PersistentObject ck = x.Key outString &= i.ToString & ">" & ce.ToString & vbCrLf & _ - i.ToString & " (Cache Key)>" & ck.ToString & vbCrLf + i.ToString & " (Cache Key)>" & ck.ToString & vbCrLf i += 1 Next x outString &= ">>>> END CACHE DUMP <<<<" Index: CInjectedObject.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CInjectedObject.vb,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- CInjectedObject.vb 5 Nov 2004 01:39:17 -0000 1.7 +++ CInjectedObject.vb 16 Nov 2004 21:39:34 -0000 1.8 @@ -634,7 +634,7 @@ Dim cm As CClassMap cm = Me.getClassMap For Each am In cm.KeyAttributeMaps - If Not IsNullAlias(Me.GetSourceObject.getValueByAttribute(am.Name)) Then + If Not IsNullAlias(Me.getValueByAttribute(am.Name)) Then Return True End If Next Index: modPersistenceBrokerSingleton.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/modPersistenceBrokerSingleton.vb,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- modPersistenceBrokerSingleton.vb 14 Oct 2004 05:25:02 -0000 1.9 +++ modPersistenceBrokerSingleton.vb 16 Nov 2004 21:39:34 -0000 1.10 @@ -70,6 +70,8 @@ staticInstance = New CPersistenceBroker staticInstance.Instance = staticInstance End If + 'Initialize performance counters + staticInstance.InitPerformanceCounters() End If Return staticInstance End Function |