Pula połączeń czy źródło danych? Co powinienem umieścić w JNDI?
Czy bardziej sensowne jest połączenie puli na poziomie JNDI lub na poziomie webapp? Na przykład mógłbym stworzyć po prostu javax.sql.DataSource thusly:
<Context antiJARLocking="true">
<Resource name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/myDataSource" user="user" password="password" />
</Context>
A następnie skonfigurować basen na wiosnę w ten sposób:
<bean id="myDataSource" class="com.mchange.v2.c3p0.DataSources"
factory-method="pooledDataSource">
<constructor-arg>
<jee:jndi-lookup jndi-name="java:comp/env/jdbc/myDataSource" />
</constructor-arg>
</bean>
Lub mógłbym skonfigurować pulę bezpośrednio w samym JNDI:
<Resource name="jdbc/myDataSource"
auth="Container"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
driverClassName="com.mysql.jdbc.Driver"
jdbcUrl="jdbc:mysql://localhost/myDataSource"
user="user" password="password"
minPoolSize="3"
maxPoolSize="15"
maxIdleTime="5000"
idleConnectionTestPeriod="300"
acquireIncrement="3" />
Odejście tej wiosny:
<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" />
W obu przypadkach źródełko źródłowe myDataSource byłoby zbiorczym źródłem danych c3p0, ale które z nich jest lepsze? Myślę posiadanie puli w JNDI ma największy sens, ale minusem tego jest to, że musisz wypchnąć swoją bibliotekę c3p0 do poziomu kontenera serwletów, co może powodować konflikty z istniejącymi serwletami, jeśli obecnie używają innej wersji. Jednak umieszczenie go w JNDI oznacza, że Twoje aplikacje nie muszą się martwić o łączenie. Co o tym myślicie?
1 answers
Nie musisz łączyć źródła danych, pozyskanego z JNDI, ponieważ jest ono już połączone:)
Jedyną różnicą między pulą menedżera kontenerów a pulą aplikacji jest to, że w pierwszym przypadku masz możliwość monitorowania obciążenia w puli za pomocą standardowych interfejsów (np. konsoli JBoss). Następnie administrator serwera aplikacji zarządza decyzją o zwiększeniu rozmiaru puli, jeśli to konieczne. Może również przełączyć aplikacje na inny serwer DB (np. planowane migracja z MySQL do Oracle). Wadą jest to, że potrzebujesz nieco więcej wysiłku, aby skonfigurować źródło danych testowych JNDI do testów jednostkowych(Zobacz tutaj ).
I w drugim przypadku tak, musisz spakować DBCP lub c3p0 plus sterownik JDBC razem z aplikacją. W tym przypadku nie jest tak łatwo zebrać statystyki wszystkich PUL dla wszystkich aplikacji uruchomionych w Tomcat. Również migracji do nowszego sterownika JDBC (MySQL 4 do MySQL 5) nie można zrobić dla wszystkich aplikacji na raz. Właściwości połączenia są podłączone do Twojej aplikacji, nawet jeśli używasz pliku .property
(więc zmiana wymaga ponownego złożenia i przesunięcia projektu). Być może nie potrzebujesz tego wszystkiego, ponieważ masz tylko aplikację, jeden DB i brak kosztów zarządzania.
Więcej tematów na ten temat:
- 10 pul z 5 połączeniami v. s. 1 pul z 50 połączeniami (tak się dzieje, gdy każda aplikacja zaczyna używać własnej puli)
- DBCP vs C3P0
- implementacje puli połączeń
- dlaczego warto korzystać z puli połączeń?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:46:25