IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Web Java Discussion :

Rechargement continu du contexte d'application Spring et closing persistence


Sujet :

Spring Web Java

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 15
    Points
    15
    Par défaut Rechargement continu du contexte d'application Spring et closing persistence
    Bonjour,

    Je rencontre un fonctionnement dans lequel le contexte d'application est tout le temps en train de se recharger, la persistance se ferme etc.
    N'ayant pas de grande expérience dans le domaine je suis assez surpris...

    Mon test consiste en un tableau qui affiche des personnes, je peux modifier des infos et les clients connectés au système sont rafraichis. Pour permettre d'avoir le même fonctionnement si la base est modifiée par un programme externe j'utilise un servlet qui vérifie la base et déclenche les rafraichissement chez les clients. La vérification en base consiste, pour le moment, à regarder une table. Si des lignes existent alors elles sont traitées et devraient ensuite être détruites ..... mais seul le refresh se fait correctement, pas la destruction. La persistence n'est plus accessible, l'entitymanagerfactory est détruit ....

    Les logs montre des messages d'erreurs qui indiquent que l'instance d'application a été fermée etc ... je comprends pas trop

    Voici une partie du Log
    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
     
    18 mai 2009 15:57:26 org.springframework.web.context.ContextLoader initWebApplicationContext
    INFO: Root WebApplicationContext: initialization completed in 1531 ms
    18 mai 2009 15:57:26 com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet <init>
    INFO: GlassFish ARP available: false
    18 mai 2009 15:57:26 com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet <init>
    INFO: Jetty ARP available: false
    18 mai 2009 15:57:26 com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet <init>
    INFO: Adapting to Thread Blocking environment
    18 mai 2009 15:57:27 org.apache.coyote.http11.Http11Protocol start
    INFO: D�marrage de Coyote HTTP/1.1 sur http-8080
    18 mai 2009 15:57:27 org.apache.jk.common.ChannelSocket init
    INFO: JK: ajp13 listening on /0.0.0.0:8009
    18 mai 2009 15:57:27 org.apache.jk.server.JkMain start
    INFO: Jk running ID=0 time=0/16  config=null
    18 mai 2009 15:57:27 org.apache.catalina.startup.Catalina start
    INFO: Server startup in 3838 ms
    18 mai 2009 15:57:30 org.apache.catalina.core.StandardContext reload
    INFO: Le rechargement de ce contexte a d�marr�
    18 mai 2009 15:57:30 org.springframework.context.support.AbstractApplicationContext doClose
    INFO: Closing org.springframework.web.context.support.XmlWebApplicationContext@1a73d30: display name [Root WebApplicationContext]; startup date [Mon May 18 15:57:25 CEST 2009]; root of context hierarchy
    18 mai 2009 15:57:30 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
    INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@3acc67: defining beans [applicationContextHolder,renderManager,ApplicationBean1,SessionBean,PersonneBean,dataSource,dao,service,entityManagerFactory,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.config.internalTransactionAdvisor,txManager,org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0,org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor#0]; root of factory hierarchy
    18 mai 2009 15:57:30 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean destroy
    INFO: Closing JPA EntityManagerFactory for persistence unit 'jpa'
    18 mai 2009 15:57:30 org.hibernate.impl.SessionFactoryImpl close
    INFO: closing
    Voici le code du timer
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package maj;
     
     
    import aa.ApplicationContextHolder;
    import com.icesoft.faces.async.render.RenderManager;
    import java.util.Timer;
    import java.util.TimerTask;
    import org.springframework.context.ApplicationContext;
    import service.IService;
    import entites.LigneSuiviModifBDD;
    import java.util.List;
     
    public class synchro2 extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
        private static Timer timer;
        private TimerTaskTest task;
        private int period=1000;
        private ApplicationContext context;
        private RenderManager renderManager;
        private IService service;
     
        static {
            timer = new Timer("Test Timer");
        }
     
        public synchro2() {
            super();
            context = ApplicationContextHolder.getContext();
            renderManager = (RenderManager) context.getBean("renderManager");
            service= (IService) context.getBean("service");
            task=new TimerTaskTest();
            timer.schedule(task, 1000, period);
        }
     
        public void commit(){
     
            /*Extraction des objets LigneSuiviModifBDD*/
            List<LigneSuiviModifBDD> Resultat = service.extractionModifsBase();
     
            for(LigneSuiviModifBDD uneLigneSuiviModifBDD : Resultat){
                /*Generation des mises à jour via API Render pour chaque objet Ligne extait*/
                String IDaRafraichir = uneLigneSuiviModifBDD.getnumeroId().toString();
                renderManager.getOnDemandRenderer(IDaRafraichir).requestRender();
            }
     
        /*Destruction des lignes contenues dans Resultat*/
        service.destructionModifsBase(Resultat);
     
        }
     
        class TimerTaskTest extends TimerTask{
               public void run (  ){
                 try
                  {
                   commit();
                  }
                 catch  ( Exception ee )
                  {
                  }
                }
        }
     
    }
    Toute l'appli est configurée via le contexte Spring
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     
        <!-- Bean d'acces au Contexte -->
        <!-- Utilisé pour le sevlet synchro1 -->
        <!-- voir : http://java.developpez.com/faq/spring/?page=bases#accesscontextfromnonspringbean -->
        <bean id="applicationContextHolder"    class="aa.ApplicationContextHolder" />
     
        <bean id="renderManager" class="com.icesoft.faces.async.render.RenderManager" />
        <bean id="ApplicationBean1" class="aa.ApplicationBean1" />
        <bean id="SessionBean" class="aa.SessionBean" scope="session">
            <property name="service" ref="service" />
            <property name="renderManager" ref="renderManager" />
        </bean>
        <bean id="PersonneBean" class="aa.PersonneBean" scope="session">
            <property name="service" ref="service" />
            <property name="sessionEnCours" ref="SessionBean"/>
        </bean>
     
        <bean id="dataSource"
              class="org.springframework.jdbc.datasource.DriverManagerDataSource"
              p:driverClassName="com.mysql.jdbc.Driver"
              p:url="jdbc:mysql://localhost:3306/gipsi"
              p:username="root"
              p:password=""/>
     
        <!-- couches applicatives -->
        <bean id="dao" class="dao.Dao" />
     
        <bean id="service" class="service.Service">
            <property name="dao" ref="dao" />
        </bean>
     
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                    <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
                    <property name="generateDdl" value="true" />
                </bean>
            </property>
            <property name="loadTimeWeaver">
                <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
            </property>
        </bean>
     
        <!-- le gestionnaire de transactions -->
     
     
        <tx:annotation-driven transaction-manager="txManager" />
        <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory" />
        </bean>
     
        <!-- traduction des exceptions -->
     
        <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
     
        <!-- persistence -->
     
        <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
     
    </beans>
    et enfin le Web.xml
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <context-param>
            <param-name>com.icesoft.faces.concurrentDOMViews</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.debugDOMUpdate</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.validateXml</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.verifyObjects</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.uploadMaxFileSize</param-name>
            <param-value>4048576</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>server</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.standardRequestScope</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.synchronousUpdate</param-name>
            <param-value>false</param-value>
        </context-param>
     
     
     
         <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
        <listener>
            <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
        </listener>
     
     
     
     
        <servlet>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>Blocking Servlet</servlet-name>
            <servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>uploadServlet</servlet-name>
            <servlet-class>com.icesoft.faces.component.inputfile.FileUploadServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>synchro1</servlet-name>
            <servlet-class>maj.synchro1</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>synchro2</servlet-name>
            <servlet-class>maj.synchro2</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <url-pattern>/xmlhttp/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <url-pattern>*.iface</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <url-pattern>*.jspx</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Blocking Servlet</servlet-name>
            <url-pattern>/block/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>uploadServlet</servlet-name>
            <url-pattern>/uploadHtml</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <url-pattern>*.jsp</url-pattern>
        </servlet-mapping>
     
     
        <servlet-mapping>
            <servlet-name>synchro1</servlet-name>
            <url-pattern>/MAJ/synchro1</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    Quelqu'un saurait-il m'expliquer d'où vient le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 15
    Points
    15
    Par défaut le log de localhost de Tomcat
    Un complément dans lequel on voit bien que l'application ferme...

    Log de tomcat ( localhost)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    18 mai 2009 17:03:42 org.apache.catalina.core.ApplicationContext log
    INFO: Initializing Spring root WebApplicationContext
    18 mai 2009 17:03:44 org.apache.catalina.core.ApplicationContext log
    INFO: ContextListener: contextInitialized()
    18 mai 2009 17:03:44 org.apache.catalina.core.ApplicationContext log
    INFO: SessionListener: contextInitialized()
    18 mai 2009 17:03:48 org.apache.catalina.core.ApplicationContext log
    INFO: Closing Spring root WebApplicationContext
    18 mai 2009 17:03:53 org.apache.catalina.core.ApplicationContext log
    INFO: Initializing Spring root WebApplicationContext

  3. #3
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 15
    Points
    15
    Par défaut une info en plus ...
    extrait du Log
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    GRAVE: Communications link failure
     
    Last packet sent to the server was 0 ms ago.
    18 mai 2009 17:57:09 com.icesoft.faces.async.render.RenderHub createCoreService
    INFO: core render service created:
      core pool size : 10
      max pool size  : 15
      keep alive time: 300000
    18 mai 2009 17:57:10 org.apache.catalina.loader.WebappClassLoader loadClass
    INFO: Illegal access: this web application instance has been stopped already.  Could not load sun.reflect.MethodAccessorImpl.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
    java.lang.IllegalStateException
    	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273)
    	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    	at sun.misc.Unsafe.defineClass(Native Method)
    	at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
    	at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
    	at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:59)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:28)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke(AbstractEntityManagerFactoryBean.java:374)
    	at $Proxy10.getNativeEntityManagerFactory(Unknown Source)
    	at org.springframework.orm.jpa.JpaTransactionManager.createEntityManagerForTransaction(JpaTransactionManager.java:393)
    	at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:320)
    	at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:350)
    	at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:261)
    	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    	at $Proxy15.extractionModifsBase(Unknown Source)
    	at maj.synchro2.commit(synchro2.java:39)
    	at maj.synchro2$TimerTaskTest.run(synchro2.java:56)
    	at java.util.TimerThread.mainLoop(Timer.java:512)
    	at java.util.TimerThread.run(Timer.java:462)
    18 mai 2009 17:57:10 org.hibernate.util.JDBCExceptionReporter logExceptions
    ATTENTION: SQL Error: 0, SQLState: 08S01
    Mais pkoi cette appli fait un close ?!?!

  4. #4
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 15
    Points
    15
    Par défaut Suite ...
    Bon, à priori, ce que je pensais être un problème de prog semble devenir un problème lié au mode déploiement des applications par Tomcat. J'ai vu pas mal de sujets sur ce point et, tous, parlent de la propriété du serveur 'Reloadable' qui, lorsqu'à vrai, peut provoquer un double chargement de l'application. Les objets chargés au premier chargement sont déchargés mais pas entièrement ce qui provoque des problèmes par la suite. Je creuse tout pour l'appliquer à mon propre cas et si je trouve je remplis ce topic. Pour info, et si qqn a rencontré ce problème dans le même environnement que moi :

    développement avec NetBeans 6.5 / Tomcat 6 ( que je démarre via le tableau des services sur un système WinXP ) , Spring, JPA/Hibernate, IceFaces - JSF1.2

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 57
    Points : 139
    Points
    139
    Par défaut Une piste ?
    Bonjour,

    Pour la fermeture de la couche de persistence, je pense que c'est lié au fait que je n'ai pas vu le filtre OpenSessionInView offert par Spring pour l'intégration d'Hibernate.

    Si tu n'utilises pas ce filtre, la session hibernate se charge, puis se ferme toute seule. C'est le fonctionnement normal, car aucune (hard/soft) référence vers ta sessionFactory n'est maintenue par ton application.

    Je ne sais pas dans quelle mesure JPA intervient, ni si ce filtre est nécessaire dans ta configuration, ni même s'il est déjà présent dans ta config car je ne connais pas encore JPA.
    Je n'ai utilisé que JDBC (sans et avec Spring) et Hibernate pour l'instant, sur mes développements.

    Pour le double chargement de l'application, je l'ai expérimenté également avec Tomcat v5.5.26, jusqu'au moment où j'en ai eu marre et je suis passé sous JBoss 4.2.2. Problème dissous, mais d'autres sont survenus, car le deploiement des wars ne se fait pas tout à fait de la même manière dans ces 2 serveurs d'application, et évidemment j'avais besoin de stocker des informations dans le répertoire de déploiement de mon war. Le premier développeur s'étend permis des choses non portables, il a fallu rendre portable le produit.


    Bon courage.

  6. #6
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 15
    Points
    15
    Par défaut checking ...
    Merci pour ta réponse thithi83, je ne connaissais pas le filtre dont tu parles, je vais donc regarder.
    Je poste quelque chose dès que j'ai plus d'infos

  7. #7
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 15
    Points
    15
    Par défaut mince alors
    Bon j'ai une bonne et une mauvaise nouvelle ....

    La bonne c'est que ça marche ..... et la mauvaise c'est que je ne sais pas pourquoi ?!?!

    D'après ce que j'ai saisi, je ne dois pas utiliser OpenSessionInView dans ma config. Je suis Spring/JPA/Hibernate et d'après ce que je crois avoir compris ce filtre ne s'utilise pas lorsqu'on utilise du HJPA managé par Spring .... Euh qqn peut coinfirmer ? Mes transactions passent par l'annotation @transactional qui sont donc prises en charge par JPATransaction ...

    Pour mon problème initial ..... je n'ai rien fait d'autre que de ranger correctement l'ordre d'apparition des informations dans web.xml

    voici le web.xml qui fonctionne ....
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <listener>
            <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
        </listener>
     
        <context-param>
            <param-name>com.icesoft.faces.concurrentDOMViews</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.debugDOMUpdate</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.validateXml</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.verifyObjects</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.uploadMaxFileSize</param-name>
            <param-value>4048576</param-value>
        </context-param>
        <context-param>
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
            <param-value>server</param-value>
        </context-param>
        <context-param>
            <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
            <param-value>true</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.standardRequestScope</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>com.icesoft.faces.synchronousUpdate</param-name>
            <param-value>false</param-value>
        </context-param>
     
     
     
         <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
     
        <servlet>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>Blocking Servlet</servlet-name>
            <servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>uploadServlet</servlet-name>
            <servlet-class>com.icesoft.faces.component.inputfile.FileUploadServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
     
        <servlet>
            <servlet-name>synchro2</servlet-name>
            <servlet-class>maj.synchro2</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <url-pattern>/xmlhttp/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <url-pattern>*.iface</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <url-pattern>*.jspx</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Blocking Servlet</servlet-name>
            <url-pattern>/block/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>uploadServlet</servlet-name>
            <url-pattern>/uploadHtml</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>Persistent Faces Servlet</servlet-name>
            <url-pattern>*.jsp</url-pattern>
        </servlet-mapping>
     
     
       
        
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    Auparavent, j'avais placé les informations concernant synchro2 APRES le dernier </servler-mapping> et le <welcome-file-list> ....
    Est-ce vraiment aussi important que ça ? ou est-ce que c'est un hasard ??? Berk j'aime pas les résolutions bizarres comme ça .... qqn me jette une bouée ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 57
    Points : 139
    Points
    139
    Par défaut Intéressant
    Bonjour Yann,

    Citation Envoyé par yannlejunter Voir le message
    La bonne c'est que ça marche ..... et la mauvaise c'est que je ne sais pas pourquoi ?!?!
    Il y a bien pire comme mauvaises nouvelles ;-)
    Pourquoi? Et bien parce que cela maintient un lien entre ton application et la base de données après le chargement de la configuration Hibernate. Cette référence n'est pas collectée par le GC de ton Container grâce à ce filtre.

    Avant de te lancer dans un test géant et très instructif, as-tu vérifié que tu as les bonnes librairies dans ton classpath ? Question bête, mais essentielle!
    Pour Hibernate, je crois qu'il te faut hibernate-annotations-version.jar et autres lib en fonction de ton usage.
    Pour JPA, idem, il te faut également les librairies contenant les annotations nécessaires.

    Citation Envoyé par yannlejunter Voir le message
    D'après ce que j'ai saisi, je ne dois pas utiliser OpenSessionInView dans ma config. Je suis Spring/JPA/Hibernate et d'après ce que je crois avoir compris ce filtre ne s'utilise pas lorsqu'on utilise du HJPA managé par Spring.... Euh qqn peut coinfirmer ? Mes transactions passent par l'annotation @transactional qui sont donc prises en charge par JPATransaction ...
    En effet, si tu manages de cette manière ton application.
    Le fait que cela fonctionne quand tu ajoutes le filtre OpenSessionInView prouve simplement que ton annotation ne suffit pas pour mettre en place le bridge entre JPA et Hibernate.

    Je pense qu'il faut penser ton problème en différents segments:
    1- de ton application vers JPA
    2- de JPA vers Hibernate
    3- ta base de données... (à l'origine de troubles de l'humeur de certains développeurs, après 3 heures à chercher en vain l'erreur ailleurs)
    4- d'Hibernate vers JPA
    5- de JPA vers ton application


    Pour l'ordre de tes déclarations dans le web.xml ça peut être important dans certains cas. Mais je ne sais si dans ton cas cela est décisif.

    Tu trouveras, peut-être as-tu déjà essayé de voir à ces adresses, plus d'informations en suivant cette démo ou bien cet article.
    La démo, notamment, contient sans doute la configuration fonctionnelle des choix techniques que tu as fait: ça colle parfaitement d'après ton premier message

    Bon courage.
    Thierry.

  9. #9
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse Thierry

    Effectivement je manage via JPA et donc, je n'ai pas mis
    OpenSessionInView car en effet je ne suis pas dans la situation Hibernate seul
    mais dans l'implémentation JPA faite par Hibernate et une gestion des transactions confiées à Spring.
    C'est pour cette raison que je suis perplexe car, en effet, la seule modification que j'ai faite a été de changer quelques portions de code de place dans le web.xml ..... c'est tout

    Merci pour ta réponse en tout cas et à bientôt

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Chargement du contexte
    Salut,
    Il y a en effet un probleme de rechargement que j'ai résolu dans mon environement (Spring/Hibernate).
    c'est du en fait à des dépendances du Log4j qui sont :
    *jmxri-1.2.1.
    *jmxtools-1.2.1.

    Ces lib sont bel et bien dans le repo de maven mais seulement les pom et pas les jars.
    Donc quand vous déployez , il tente de les télécharger et ça crée le redémarrage du context.

    Ainsi pensez à télécharger ses lib et les placer dans repo puis les rajouter à votre projet.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. jsf et context d'application
    Par pbdlpc dans le forum JSF
    Réponses: 2
    Dernier message: 17/03/2007, 13h02
  2. [Framework] Conception d'une couche applicative Spring
    Par joseph_p dans le forum Spring
    Réponses: 10
    Dernier message: 17/03/2007, 10h43
  3. Charger le contexte d'application dans une appli WEB
    Par nanou2002 dans le forum Spring Web
    Réponses: 3
    Dernier message: 13/10/2006, 10h44
  4. retrouver le contexte d'application
    Par david06600 dans le forum Websphere
    Réponses: 2
    Dernier message: 10/08/2006, 13h35
  5. Réponses: 1
    Dernier message: 11/07/2006, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo