|
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.
|