Bonjour tout le monde.
Voici ma situation. Je developpe un appli AIR qui utilise BlazeDS. Cela implique un serveur dapplication, moi j'utilise Tomcat 6. Et enfin Hibernate pour l'ORM.
Je me suis creer une classes perso, basé sur une généré par Hibernate, et que je cible en tant que Remote Services.
Mais lorsque je lance TC j'obtiens l'erreur que vous verez plus bas qui relie un peu le tout je pense. Voici les fichiers en question :

Classe UserHome généré par HBM :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package rdev.data;
 
// Generated 21 oct. 2008 18:08:40 by Hibernate Tools 3.2.1.GA
import ...
 
public class UserHome {
      private final SessionFactory sessionFactory = getSessionFactory(); 
 
      protected SessionFactory getSessionFactory() { 
            try {
                  return (SessionFactory) new InitialContext() 
                              .lookup("SessionFactory");
            } catch (Exception e) {
                  log.error("Could not locate SessionFactory in JNDI", e);
                  throw new IllegalStateException(
                              "Could not locate SessionFactory in JNDI");
            }
      } 
 
      public void persist(User transientInstance) {} 
      public void attachDirty(User instance) {} 
      public void attachClean(User instance) {} 
      public void delete(User persistentInstance) {} 
      public User merge(User detachedInstance) {} 
      public User findById(java.lang.Integer id) {} 
      public List findByExample(User instance) {} 
 
      private static final Log log = LogFactory.getLog(UserHome.class); 
}
Voici ma classe UserDAO dont je me sert pour mes services. Comme vous le voyez je l'ai faite heriter de UserHome pour ne pas avoir a creer une instance de cette classe chaque fois que je voulais effectuer une operation sur la base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package rdev.dao;
import ...
 
public class UserDAO extends UserHome
{
      public List<User> getOnlineUser()
      {
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            User u = new User();
            u.setStatus(1);
            List<User> l = userHome.findByExample(u);
            return l;
      } 
}
J'ai bien configuré mon fichier remoting-config.xml pour BlazeDS normalement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<service id="remoting-service"
      class="flex.messaging.services.RemotingService">
      <adapters...  <!-- celui par defaut -->
 
      <default-channels ... <!-- celles par defaut -->
 
      <destination id="user">
            <properties>
                  <source>rdev.dao.UserDAO</source>
                  <scope>application</scope>
            </properties>
      </destination>
</service>
Et enfin, voici mon fichier de configuration hibernate :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<hibernate-configuration>
    <session-factory name="SessionFactory">
        <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost/rdev</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <property name="current_session_context_class">thread</property>
 
        <mapping resource="rdev/data/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>
Mais malgré tout ca, j'obtiens ce message d'erreur au demarrage de TC :
...
[BlazeDS] MessageBroker with id '__default__' is starting.
[BlazeDS] MessageBroker id: __default__ classLoader is: the MessageBroker's class loader and the context class loader (classLoader hashCode: 11688861 (parent hashCode: 17517359 (parent system))
[BlazeDS] Service with id 'authentication-service' is starting.
[BlazeDS] Service with id 'authentication-service' is ready (startup time: '0' ms)
[BlazeDS] Service with id 'remoting-service' is starting.
21 oct. 2008 22:15:03 rdev.data.UserHome getSessionFactory
GRAVE: Could not locate SessionFactory in JNDI
javax.naming.NameNotFoundException: Le Nom SessionFactory n'est pas lié à ce Contexte
at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
....


Lorsqu'il tombe sur la declaration de UserHome dans UserDAO, il rentre dans cette classe, puis essaye d'instancier une SessionFactory avec la methode getSessionFactory. Mais c'est a cette endroit qu'il plante : ma question est, pourquoi ?
J'espere que cest clair et que vous avez toute les infos requise pour comprendre ce qui ce passe.

PS : lorsque j'enleve cet heritage (et que du coup je modifie ma methode getOnlineUser) je n'ai plus ce message d'erreur et mon TC se lance correctement.