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?

Author: MWiesner, 2011-10-07

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:

 23
Author: dma_k,
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