From bba99bbbafb62533c1a90508849103df2c3773bc Mon Sep 17 00:00:00 2001 From: lahma Date: Wed, 29 Jul 2009 23:32:05 +0000 Subject: [PATCH] Brought NHibernate proxy and byte code providers from NHibernate & unhAddins, set LocalSessionFactoryObject to use Spring proxy factory factory be default and thus removed LinFu dependency from NH 2.1 use --- .../net/2.0/LinFu.DynamicProxy.dll | Bin 20992 -> 0 bytes .../net/2.0/NHibernate.ByteCode.LinFu.dll | Bin 7168 -> 0 bytes .../net/3.5/LinFu.DynamicProxy.dll | Bin 20992 -> 0 bytes .../net/3.5/NHibernate.ByteCode.LinFu.dll | Bin 7168 -> 0 bytes .../NHibernate/LocalSessionFactoryObject.cs | 19 ++- .../NHibernate/Bytecode/BytecodeProvider.cs | 95 ++++++++++++ .../NHibernate/Bytecode/LazyInitializer.cs | 136 ++++++++++++++++++ .../NHibernate/Bytecode/ObjectsFactory.cs | 84 +++++++++++ .../Data/NHibernate/Bytecode/ProxyFactory.cs | 91 ++++++++++++ .../Bytecode/ProxyFactoryFactory.cs | 58 ++++++++ .../Bytecode/ReflectionOptimizer.cs | 81 +++++++++++ .../Spring.Data.NHibernate21.2008.csproj | 6 + .../LocalSessionFactoryObjectTests.cs | 7 +- .../Data/NHibernate/MultipleDbTests.xml | 6 - .../Data/NHibernate/NHDAOTests.xml | 3 - .../NHibernate/dbProviderTemplateTests.xml | 3 - .../Data/NHibernate/templateTests.xml | 3 - ...NHibernate21.Integration.Tests.2008.csproj | 10 +- .../AbstractInjectableUserTypeFixture.cs | 108 ++++++++++++++ .../Data/NHibernate/Bytecode/Foo.Spechbm.xml | 15 ++ .../Data/NHibernate/Bytecode/Foo.cs | 9 ++ .../Data/NHibernate/Bytecode/IDelimiter.cs | 25 ++++ .../Bytecode/InjectableStringUserType.cs | 90 ++++++++++++ .../Bytecode/InjectableUserTypeFixture.cs | 49 +++++++ .../Data/NHibernate/Bytecode/Product.cs | 13 ++ ...Spring.Data.NHibernate21.Tests.2008.csproj | 19 +-- .../Spring.Data.NHibernate21.Tests.build | 2 +- 27 files changed, 893 insertions(+), 39 deletions(-) delete mode 100644 lib/NHibernate21/net/2.0/LinFu.DynamicProxy.dll delete mode 100644 lib/NHibernate21/net/2.0/NHibernate.ByteCode.LinFu.dll delete mode 100644 lib/NHibernate30/net/3.5/LinFu.DynamicProxy.dll delete mode 100644 lib/NHibernate30/net/3.5/NHibernate.ByteCode.LinFu.dll create mode 100644 src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/BytecodeProvider.cs create mode 100644 src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/LazyInitializer.cs create mode 100644 src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ObjectsFactory.cs create mode 100644 src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ProxyFactory.cs create mode 100644 src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ProxyFactoryFactory.cs create mode 100644 src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ReflectionOptimizer.cs create mode 100644 test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/AbstractInjectableUserTypeFixture.cs create mode 100644 test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Foo.Spechbm.xml create mode 100644 test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Foo.cs create mode 100644 test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/IDelimiter.cs create mode 100644 test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/InjectableStringUserType.cs create mode 100644 test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/InjectableUserTypeFixture.cs create mode 100644 test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Product.cs diff --git a/lib/NHibernate21/net/2.0/LinFu.DynamicProxy.dll b/lib/NHibernate21/net/2.0/LinFu.DynamicProxy.dll deleted file mode 100644 index 222252208bf79f91cbaf3cd75cb0bf5a609b8a11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20992 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 diff --git a/lib/NHibernate21/net/2.0/NHibernate.ByteCode.LinFu.dll b/lib/NHibernate21/net/2.0/NHibernate.ByteCode.LinFu.dll deleted file mode 100644 index 015189d940402ddb3223a092a3061a82d93d8aef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 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 EA4aeR2mk;8 diff --git a/lib/NHibernate30/net/3.5/LinFu.DynamicProxy.dll b/lib/NHibernate30/net/3.5/LinFu.DynamicProxy.dll deleted file mode 100644 index 222252208bf79f91cbaf3cd75cb0bf5a609b8a11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20992 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 diff --git a/lib/NHibernate30/net/3.5/NHibernate.ByteCode.LinFu.dll b/lib/NHibernate30/net/3.5/NHibernate.ByteCode.LinFu.dll deleted file mode 100644 index 2035ee6deec4cb48fa1b33d690f6cb658a7fd992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7168 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 + /// + /// + /// Fabio Maulo + public class BytecodeProvider : IBytecodeProvider + { + private readonly IListableObjectFactory listableObjectFactory; + private readonly IObjectsFactory objectsFactory; + private readonly DefaultCollectionTypeFactory collectionTypefactory; + + /// + /// + /// + public BytecodeProvider(IListableObjectFactory listableObjectFactory) + { + this.listableObjectFactory = listableObjectFactory; + objectsFactory = new ObjectsFactory(listableObjectFactory); + collectionTypefactory = new DefaultCollectionTypeFactory(); + } + + /// + /// Retrieve the delegate for this provider + /// capable of generating reflection optimization components. + /// + /// The class to be reflected upon.All property getters to be accessed via reflection.All property setters to be accessed via reflection. + /// The reflection optimization delegate. + public IReflectionOptimizer GetReflectionOptimizer(Type clazz, IGetter[] getters, ISetter[] setters) + { + return new ReflectionOptimizer(listableObjectFactory, clazz, getters, setters); + } + + /// + /// The specific factory for this provider capable of + /// generating run-time proxies for lazy-loading purposes. + /// + public IProxyFactoryFactory ProxyFactoryFactory + { + get { return new ProxyFactoryFactory(); } + } + + /// + /// NHibernate's object instaciator. + /// + /// + /// For entities and its implementations. + /// + public IObjectsFactory ObjectsFactory + { + get { return objectsFactory; } + } + + /// + /// Instanciator of NHibernate's collections default types. + /// + public ICollectionTypeFactory CollectionTypeFactory + { + get { return collectionTypefactory; } + } + + } +} \ No newline at end of file diff --git a/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/LazyInitializer.cs b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/LazyInitializer.cs new file mode 100644 index 00000000..036bab25 --- /dev/null +++ b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/LazyInitializer.cs @@ -0,0 +1,136 @@ +#if NH_2_1 +#region License + +/* + * Copyright © 2002-2005 the original author or authors. + * + * Licensed 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. + */ + +#endregion + +#region Imports +using System; +using System.Reflection; + +using AopAlliance.Intercept; + +using NHibernate.Engine; +using NHibernate.Proxy.Poco; +using NHibernate.Type; + +using Spring.Aop; +using Spring.Reflection.Dynamic; + +#endregion + +namespace Spring.Data.NHibernate.Bytecode +{ + /// + /// + /// + /// Fabio Maulo + [Serializable] + public class LazyInitializer : BasicLazyInitializer, IMethodInterceptor, ITargetSource + { + private static readonly MethodInfo exceptionInternalPreserveStackTrace = + typeof(Exception).GetMethod("InternalPreserveStackTrace", BindingFlags.Instance | BindingFlags.NonPublic); + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public LazyInitializer(string entityName, Type persistentClass, object id, MethodInfo getIdentifierMethod, + MethodInfo setIdentifierMethod, IAbstractComponentType componentIdType, + ISessionImplementor session) + : base( + entityName, persistentClass.IsInterface ? typeof(object) : persistentClass, id, getIdentifierMethod, + setIdentifierMethod, componentIdType, session) { } + + #region Implementation of IInterceptor + + /// + /// Implement this method to perform extra treatments before and after + /// the call to the supplied . + /// + /// + ///

