Chcę użyć Apache Commons DBCP, aby włączyć łączenie połączeń w aplikacji Java (w tym przypadku nie ma źródła danych dostarczanego z kontenerami). W wielu miejscach w internecie-w tym Apache site - z wykorzystaniem biblioteki opiera się w tym fragmencie:Pule połączeń z Apache DBCP
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
ds.setUsername("scott");
ds.setPassword("tiger");
ds.setUrl(connectURI);
Zwracamy Ci połączenia DB dzięki metodzie getConnection(). Ale na innych stronach -I Apache Site also - instancja DataSource jest dokonywane za pośrednictwem tego:
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI,null);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory);
ObjectPool objectPool = new GenericObjectPool(poolableConnectionFactory);
PoolingDataSource dataSource = new PoolingDataSource(objectPool);
Jaka jest różnica między nimi? Używam łączenia połączeń z BasicDataSource
lub potrzebuję instancji PoolingDataSource
do pracy z pulą połączeń? Czy BasicDataSource
wątku bezpieczne (czy mogę używać go jako atrybut klasy) lub muszę zsynchronizować jego dostęp?
Co masz na myśli z "odpowiednimi akcesoriami"? Zsynchronizowane bloki? –
BasicDataSource jest bezpieczny dla wątków, ponieważ wszystkie zmienne są odczytywane/zapisywane przez synchronizację. Nie sądzę, że musisz użyć bloku synchronizacji. Jeśli rozszerzasz tę klasę, powinieneś po prostu zadbać o używanie odpowiednich akcesorów, zamiast uzyskiwać bezpośredni dostęp do chronionych pól, aby zapewnić bezpieczeństwo wątków, ale nie musisz używać bloków synchronizacji. – ivi