From: <fab...@us...> - 2011-06-21 14:22:34
|
Revision: 5967 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5967&view=rev Author: fabiomaulo Date: 2011-06-21 14:22:28 +0000 (Tue, 21 Jun 2011) Log Message: ----------- Fix NH-2773 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyCache.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Model.cs Modified: trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyCache.cs 2011-06-21 12:35:12 UTC (rev 5966) +++ trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyCache.cs 2011-06-21 14:22:28 UTC (rev 5967) @@ -6,7 +6,6 @@ #endregion -using System; using System.Collections.Generic; using NHibernate.Util; @@ -14,8 +13,7 @@ { public class ProxyCache : IProxyCache { - private readonly IDictionary<ProxyCacheEntry, System.Type> cache = new ThreadSafeDictionary<ProxyCacheEntry, System.Type>(new Dictionary<ProxyCacheEntry, System.Type>()); - private readonly object syncObject = new object(); + private static readonly IDictionary<ProxyCacheEntry, System.Type> cache = new ThreadSafeDictionary<ProxyCacheEntry, System.Type>(new Dictionary<ProxyCacheEntry, System.Type>()); #region IProxyCache Members @@ -32,20 +30,14 @@ public System.Type GetProxyType(System.Type baseType, params System.Type[] baseInterfaces) { - lock (syncObject) - { - var entry = new ProxyCacheEntry(baseType, baseInterfaces); - return cache[entry]; - } + var entry = new ProxyCacheEntry(baseType, baseInterfaces); + return cache[entry]; } public void StoreProxyType(System.Type result, System.Type baseType, params System.Type[] baseInterfaces) { - lock (syncObject) - { - var entry = new ProxyCacheEntry(baseType, baseInterfaces); - cache[entry] = result; - } + var entry = new ProxyCacheEntry(baseType, baseInterfaces); + cache[entry] = result; } #endregion Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Fixture.cs 2011-06-21 14:22:28 UTC (rev 5967) @@ -0,0 +1,72 @@ +using System; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2773 { + public class Fixture : BugTestCase { + private Guid _entityGuid; + + protected override void OnSetUp() { + using (ISession session = OpenSession()) { + using (ITransaction tx = session.BeginTransaction()) { + var entity = new MyEntity(); + var entity2 = new MyEntity(); + entity.OtherEntity = entity2; + + session.Save(entity); + session.Save(entity2); + + _entityGuid = entity.Id; + + tx.Commit(); + } + } + } + + protected override void OnTearDown() { + base.OnTearDown(); + + using (ISession session = OpenSession()) { + using (ITransaction tx = session.BeginTransaction()) { + session.Delete("from MyEntity"); + tx.Commit(); + } + } + } + + [Test] + public void DeserializedSession_ProxyType_ShouldBeEqualToOriginalProxyType() { + System.Type originalProxyType = null; + System.Type deserializedProxyType = null; + ISession deserializedSession = null; + + using (ISession session = OpenSession()) { + using (ITransaction tx = session.BeginTransaction()) { + var entity = session.Get<MyEntity>(_entityGuid); + originalProxyType = entity.OtherEntity.GetType(); + tx.Commit(); + } + + + using (MemoryStream sessionMemoryStream = new MemoryStream()) { + BinaryFormatter formatter = new BinaryFormatter(); + formatter.Serialize(sessionMemoryStream, session); + + sessionMemoryStream.Seek(0, SeekOrigin.Begin); + deserializedSession = (ISession)formatter.Deserialize(sessionMemoryStream); + } + } + + using (ITransaction tx = deserializedSession.BeginTransaction()) { + var entity = deserializedSession.Get<MyEntity>(_entityGuid); + deserializedProxyType = entity.OtherEntity.GetType(); + tx.Commit(); + } + + deserializedSession.Dispose(); + + Assert.AreEqual(originalProxyType, deserializedProxyType); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Mappings.hbm.xml 2011-06-21 14:22:28 UTC (rev 5967) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2773"> + <class name="MyEntity"> + <id name="Id" column="id"> + <generator class="guid" /> + </id> + <many-to-one name="OtherEntity" /> + </class> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2773/Model.cs 2011-06-21 14:22:28 UTC (rev 5967) @@ -0,0 +1,9 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.NH2773 { + [Serializable] + public class MyEntity { + public virtual Guid Id { get; set; } + public virtual MyEntity OtherEntity { get; set; } + } +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-06-21 12:35:12 UTC (rev 5966) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-06-21 14:22:28 UTC (rev 5967) @@ -880,6 +880,8 @@ <Compile Include="NHSpecificTest\NH2746\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2760\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2760\Model.cs" /> + <Compile Include="NHSpecificTest\NH2773\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2773\Model.cs" /> <Compile Include="NHSpecificTest\NH941\Domain.cs" /> <Compile Include="NHSpecificTest\NH941\Fixture.cs" /> <Compile Include="NHSpecificTest\NH941\FixtureUsingList.cs" /> @@ -2726,6 +2728,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\NH2773\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2693\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2746\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2700\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |