Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1428 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Configuration Spring.net et NHibernate

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Configuration Spring.net et NHibernate

n°1725513
olive2634
Posté le 28-04-2008 à 12:12:08  profilanswer
 

Bonjour, je n'arrive pas a faire fonctionner les frameworks Spring.net et NHibernate sous Visual Studio 2008.
J'aimerai en plus utiliser les transactions via Spring
 
Voici mon fichier AppConfig :  
 


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      <section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core" />
    </sectionGroup>
    <section name="databaseSettings" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
 
  <spring>
    <parsers>
      <parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data" />
    </parsers>
 
    <context>
      <resource uri="Dao.xml" />
    </context>
  </spring>
 
  <!-- These properties are referenced in Dao.xml -->
  <databaseSettings>
    <add key="db.datasource" value="(local);Integrated Security=true" />
    <add key="db.user" value="root" />
    <add key="db.password" value="root" />
    <add key="db.database" value="adecco" />
  </databaseSettings>
 
</configuration>
 


 
Voici le fichier DAO.xml :  
 


<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
         xmlns:db="http://www.springframework.net/database">
 
  <!-- Property placeholder configurer for database settings -->
  <object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
    <property name="ConfigSections" value="databaseSettings"/>
  </object>
 
  <!-- Database and NHibernate Configuration -->
  <!-- Attention la valeur du provider "MySql-5.0 doit etre trouve a cette URL http://www.springframework.net/doc-latest/reference/html/dbprovider.html#d0e10929" -->
  <db:provider id="DbProvider"
                   provider="MySql-5.0"                
                   connectionString="Server=localhost;Database=${db.database};User ID=${db.user};Password=${db.password}"/>
 
  <object id="SessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate12">
    <property name="DbProvider" ref="DbProvider"/>
    <property name="MappingAssemblies">
      <list>
        <value>adecco</value>
      </list>
    </property>
    <property name="HibernateProperties">
      <dictionary>
 
        <entry key="hibernate.connection.provider"
               value="NHibernate.Connection.DriverConnectionProvider"/>
 
        <entry key="hibernate.dialect"
               value="NHibernate.Dialect.MySQL5Dialect"/>
 
        <entry key="hibernate.connection.driver_class"
               value="NHibernate.Driver.MySqlDataDriver"/>
         
        <!-- Mise en place du cache -->
        <entry key="hibernate.cache.provider_class"  
               value="NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache" />
        <entry key="relativeExpiration"  
               value="60" />
        <entry key="hibernate.cache.use_query_cache"  
               value="true" />
         
        <entry key="hibernate.current_session_context_class"
                     value="Spring.Data.NHibernate.SpringSessionContext, Spring.Data.NHibernate12"/>        
      </dictionary>
    </property>
 
  </object>
 
  <!-- Pour la gestion des transaction avec NHibernate et Spring -->
  <object id="HibernateTransactionManager"
        type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate12">
    <property name="DbProvider" ref="DbProvider"/>
    <property name="SessionFactory" ref="SessionFactory"/>
  </object>
 
  <!-- Mise en place d'un proxy pour les transactions  
  <object id="TxProxyConfigurationTemplate" abstract="true"
          type="Spring.Transaction.Interceptor.TransactionProxyFactoryObject, Spring.Data">
    <property name="PlatformTransactionManager" ref="HibernateTransactionManager"/>
    <property name="TransactionAttributes">
      <name-values>
         
        <add key="Process*" value="PROPAGATION_REQUIRED"/>
      </name-values>
    </property>
  </object> -->
 
 
  <object id="HibernateTemplate" type="Spring.Data.NHibernate.HibernateTemplate">
    <property name="SessionFactory" ref="SessionFactory" />
    <property name="TemplateFlushMode" value="Auto" />
    <property name="CacheQueries" value="true" />
  </object>
 
 
   
  <object id="QualificationDAO" type="adecco.DAO.QualificationDAO, adecco">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
   
  <!-- Data Access Objects  
  <object id="ClientDAO" type="adecco.DAO.ClientDao, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
  <object id="ContratDAO" type="adecco.DAO.ContratDao, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
  <object id="InterimaireDAO" type="adecco.DAO.InterimaireDao, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
  <object id="QualificationDAO" type="adecco.DAO.Qualification, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
  <object id="RaisonSocialDAO" type="adecco.DAO.RaisonSocialDao, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
  <object id="RoutagePaieDAO" type="adecco.DAO.RoutagePaieDao, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
  <object id="SecteurActiviteDAO" type="adecco.DAO.SecteurActiviteDao, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
  <object id="StatutContratDAO" type="adecco.DAO.StatutContratDao, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object>
  <object id="TypeAvenantDAO" type="adecco.DAO.TypeAvenantDao, adecco.DAO">
    <property name="SessionFactory" ref="SessionFactory"/>
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
  </object> -->
 
</objects>
 
 


 
Voici, le main :  
 

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using adecco.DAO;
  6. using adecco.Entities;
  7. using Spring.Context;
  8. using Spring.Context.Support;
  9. namespace adecco
  10. {
  11.     class Program
  12.     {
  13.         static void Main(string[] args)
  14.         {
  15.             System.Console.Out.WriteLine("L'application démarre...\n" );
  16.             try
  17.             {
  18.                 IApplicationContext ctx = ContextRegistry.GetContext();
  19.                
  20.                 string valeur;
  21.                 Console.Clear();
  22.                 Console.Out.WriteLine("\nVeuillez entrer une qualification :\n" );
  23.                 valeur = Console.ReadLine();
  24.                 QualificationDAO q = (QualificationDAO)ctx.GetObject("MyQualificationDAO" );
  25.                 Qualification tmp = new Qualification(valeur);
  26.                 q.createQualification(tmp);
  27.             }
  28.             catch (System.Exception ex)
  29.             {
  30.                 System.Console.Error.WriteLine("\n\n" + ex.ToString() + "\n\n" );
  31.             }
  32.             finally
  33.             {
  34.                 //System.Console.Clear();
  35.                 //System.Console.Out.WriteLine("\nL'application est fermée! Appuyer sur une touche\n" );
  36.                 System.Console.ReadLine();
  37.             }
  38.         }
  39.     }
  40. }


 
Sachant que ma classe QualificationDAO ne fait rien pour l'instant donc je ne l'a publie pas.
 
Voici le message d'erreur :  
 


System.Configuration.ConfigurationErrorsException: Error creating context 'sprin
g.root': 'TransactionManager' node cannot be resolved for the specified context
[adecco.DAO.QualificationDAO]. ---> Spring.Util.FatalReflectionException: Cannot
 instantiate Type [Spring.Context.Support.XmlApplicationContext] using ctor [Voi
d .ctor(System.String, Boolean, System.String[])] : 'Une exception a été levée p
ar la cible d'un appel.' ---> System.Reflection.TargetInvocationException: Une e
xception a été levée par la cible d'un appel. ---> Spring.Objects.Factory.Object
CreationException: Error creating object with name 'QualificationDAO' defined in
 'file [D:\Mes Documents\Visual Studio 2008\Projects\adecco\adecco\bin\Debug\Dao
.xml]' : Initialization of object failed : 'TransactionManager' node cannot be r
esolved for the specified context [adecco.DAO.QualificationDAO]. ---> Spring.Cor
e.InvalidPropertyException: 'TransactionManager' node cannot be resolved for the
 specified context [adecco.DAO.QualificationDAO].
   à Spring.Expressions.PropertyOrFieldNode.InitializeNode(Object context)
   à Spring.Expressions.PropertyOrFieldNode.Set(Object context, EvaluationContex
t evalContext, Object newValue)
   à Spring.Expressions.BaseNode.SetValue(Object context, IDictionary variables,
 Object newValue)
   à Spring.Expressions.BaseNode.Spring.Expressions.IExpression.SetValue(Object
context, Object newValue)
   à Spring.Objects.ObjectWrapper.SetPropertyValue(IExpression propertyExpressio
n, Object val)
   à Spring.Objects.ObjectWrapper.SetPropertyValue(PropertyValue pv)
   à Spring.Objects.ObjectWrapper.SetPropertyValues(IPropertyValues propertyValu
es, Boolean ignoreUnknown)
   à Spring.Objects.ObjectWrapper.SetPropertyValues(IPropertyValues pvs)
   à Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.ApplyPr
opertyValues(String name, RootObjectDefinition definition, IObjectWrapper wrappe
r, IPropertyValues properties)
   à Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.Populat
eObject(String name, RootObjectDefinition definition, IObjectWrapper wrapper)
   à Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.Configu
reObject(String name, RootObjectDefinition definition, IObjectWrapper wrapper)
   à Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.CreateO
bject(String name, RootObjectDefinition definition, Object[] arguments, Boolean
allowEagerCaching)
   --- Fin de la trace de la pile d'exception interne ---
   à Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.CreateO
bject(String name, RootObjectDefinition definition, Object[] arguments, Boolean
allowEagerCaching)
   à Spring.Objects.Factory.Support.AbstractAutowireCapableObjectFactory.CreateO
bject(String name, RootObjectDefinition definition, Object[] arguments)
   à Spring.Objects.Factory.Support.AbstractObjectFactory.CreateAndCacheSingleto
nInstance(String objectName, RootObjectDefinition objectDefinition, Object[] arg
uments)
   à Spring.Objects.Factory.Support.AbstractObjectFactory.GetObject(String name,
 Type requiredType, Object[] arguments)
   à Spring.Objects.Factory.Support.AbstractObjectFactory.GetObject(String name)
 
   à Spring.Objects.Factory.Support.DefaultListableObjectFactory.PreInstantiateS
ingletons()
   à Spring.Context.Support.AbstractApplicationContext.Refresh()
   à Spring.Context.Support.XmlApplicationContext..ctor(Boolean refresh, String
name, Boolean caseSensitive, IApplicationContext parentContext, String[] configu
rationLocations)
   à Spring.Context.Support.XmlApplicationContext..ctor(String name, Boolean cas
eSensitive, String[] configurationLocations)
   --- Fin de la trace de la pile d'exception interne ---
   à System.RuntimeMethodHandle._InvokeConstructor(Object[] args, SignatureStruc
t& signature, IntPtr declaringType)
   à System.RuntimeMethodHandle.InvokeConstructor(Object[] args, SignatureStruct
 signature, RuntimeTypeHandle declaringType)
   à System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Bi
nder binder, Object[] parameters, CultureInfo culture)
   à System.Reflection.ConstructorInfo.Invoke(Object[] parameters)
   à Spring.Util.ObjectUtils.InstantiateType(ConstructorInfo constructor, Object
[] arguments)
   --- Fin de la trace de la pile d'exception interne ---
   à Spring.Util.ObjectUtils.InstantiateType(ConstructorInfo constructor, Object
[] arguments)
   à Spring.Context.Support.ContextHandler.RootContextInstantiator.InvokeContext
Constructor(ConstructorInfo ctor)
   à Spring.Context.Support.ContextHandler.ContextInstantiator.InstantiateContex
t()
   à Spring.Context.Support.ContextHandler.InstantiateContext(IApplicationContex
t parentContext, Object configContext, String contextName, Type contextType, Boo
lean caseSensitive, String[] resources)
   à Spring.Context.Support.ContextHandler.Create(Object parent, Object configCo
ntext, XmlNode section)
   --- Fin de la trace de la pile d'exception interne ---
   à System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, Sec
tionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord s
ectionRecord, Object parentResult)
   à System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factory
Record, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolea
n getRuntimeObject, Object& result, Object& resultRuntimeObject)
   à System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String con
figKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boole
an requestIsHere, Object& result, Object& resultRuntimeObject)
   à System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String con
figKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boole
an requestIsHere, Object& result, Object& resultRuntimeObject)
   à System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String con
figKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boole
an requestIsHere, Object& result, Object& resultRuntimeObject)
   à System.Configuration.BaseConfigurationRecord.GetSection(String configKey, B
oolean getLkg, Boolean checkPermission)
   à System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
   à System.Configuration.ClientConfigurationSystem.System.Configuration.Interna
l.IInternalConfigSystem.GetSection(String sectionName)
   à System.Configuration.ConfigurationManager.GetSection(String sectionName)
   à Spring.Util.ConfigurationUtils.GetSection(String sectionName)
   à Spring.Context.Support.ContextRegistry.InitializeContextIfNeeded()
   à Spring.Context.Support.ContextRegistry.GetContext()
   à adecco.Program.Main(String[] args) dans D:\Mes Documents\Visual Studio 2008
\Projects\adecco\adecco\Program.cs:ligne 22


 
Je ne comprend vraiment pas ce qui bug. Apparemment, il n'aime pas l'objet 'TransactionManager'.
Si quelqu'un peut m'aider, ce serai sympa.
Mais c vrai que j'en suis à mon 6ème msg sur plusieurs sujet différent sans aucune réponse. A croire que personne ne configure de framework en France.
 
Cordialement...

mood
Publicité
Posté le 28-04-2008 à 12:12:08  profilanswer
 

n°1726906
mrxl
Posté le 30-04-2008 à 14:50:36  profilanswer
 

Salut,
 
si j'ai bien compris l'erreur, il n'existe pas de propriété TransactionManager dans ton Dao.
 
Si tes DAO implementent bien HibernateDaoSupport, tu devrais plutot setter la propriété HibernateTemplate :

Code :
  1. <object id="QualificationDAO" type="adecco.DAO.QualificationDAO, adecco">
  2.    <property name="HibernateTemplate" ref="HibernateTemplate"/>
  3. </object>


 
De plus, tu devrais plutot travailler avec des interfaces pour tes DAO au lieu de manipuler directement l'implémtation.
 
Il y a des exemples fournit avec NHibernate dans Spring.NET, jettes y un oeil.
 
N'hésites pas à poser des questions sur leur forums:
http://forum.springframework.net


Message édité par mrxl le 30-04-2008 à 14:52:50
n°1727246
moi23372
Posté le 01-05-2008 à 14:05:53  profilanswer
 

tu sais, tant qu' afaire, utiliser LINQ for SQL plutot qu' NHIBERNATE. Car NHIBERNATE, niveau performance, c'est l'ultra catastrophe.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Configuration Spring.net et NHibernate

 

Sujets relatifs
Configuration EasyPHP en vue de l'installation de spipapplication d'authentification web
Mapping NhibernateMapping NHibernate probleme <composite-id>
Génération de Mapping O/R NHibernate avec MyGenerationconfiguration port parallele sous windows xp
NHibernate et MySql 5.0outils pour fichier de configuration
xampp pb de configuration ?configuration de mysql avec asterisk dans tribox
Plus de sujets relatifs à : Configuration Spring.net et NHibernate


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR