2010-01-26 5 views
3

Je développe une application qui utilise sept datasources (ds) pour les bases de données MySql. Je suis plutôt satisfait du résultat quand ça fonctionne. Cependant, je reçois des problèmes liés à la source de données lorsque je redéploie mon application.Sources de données Jboss non valides après redéploiement

Voici l'un des sept ds que j'ai configuré dans mon my-application ds.xml:

<xa-datasource> 
      <jndi-name>jdbc/my_db_name</jndi-name> 
      <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> 
      <xa-datasource-property name="URL">jdbc:mysql://192.168.26.2:3306/my_db_name</xa-datasource-property> 
      <xa-datasource-property name="User">user</xa-datasource-property> 
      <xa-datasource-property name="Password">password</xa-datasource-property> 
      <min-pool-size>0</min-pool-size> 
      <max-pool-size>5</max-pool-size> 
      <idle-timeout-minutes>5</idle-timeout-minutes> 
      <exception-sorter-class-name> 
      com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter 
      </exception-sorter-class-name> 
      <valid-connection-checker-class-name> 
      com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker 
      </valid-connection-checker-class-name> 
      <track-connection-by-tx/> 
</xa-datasource> 

Je pense avoir correctement configuré en fonction avec tout ce que j'ai trouvé sur le web à propos de ce.

1. Déployé l'application exécuter un test OK

2. Redéployé l'application, exécutez un test NOK

10: 07: 23865 WARN [JBossManagedConnectionPool] Throwable tout en essayant d'obtenir une nouvelle connexion: null

org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.lang.NullPointerException) 
at org.jboss.resource.adapter.jdbc.xa.XAManagedConnectionFactory.createManagedConnection(XAManagedConnectionFactory.java:144) 
at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:577) 
at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:262) 
at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:500) 
at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:341) 
at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:315) 
at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:396) 
at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:842) 
at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:88) 
at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:69) 
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84) 
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2073) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1298) 
at net.saphety.billing_core.dblayer.datasource.HibernateSession.configure(HibernateSession.java:58) 
at net.saphety.billing_core.dblayer.datasource.HibernateSessionFactory.getHibernateSession(HibernateSessionFactory.java:25) 
at net.saphety.billing_core.dblayer.datasource.HibDaoCRUD.<init>(HibDaoCRUD.java:35) 
at net.saphety.billingcorewebapp.web.FilterHibernateControlSession.doFilter(FilterHibernateControlSession.java:43) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) 
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
at java.lang.Thread.run(Thread.java:619) 
Caused by: java.lang.NullPointerException 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:426) 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:137) 
at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:107) 
at com.mysql.jdbc.jdbc2.optional.MysqlXADataSource.getXAConnection(MysqlXADataSource.java:47) 
at org.jboss.resource.adapter.jdbc.xa.XAManagedConnectionFactory.createManagedConnection(XAManagedConnectionFactory.java:136) 
... 34 more 

Après cette mise en veille prolongée se plaint de dialecte ...

org.hibernate.HibernateException: Hibernate Dialect must be explicitly set 
at net.saphety.billing_core.dblayer.datasource.HibernateSession.configure(HibernateSession.java:62) 
at net.saphety.billing_core.dblayer.datasource.HibernateSessionFactory.getHibernateSession(HibernateSessionFactory.java:25) 
at net.saphety.billing_core.dblayer.datasource.HibDaoCRUD.<init>(HibDaoCRUD.java:35) 
at net.saphety.billingcorewebapp.web.FilterHibernateControlSession.doFilter(FilterHibernateControlSession.java:43) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) 
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
at java.lang.Thread.run(Thread.java:619) 

3. Redéployez le fichier * -ds.xml et exécutez un test NOK, rien ne se passe ... Dans mon navigateur, je reçois une réponse vide.

4. Redéployer l'application, tout fonctionne bien à nouveau. : S

Le serveur MySql dispose de suffisamment de connexions disponibles.

J'ai d'autres projets avec des sources de données mais avec un serveur Oracle et aucun problème. Cela a donc quelque chose à voir avec MySql mais je n'arrive pas à comprendre quoi.

+0

Alors laissez-moi voir si je comprends bien? Vous êtes NOK jusqu'à ce que vous redéployiez votre fichier * -ds.xml ET que vous redéployiez votre application, mais pas l'inverse? – Adam

Répondre

2

Ces problèmes ressemblent à des problèmes MySQL, donc vous devriez probablement vérifier les journaux là-bas.

Caused by: java.lang.NullPointerException 
    at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:426) 

indique une défaillance profonde dans la connexion avec MySQL. Compte tenu de la quantité de connexions que vous avez à l'instance MySql. Il se peut que la connexion ne soit pas valide, mais JBoss essaie de la réutiliser.

Essayez de changer vos connexions de base de données à utiliser:

<min-pool-size>1</min-pool-size> 

, voire nul, pour ne pas simplement saisir les connexions piscine au démarrage. Voyez aussi si vous pouvez configurer MySql pour permettre plus de connexions simultanées. À l'heure actuelle, seul votre déploiement JBoss prendra 35 connexions au démarrage et atteindra un maximum de 140. Avez-vous vraiment besoin de tant de connexions et l'instance MySql est-elle configurée pour gérer autant de connexions. Si ce n'est pas le cas, obtenez ces paramètres plus en ligne et vos problèmes devraient s'améliorer.

+0

Non, je n'ai pas besoin de tant de connexions :), changé à 0 connexions initiales et 5 maximum. Même résultat Edited ma question initiale. – rsilva4

0

Une réponse complémentaire. Nous trouvons parfois que nous devons faire tomber le serveur; supprimez le test, les données et le travail (connectez-vous également si vous ne voulez pas que les anciennes ne soient plus disponibles) des répertoires de votre déploiement; et ramener le serveur. Le plus souvent, cela se produit lorsque nous exécutons un code instable qui se bloque avec des transactions partielles terminées et d'autres problèmes. Ces dossiers seront régénérés lorsque JBoss redémarrera. Voir this webpage pour un aperçu de ce que font ces dossiers.