İşte c3p0 yapılandırması için benim kodudur dağıtımdan sonra boş getirmek ... uygulama sunucusu başladı edilirken, i dbDef gelen datasources (db tanımları tablo)C3P0 ComboPooledDataSource.getConnection yöntemi
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();
}
}
}
başlatılıyor am
c3p0 veri kaynaklarını List<Map<String, Object>> connectionSourceList;
'a başlattıktan sonra, sırayla 3 veri tabanından bir miktar veri almak istediğimde, bu listede üçüncü kısım bence özniteliklerinin bazılarını unutur. Burada ortaya çıkan sorun.
private SessionFactory retCurSessionFactory(String ipAddress) throws SQLException {
SessionFactory currentSessionFactory = null;
for (Map<String, Object> cpdsMap : connectionSourceList) {
sessionFactoryByServer = (SessionFactory)cpdsMap.get("sessionFactory");
jdbcConnectionC3P0 = ((ComboPooledDataSource)cpdsMap.get("dataSource")).getConnection();//getConnection brings null here, but only in app server not in my local machine.
currentSessionFactory = (SessionFactory)cpdsMap.get("sessionFactory");
}
}
return currentSessionFactory;
}
getConnection yöntemi, program uygulama sunucusunda çalışırken bu yöntemi çağırdığında null değerini döndürür. Tomcat, geliştirme yasasıyla aynıdır (kopyala yapıştırılan) benim yerim ve uygulama sunucusu arasındaki internet bağlantısı bazen milisaniye için kesilir ve bunu bulmadan önce getConnection boş değerin altında bu stacktrace'i alır ...
03-28 19:00:21 INFO AbstractPoolBackedDataSource: 2016-03-28 19:00:22 WARN BasicResourcePool: org.postgresql.util.PSQLException: FATAL: "xx.xxx.xx.x" ana bilgisayarı için pg_hba.conf girişi yok kullanıcı "kullanıcı adı ", veritabanı "xxxx" SSL kapalıVE
java.sql.SQLException: Bağlantılar altta yatan veritabanından alınamadı!
DÜZENLEME: Hba yapılandırma içeriği eklenir.
http://stackoverflow.com/search?q=[postgresql]+no+pg_hba.conf+entry+for+host –
Cevabınız için teşekkürler. ama işaret ettiğin bu cevaplara çoktan baktım. Müşterimden bahsettiğim gibi postgre sunucuları bir görüntü dosyası tarafından ayarlanıyor. öyleyse neden diğer bağlantılardan veri alırken sorunum yok. kurulumları aynıdır. – comitatenses
"* no pg_hba.conf entry *" hata mesajı oldukça açık. Gönderiniz (** değil ** "* postgre *" btw) yapılandırması, uygulama sunucunuzdan bir bağlantıya izin vermiyor. Sorunuzu [değiştir] ve bize 'pg_hga.conf'un ** tam ** içeriğini göster, aksi halde bu soruya cevap verilemez. –