+ /// Polite implementations would certainly like to invoke + /// . + ///

+ ///
+ /// + /// The method invocation that is being intercepted. + /// + /// + /// The result of the call to the + /// method of + /// the supplied ; this return value may + /// well have been intercepted by the interceptor. + /// + /// + /// If any of the interceptors in the chain or the target object itself + /// throws an exception. + /// + public object Invoke(IMethodInvocation invocation) + { + try + { + MethodInfo methodInfo = invocation.Method; + object returnValue = base.Invoke(methodInfo, invocation.Arguments, invocation.Proxy); + + if (returnValue != InvokeImplementation) + { + return returnValue; + } + + SafeMethod method = new SafeMethod(methodInfo); + return method.Invoke(GetImplementation(), invocation.Arguments); + } + catch (TargetInvocationException ex) + { + exceptionInternalPreserveStackTrace.Invoke(ex.InnerException, new Object[] { }); + throw ex.InnerException; + } + } + + #endregion + + #region Implementation of ITargetSource + + object ITargetSource.GetTarget() + { + return Target; + } + + void ITargetSource.ReleaseTarget(object target) { } + + Type ITargetSource.TargetType + { + get { return PersistentClass; } + } + + bool ITargetSource.IsStatic + { + get { return false; } + } + + #endregion + } +} +#endif \ No newline at end of file diff --git a/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ObjectsFactory.cs b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ObjectsFactory.cs new file mode 100644 index 00000000..110d70c2 --- /dev/null +++ b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ObjectsFactory.cs @@ -0,0 +1,84 @@ +#if NH_2_1 +#region License + +/* + * Copyright © 2002-2005 the original author or authors. + * + * Licensed 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. + */ + +#endregion + +#region Imports + +using System; + +using NHibernate.Bytecode; + +using Spring.Objects.Factory; + +#endregion + +namespace Spring.Data.NHibernate.Bytecode +{ + /// + /// + /// + /// Fabio Maulo + public class ObjectsFactory : IObjectsFactory + { + private readonly IListableObjectFactory listableObjectFactory; + + /// + /// + /// + public ObjectsFactory(IListableObjectFactory listableObjectFactory) + { + this.listableObjectFactory = listableObjectFactory; + } + + /// + /// Creates an instance of the specified type. + /// + /// The type of object to create. + /// A reference to the created object. + public object CreateInstance(Type type) + { + string[] namesForType = listableObjectFactory.GetObjectNamesForType(type); + return namesForType.Length > 0 ? listableObjectFactory.GetObject(namesForType[0], type) : Activator.CreateInstance(type); + } + + /// + /// Creates an instance of the specified type. + /// + /// The type of object to create.true if a public or nonpublic default constructor can match; false if only a public default constructor can match. + /// A reference to the created object + public object CreateInstance(Type type, bool nonPublic) + { + string[] namesForType = listableObjectFactory.GetObjectNamesForType(type); + return namesForType.Length > 0 ? listableObjectFactory.GetObject(namesForType[0], type) : Activator.CreateInstance(type); + } + + /// + /// Creates an instance of the specified type using the constructor that best matches the specified parameters. + /// + /// The type of object to create.An array of constructor arguments. + /// A reference to the created object. + public object CreateInstance(Type type, params object[] ctorArgs) + { + return Activator.CreateInstance(type, ctorArgs); + } + + } +} +#endif \ No newline at end of file diff --git a/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ProxyFactory.cs b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ProxyFactory.cs new file mode 100644 index 00000000..8e71d7f3 --- /dev/null +++ b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ProxyFactory.cs @@ -0,0 +1,91 @@ +#if NH_2_1 +using System; + +#region License + +/* + * Copyright © 2002-2005 the original author or authors. + * + * Licensed 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. + */ + +#endregion + +#region Imports + +using Common.Logging; + +using NHibernate; +using NHibernate.Engine; +using NHibernate.Proxy; + +#endregion + +namespace Spring.Data.NHibernate.Bytecode +{ + /// + /// A Spring for .NET backed implementation for creating + /// NHibernate proxies. + /// + /// + /// Erich Eichinger + public class ProxyFactory : AbstractProxyFactory + { + private static readonly ILog log = LogManager.GetLogger(typeof(ProxyFactory)); + + [Serializable] + private class SerializableProxyFactory : global::Spring.Aop.Framework.ProxyFactory + { + // ensure proxy types are generated as Serializable + public override bool IsSerializable + { + get { return true; } + } + } + + #region IProxyFactory Members + + /// + /// Creates a new proxy. + /// + /// The id value for the proxy to be generated. + /// The session to which the generated proxy will be associated. + /// The generated proxy. + /// Indicates problems generating requested proxy. + public override INHibernateProxy GetProxy(object id, ISessionImplementor session) + { + try + { + LazyInitializer initializer = new LazyInitializer(EntityName, PersistentClass.IsInterface ? typeof(object) : PersistentClass, + id, GetIdentifierMethod, SetIdentifierMethod, ComponentIdType, session); + + SerializableProxyFactory proxyFactory = new SerializableProxyFactory(); + proxyFactory.Interfaces = Interfaces; + proxyFactory.TargetSource = initializer; + proxyFactory.ProxyTargetType = IsClassProxy; + proxyFactory.AddAdvice(initializer); + + object proxyInstance = proxyFactory.GetProxy(); + return (INHibernateProxy)proxyInstance; + } + catch (Exception ex) + { + log.Error("Creating a proxy instance failed", ex); + throw new HibernateException("Creating a proxy instance failed", ex); + } + } + + #endregion + } +} +#endif \ No newline at end of file diff --git a/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ProxyFactoryFactory.cs b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ProxyFactoryFactory.cs new file mode 100644 index 00000000..dbfda121 --- /dev/null +++ b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ProxyFactoryFactory.cs @@ -0,0 +1,58 @@ +#if NH_2_1 +#region License + +/* + * Copyright © 2002-2005 the original author or authors. + * + * Licensed 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. + */ + +#endregion + +#region Imports + +using NHibernate.Bytecode; +using NHibernate.Proxy; + +#endregion + +namespace Spring.Data.NHibernate.Bytecode +{ + /// + /// Creates a Spring for .NET backed instance. + /// + /// Erich Eichinger + public class ProxyFactoryFactory : IProxyFactoryFactory + { + #region IProxyFactoryFactory Members + + /// + /// Build a proxy factory specifically for handling runtime lazy loading. + /// + /// The lazy-load proxy factory. + public IProxyFactory BuildProxyFactory() + { + return new ProxyFactory(); + } + + /// + /// + public IProxyValidator ProxyValidator + { + get { return new DynProxyTypeValidator(); } + } + + #endregion + } +} +#endif \ No newline at end of file diff --git a/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ReflectionOptimizer.cs b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ReflectionOptimizer.cs new file mode 100644 index 00000000..0161a04d --- /dev/null +++ b/src/Spring/Spring.Data.NHibernate21/Data/NHibernate/Bytecode/ReflectionOptimizer.cs @@ -0,0 +1,81 @@ +#if NH_2_1 +#region License + +/* + * Copyright © 2002-2005 the original author or authors. + * + * Licensed 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. + */ + +#endregion + +#region Imports + +using System; + +using NHibernate.Properties; + +using Spring.Objects.Factory; + +#endregion + +namespace Spring.Data.NHibernate.Bytecode +{ + /// + /// + /// + /// Fabio Maulo + public class ReflectionOptimizer : global::NHibernate.Bytecode.Lightweight.ReflectionOptimizer + { + private readonly IListableObjectFactory listableObjectFactory; + + /// + /// + /// + /// + /// + /// + public ReflectionOptimizer(IListableObjectFactory listableObjectFactory, Type mappedType, IGetter[] getters, + ISetter[] setters) + : base(mappedType, getters, setters) + { + this.listableObjectFactory = listableObjectFactory; + } + + /// + /// Perform instantiation of an instance of the underlying class. + /// + /// The new instance. + public override object CreateInstance() + { + string[] namesForType = listableObjectFactory.GetObjectNamesForType(mappedType); + if (namesForType.Length > 0) + { + return listableObjectFactory.GetObject(namesForType[0], mappedType); + } + else + { + return base.CreateInstance(); + } + } + + /// + /// + /// + /// + protected override void ThrowExceptionForNoDefaultCtor(Type type) + { + } + } +} +#endif \ No newline at end of file diff --git a/src/Spring/Spring.Data.NHibernate21/Spring.Data.NHibernate21.2008.csproj b/src/Spring/Spring.Data.NHibernate21/Spring.Data.NHibernate21.2008.csproj index 87bc6616..ae440f17 100644 --- a/src/Spring/Spring.Data.NHibernate21/Spring.Data.NHibernate21.2008.csproj +++ b/src/Spring/Spring.Data.NHibernate21/Spring.Data.NHibernate21.2008.csproj @@ -148,6 +148,12 @@ Data\NHibernate\LocalSessionFactoryObject.cs + + + + + + diff --git a/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/LocalSessionFactoryObjectTests.cs b/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/LocalSessionFactoryObjectTests.cs index 6fc9cf4d..6c1569ac 100644 --- a/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/LocalSessionFactoryObjectTests.cs +++ b/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/LocalSessionFactoryObjectTests.cs @@ -24,7 +24,7 @@ using System.Collections; using System.IO; using NHibernate; #if NH_2_1 -using NHibernate.ByteCode.LinFu; +using Spring.Data.NHibernate.Bytecode; #endif using NHibernate.Cfg; using NHibernate.Connection; @@ -32,6 +32,7 @@ using NHibernate.Dialect; using NHibernate.Driver; using NUnit.Framework; + using Spring.Data.Common; #endregion @@ -57,9 +58,7 @@ namespace Spring.Data.NHibernate properties.Add(Environment.Dialect, typeof(MsSql2000Dialect).AssemblyQualifiedName); properties.Add(Environment.ConnectionDriver, typeof(SqlClientDriver).AssemblyQualifiedName); properties.Add(Environment.ConnectionProvider, typeof(DriverConnectionProvider).AssemblyQualifiedName); -#if NH_2_1 - properties.Add(Environment.ProxyFactoryFactoryClass, typeof(ProxyFactoryFactory).AssemblyQualifiedName); -#endif + sfo.HibernateProperties = properties; sfo.AfterPropertiesSet(); diff --git a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/MultipleDbTests.xml b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/MultipleDbTests.xml index a7a84679..ea2d13b2 100644 --- a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/MultipleDbTests.xml +++ b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/MultipleDbTests.xml @@ -29,9 +29,6 @@ - - @@ -56,9 +53,6 @@ - - diff --git a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/NHDAOTests.xml b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/NHDAOTests.xml index 65820aa1..a3db5357 100644 --- a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/NHDAOTests.xml +++ b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/NHDAOTests.xml @@ -33,9 +33,6 @@ - - diff --git a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/dbProviderTemplateTests.xml b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/dbProviderTemplateTests.xml index 270070b2..a1056203 100644 --- a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/dbProviderTemplateTests.xml +++ b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/dbProviderTemplateTests.xml @@ -55,9 +55,6 @@ --> - - diff --git a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/templateTests.xml b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/templateTests.xml index d14de685..e6a135ed 100644 --- a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/templateTests.xml +++ b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Data/NHibernate/templateTests.xml @@ -53,9 +53,6 @@ - - diff --git a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Spring.Data.NHibernate21.Integration.Tests.2008.csproj b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Spring.Data.NHibernate21.Integration.Tests.2008.csproj index c0056cfd..e106d4cb 100644 --- a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Spring.Data.NHibernate21.Integration.Tests.2008.csproj +++ b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Spring.Data.NHibernate21.Integration.Tests.2008.csproj @@ -2,7 +2,7 @@ Debug AnyCPU - 9.0.21022 + 9.0.30729 2.0 {4A07E150-ED90-407C-8CAD-4760444DDFD9} Library @@ -36,10 +36,6 @@ False ..\..\..\lib\NHibernate21\net\2.0\Iesi.Collections.dll - - False - ..\..\..\lib\NHibernate21\net\2.0\LinFu.DynamicProxy.dll - False ..\..\..\lib\NHibernate21\net\2.0\log4net.dll @@ -48,10 +44,6 @@ False ..\..\..\lib\NHibernate21\net\2.0\NHibernate.dll - - False - ..\..\..\lib\NHibernate21\net\2.0\NHibernate.ByteCode.LinFu.dll - False ..\..\..\lib\Net\2.0\nunit.framework.dll diff --git a/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/AbstractInjectableUserTypeFixture.cs b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/AbstractInjectableUserTypeFixture.cs new file mode 100644 index 00000000..e6f35d05 --- /dev/null +++ b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/AbstractInjectableUserTypeFixture.cs @@ -0,0 +1,108 @@ +#if NH_2_1XX +using log4net.Config; + +using NHibernate.Bytecode; +using NHibernate.Cfg; +using NHibernate.Engine; +using NHibernate.Tool.hbm2ddl; + +using NUnit.Framework; + +namespace Spring.Data.NHibernate.Bytecode +{ + public abstract class AbstractInjectableUserTypeFixture + { + protected ISessionFactoryImplementor sessions; + + static AbstractInjectableUserTypeFixture() + { + XmlConfigurator.Configure(); + } + + /// + /// Initialize the ServiceLocator registering all services needed by this test. + /// + /// + /// Services needed, in this test, are: + /// + /// - uNhAddIns.Adapters.CommonTests.EnhancedBytecodeProvider.IDelimiter + /// Implementation: uNhAddIns.Adapters.CommonTests.EnhancedBytecodeProvider.ParenDelimiter + /// + /// - uNhAddIns.Adapters.CommonTests.EnhancedBytecodeProvider.InjectableStringUserType + /// + protected abstract void InitializeServiceLocator(); + + protected abstract IBytecodeProvider GetBytecodeProvider(); + + [Ignore("Work in progress")] + [TestFixtureSetUp] + public void CreateDb() + { + InitializeServiceLocator(); + var cfg = new Configuration(); + Environment.BytecodeProvider = GetBytecodeProvider(); + cfg.Configure(); + cfg.AddResource("uNhAddIns.Adapters.CommonTests.EnhancedBytecodeProvider.Foo.Spechbm.xml", + typeof(AbstractInjectableUserTypeFixture).Assembly); + new SchemaExport(cfg).Create(false, true); + sessions = (ISessionFactoryImplementor)cfg.BuildSessionFactory(); + } + + [Ignore("Work in progress")] + [TestFixtureTearDown] + public void CloseSessionFactory() + { + if (sessions != null) + { + sessions.Dispose(); + } + sessions = null; + } + + [Ignore("Work in progress")] + [Test] + public void SaveObjectWithStringChangedToUpper() + { + object savedId; + Foo f = new Foo { Description = "something" }; + + using (var s = sessions.OpenSession()) + using (var tx = s.BeginTransaction()) + { + savedId = s.Save(f); + tx.Commit(); + } + + using (var s = sessions.OpenSession()) + { + var upperFoo = s.Get(savedId); + + Assert.AreEqual("[something]", upperFoo.Description); + } + } + + [Ignore("Work in progress")] + [Test] + public void SaveNullPropertyAndGetItBack() + { + object savedId; + var f = new Foo(); + + using (var s = sessions.OpenSession()) + using (var tx = s.BeginTransaction()) + { + savedId = s.Save(f); + tx.Commit(); + } + + using (var s = sessions.OpenSession()) + { + var upperFoo = s.Get(savedId); + + Assert.IsNull(upperFoo.Description); + } + } + + } +} +#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Foo.Spechbm.xml b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Foo.Spechbm.xml new file mode 100644 index 00000000..31c08dbf --- /dev/null +++ b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Foo.Spechbm.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Foo.cs b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Foo.cs new file mode 100644 index 00000000..d48d07e8 --- /dev/null +++ b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Foo.cs @@ -0,0 +1,9 @@ +#if NH_2_1XX +namespace Spring.Data.NHibernate.Bytecode +{ + public class Foo + { + public virtual string Description { get; set; } + } +} +#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/IDelimiter.cs b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/IDelimiter.cs new file mode 100644 index 00000000..be91aff4 --- /dev/null +++ b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/IDelimiter.cs @@ -0,0 +1,25 @@ +#if NH_2_1XX +namespace Spring.Data.NHibernate.Bytecode +{ + public interface IDelimiter + { + string Delimit(string source); + } + + public class ParenDelimiter: IDelimiter + { + public string Delimit(string source) + { + return !source.StartsWith("[") ? string.Format("[{0}]", source) : source; + } + } + + public class NoOpDelimiter: IDelimiter + { + public string Delimit(string source) + { + return source; + } + } +} +#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/InjectableStringUserType.cs b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/InjectableStringUserType.cs new file mode 100644 index 00000000..eec8f25f --- /dev/null +++ b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/InjectableStringUserType.cs @@ -0,0 +1,90 @@ +#if NH_2_1XX +using System.Data; +using NHibernate; +using NHibernate.SqlTypes; +using NHibernate.UserTypes; + +namespace Spring.Data.NHibernate.Bytecode +{ + public class InjectableStringUserType : IUserType + { + private readonly IDelimiter delimiter; + + public InjectableStringUserType(IDelimiter delimiter) + { + this.delimiter = delimiter; + } + + public object NullSafeGet(IDataReader rs, string[] names, object owner) + { + var resultString = (string)NHibernateUtil.String.NullSafeGet(rs, names[0]); + if (resultString != null) + return delimiter.Delimit(resultString); + return null; + } + + public void NullSafeSet(IDbCommand cmd, object value, int index) + { + if (value == null) + { + NHibernateUtil.String.NullSafeSet(cmd, null, index); + return; + } + + value = delimiter.Delimit((string)value); + + NHibernateUtil.String.NullSafeSet(cmd, value, index); + } + + public object DeepCopy(object value) + { + if (value == null) return null; + return string.Copy((string)value); + } + + public object Replace(object original, object target, object owner) + { + return original; + } + + public object Assemble(object cached, object owner) + { + return DeepCopy(cached); + } + + public object Disassemble(object value) + { + return DeepCopy(value); + } + + public SqlType[] SqlTypes + { + get + { + return new[] { new SqlType(DbType.String) }; + } + } + + public System.Type ReturnedType + { + get { return typeof(string); } + } + + public bool IsMutable + { + get { return false; } + } + + public new bool Equals(object x, object y) + { + if (x == null || y == null) return false; + return x.Equals(y); + } + + public int GetHashCode(object x) + { + return x.GetHashCode(); + } + } +} +#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/InjectableUserTypeFixture.cs b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/InjectableUserTypeFixture.cs new file mode 100644 index 00000000..866edd1b --- /dev/null +++ b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/InjectableUserTypeFixture.cs @@ -0,0 +1,49 @@ +#if NH_2_1XX +using NHibernate.Bytecode; + +using NUnit.Framework; + +using Spring.Context; +using Spring.Context.Support; +using Spring.Objects.Factory.Config; +using Spring.Objects.Factory.Support; + +namespace Spring.Data.NHibernate.Bytecode +{ + //[TestFixture] + public class InjectableUserTypeFixture : AbstractInjectableUserTypeFixture + { + private IConfigurableListableObjectFactory objectFactory; + private static readonly IObjectDefinitionFactory objectDefinitionFactory = new DefaultObjectDefinitionFactory(); + + protected override void InitializeServiceLocator() + { + IConfigurableApplicationContext context = new StaticApplicationContext(); + objectFactory = context.ObjectFactory; + + Register(objectFactory); + RegisterPrototype(objectFactory); + } + + protected override IBytecodeProvider GetBytecodeProvider() + { + return new BytecodeProvider(objectFactory); + } + + private static void Register(IConfigurableListableObjectFactory confObjFactory) + { + var odb = ObjectDefinitionBuilder.RootObjectDefinition(objectDefinitionFactory, typeof (TImplementation)). + SetAutowireMode(AutoWiringMode.Constructor); + confObjFactory.RegisterObjectDefinition(typeof (TSerivice).FullName, odb.ObjectDefinition); + } + + private static void RegisterPrototype(IConfigurableListableObjectFactory confObjFactory) + { + var odb = ObjectDefinitionBuilder.RootObjectDefinition(objectDefinitionFactory, typeof(TImplementation)) + .SetSingleton(false).SetAutowireMode(AutoWiringMode.AutoDetect); + confObjFactory.RegisterObjectDefinition(typeof(TImplementation).FullName, odb.ObjectDefinition); + } + } +} + +#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Product.cs b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Product.cs new file mode 100644 index 00000000..fdb1832c --- /dev/null +++ b/test/Spring/Spring.Data.NHibernate21.Tests/Data/NHibernate/Bytecode/Product.cs @@ -0,0 +1,13 @@ +#if NH_2_1XX +using System; + +namespace Spring.Data.NHibernate.Bytecode +{ + public class Product + { + public virtual Guid Id { get; set; } + public virtual string Description { get; set; } + public virtual decimal Price { get; set; } + } +} +#endif \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate21.Tests/Spring.Data.NHibernate21.Tests.2008.csproj b/test/Spring/Spring.Data.NHibernate21.Tests/Spring.Data.NHibernate21.Tests.2008.csproj index eb1272b5..deb1756a 100644 --- a/test/Spring/Spring.Data.NHibernate21.Tests/Spring.Data.NHibernate21.Tests.2008.csproj +++ b/test/Spring/Spring.Data.NHibernate21.Tests/Spring.Data.NHibernate21.Tests.2008.csproj @@ -2,7 +2,7 @@ Debug AnyCPU - 9.0.21022 + 9.0.30729 2.0 {90FEE979-7367-4542-BCCB-BF634E04A9D3} Library @@ -36,10 +36,6 @@ False ..\..\..\lib\NHibernate21\net\2.0\Iesi.Collections.dll - - False - ..\..\..\lib\NHibernate21\net\2.0\LinFu.DynamicProxy.dll - False ..\..\..\lib\NHibernate21\net\2.0\log4net.dll @@ -48,10 +44,6 @@ False ..\..\..\lib\NHibernate21\net\2.0\NHibernate.dll - - False - ..\..\..\lib\NHibernate21\net\2.0\NHibernate.ByteCode.LinFu.dll - False ..\..\..\lib\net\2.0\nunit.framework.dll @@ -98,6 +90,12 @@ Data\NHibernate\TestObject.cs + + + + + + @@ -133,6 +131,9 @@ + + + - +