Question

We're building a project using NHibernate and Castle with the Validators project. I'm trying to upgrade it to the latest supported version between all of those. I've gotten the application working without errors, but I'm getting the exception below in a few of my unit tests. These are tests that don't actually touch the database in any way, but test functionality around the mapped entities.

    NHibernate.Bytecode.ProxyFactoryFactoryNotConfiguredException: 
    The ProxyFactoryFactory was not configured.
    Initialize 'proxyfactory.factory_class' property of the session-factory
    configuration section with one of the available NHibernate.ByteCode providers.
    Example:
    <property name='proxyfactory.factory_class'>
    NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu
    </property>
    Example:
    <property name='proxyfactory.factory_class'>
    NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle
    </property>
    [Continues down stack trace...]

Below is my config file:

   <?xml version="1.0" encoding="utf-8" ?>
   <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="Linx2">
  <property
        name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property>
      <property name="dialect">Linx2.Common.Framework.PostgreSQL83Dialect, 
        Linx2.Common.Framework</property>
  <property name="connection.connection_string">[Hidden so I don't get fired.]</property>
      <property name="adonet.batch_size">10</property>
  <property name="show_sql">false</property>
  <property name="use_outer_join">true</property>
  <property name="command_timeout">60</property>
  <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
      <property name="proxyfactory.factory_class">
         NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle
       </property>
        <property name="connection.release_mode">after_transaction</property> 
        <mapping assembly="NHibernate.Collection.Observable" />
    </session-factory>
   </hibernate-configuration>

I have the config mapping there, and it works in the application. I'm also including the NHibernate.ByteCode dll. However, in these tests it is ignored. I've tried manually starting the configuration in individual test and even stopped and confirmed mid-test that the configuration has the item. However, the exception is thrown in the code below on the IsInitialized call.

    if (NHibernateUtil.IsInitialized(ChildAssociations))
                {
                    ChildAssociations.ForEach(x => isValid = isValid && x.Element.IsValid(validatedObjects));
                }

This worked previously with no problems in NHibernate build for 2.2. Any help would be greatly appreciated. I've been beating my head on it for the last 4 hours.

Was it helpful?

Solution

Apparently NHibernateUtil needs not only to have the configuration initialized, but needs the session factory to be built. I was able to get it to work by manually running the config and building the session factory in the tests. It wasn't a problem in the app because the session factory had been built before hand.

var cfg = new NHibernate.Cfg.Configuration().Configure();
var sessionFactory = cfg.BuildSessionFactory();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top