2016-03-30 1 views
0

Voici mon code pour la configuration c3p0 ... lorsque le serveur d'applications est en cours de démarrage, je suis les sources de données qui Initialisation sont venus de dbDef (définitions db table)méthode C3P0 ComboPooledDataSource.getConnection apporter null après le déploiement

SessionFactory sessionFactoryByServer; 
Connection jdbcConnectionC3P0; 
List<Map<String, Object>> connectionSourceList; // object combopooleddatasource 
@PostConstruct 
public void init() { 
    List <DBDef> dbDefs = new ArrayList<DBDef>(); 
    try { 
     dbDefs = getAllServerIpAddresses(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    connectionSourceList = new ArrayList<Map<String, Object>>(); 
    for (int i = 0; i < dbDefs.size(); i++) { 
     try { 
      Map<String, Object> cpdsMap = new HashMap<String, Object>(); 
      ComboPooledDataSource cpds = new ComboPooledDataSource(); 
      cpds.setDebugUnreturnedConnectionStackTraces(false); 
      cpds.setDriverClass(dbDefs.get(i).getDriver()); 
      cpds.setJdbcUrl(dbDefs.get(i).getConnectionURL()); 
      cpds.setUser(dbDefs.get(i).getUserName()); 
      cpds.setPassword(dbDefs.get(i).getPassword()); 
      cpds.setDataSourceName(dbDefs.get(i).getIpAddress()); 
      cpds.setAcquireIncrement(5); 
      cpds.setIdleConnectionTestPeriod(1800); 
      cpds.setMinPoolSize(10); 
      cpds.setAcquireRetryAttempts(1); 
      cpds.setPreferredTestQuery("SELECT 1"); 
      cpds.setMaxPoolSize(50); 
      Configuration cfg = new Configuration(); 
      cfg.configure(dbDefs.get(i).getHbmCfgXmlPath()); 
      cfg.setProperty("connection.provider_class", dbDefs.get(i).getConnectionProvideClass()) 
       .setProperty("hibernate.c3p0.acquire_increment", dbDefs.get(i).getAcquireIncrement()) 
       .setProperty("hibernate.c3p0.max_size", dbDefs.get(i).getMaxSize()) 
       .setProperty("hibernate.c3p0.min_size", dbDefs.get(i).getMinSize()) 
       .setProperty("hibernate.c3p0.timeout", dbDefs.get(i).getTimeout()) 
       .setProperty("hibernate.c3p0.max_statements", dbDefs.get(i).getMaxStatements()) 
       .setProperty("hibernate.c3p0.idle_test_period", dbDefs.get(i).getIdleTestPeriod()) 
       .setProperty("hibernate.show_sql", "true");  
      ServiceRegistryBuilder ssrb = new ServiceRegistryBuilder().applySettings(cfg.getProperties()); 
      SessionFactory sessionFactory = cfg.buildSessionFactory(ssrb.buildServiceRegistry()); 
      cpdsMap.put("serverIp", dbDefs.get(i).getIpAddress()); 
      cpdsMap.put("dataSource", cpds); 
      cpdsMap.put("sessionFactory", sessionFactory);    
     } catch (PropertyVetoException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

après avoir initialisé les sources de données c3p0 à List<Map<String, Object>> connectionSourceList;, quand je veux séquencer séquentiellement quelques données de 3 bases de données, dans cette liste le troisième oublie certains de ses attributs je pense. Voici le problème où est survenu. La méthode getConnection apporte null lorsque le programme appelle cette méthode lorsqu'il est exécuté sur le serveur d'applications. Tomcat est identique au développement envirement. (Copier-collé) la connexion Internet entre ma place et le serveur de l'application parfois coupé pour milisecondes et avant que je trouve cette getConnection est nulle je reçois cette pile ci-dessous ...

2016- 03-28 19:00:21 INFO AbstractPoolBackedDataSource: 2016-03-28 19:00:22 WARN BasicResourcePool: org.postgresql.util.PSQLException: FATAL: aucune entrée pg_hba.conf pour l'hôte "xx.xxx.xx.x" , l'utilisateur "nom d'utilisateur ", base de données "xxxx", SSL off

ET

java.sql.SQLException: les connexions ne peuvent pas être acquises à partir de la base de données sous-jacente!

EDIT: Le contenu de la configuration hba est ajouté.

local all all    trust 
host all all 127.0.0.1/32 trust 
host all all ::1/128  trust 
host raritan +odbc 0.0.0.0/0 md5 
+1

http://stackoverflow.com/search?q=[postgresql]+no+pg_hba.conf+entry+for+host –

+0

merci pour la réponse. mais j'ai déjà regardé ces réponses que vous avez pointées. Comme mon client l'a mentionné à propos des serveurs postgre sont en cours d'installation par un fichier image. alors pourquoi je n'ai aucun problème lors de la récupération des données d'autres connexions. leur configuration est la même. – comitatenses

+0

Le message d'erreur "* no pg_hba.conf entrée *" est assez clair. Votre configuration Postgres (** not ** "* postgre *" btw) n'autorise pas une connexion depuis votre serveur d'applications. [edit] votre question et montrez-nous le contenu ** complet ** du 'pg_hga.conf' sinon vous ne pourrez pas répondre à cette question. –

Répondre

0

J'ai trouvé une erreur tout en amorçant objet ComboPooledDataSource de l'objet dbDef. J'ai créé une nouvelle ligne sur la base de données où j'obtiens les propriétés de connexion. Il doit y avoir un caractère espace dans la définition de la ligne DB. Donc, ce code fonctionne très bien pour initier des connexions DB de manière dynamique.