Java - DBCP против JNDI?
Я новичок, и я создал несколько приложений Java Swing. Я смог использовать Apache DBCP для создания пула соединений и доступа к источнику данных.
Недавно я начал создавать Java-приложения на основе веб-технологий с использованием JSP и сервлетов. Я научился использовать JNDI для доступа к источнику данных. Я обновляю файлы XML и использую InitialContext() и lookup("java:comp/env"), и это все!!!! Я использую Apache Tomcat в качестве своего контейнера Servlet/JSP.
1. Но где создается пул соединений с БД?
2. Если да, то означает ли это, что JNDI каким-то образом использует DBCP для внутреннего использования?
Когда мне нужно было создать DBCP для приложений Swing, мне сначала нужно было создать экземпляр GenericObjectPool, а затем создать объект фабрики соединений и, наконец, объект PoolableConnectionFactory для создания источника данных, который будет использоваться для получения соединения.
3 ответа
JNDI - это механизм для передачи объектов из одной части системы в другую (в техническом плане между загрузчиками классов). Это наиболее полезно для классов и интерфейсов, находящихся в среде выполнения Java, таких как String или DataSource.
Это означает, что в вашем случае JNDI - это всего лишь транспортный механизм, и вам необходимо определить фактический пул соединений, определенный в другом месте. Большинство веб-контейнеров имеют механизм определения общесистемного пула соединений, и затем JNDI позволяет вам к нему добраться.
JNDI - это механизм поиска удаленных ресурсов через поиск. Это не имеет ничего общего с библиотеками пула подключений. Эти библиотеки, из которых c3p0, DBCP и BoneCP, являются наиболее известными, позволяют создавать источники данных с возможностью объединения соединений и / или операторов. Если этот источник данных используется в вашем приложении, вам не нужно использовать JNDI, если он расположен в удаленной системе (например, в Tomcat), вам нужно использовать JNDI для получения доступа к источнику данных.
В качестве дополнительного примечания, почему вы решили работать со старым комбо Servlet/JSP? Лучше работать с преемником JSP, facelets, который является предпочтительной технологией просмотра в JSF 2.x.
Другой комментарий - перенести управление вашим источником данных в хорошо известную среду. Одним из направлений может быть использование ORM, например Hibernate, для управления источником данных (который был создан с учетом пула соединений).
Tomcat использует собственную реализацию Apache DBCP и Apache Pool для источника данных JNDI. Эти библиотеки расположены в одном JAR на $CATALINA_HOME/lib/tomcat-dbcp.jar
,
Основной пакет org.apache.tomcat.dbcp
Во избежание конфликтов с обычными пакетами создайте Apache Commons.