2013-02-22 3 views
4

Я новичок, и я создал несколько приложений Java Swing для simlpe. Я смог использовать APCP для создания пула соединений и доступа к источнику данных.Java - DBCP против JNDI?

Я недавно начал создавать приложения на основе Java, используя JSP и Servlets. Я научился использовать JNDI для доступа к источнику данных. Я обновляю файлы XML и использую InitialContext() и lookup («java: comp/env»), и это все !!!! Я использую Apache Tomcat в качестве моего контейнера Servlet/JSP.

1. Но где создается пул соединений БД?

2. Если да, значит, это означает, что JNDI каким-то образом использует DBCP внутри?

Когда мне нужно создать DBCP для приложений Swing, мне пришлось сначала создать экземпляр GenericObjectPool, а затем создать объект фабрики соединений и, наконец, объект PoolableConnectionFactory для создания источника данных, который будет использоваться для получения соединения.

ответ

4

JNDI - это механизм передачи объектов из одной части системы в другую (в техническом плане между загрузчиками классов). Это наиболее полезно для классов и интерфейсов, найденных в Java Runtime, например String или DataSource.

Это означает, что в вашем случае JNDI является всего лишь транспортным механизмом, и вы должны иметь реальный пул соединений, определенный в другом месте. У большинства веб-контейнеров есть механизм для определения пула соединений в системе, и JNDI затем позволяет вам добраться до него.

+0

@ Thorbjørn .... Определяет ли DBCP для веб-приложений то же самое, что и для приложения Swing? – user547453

+0

@ Thorbjørn .... "... defined else where ..." может означать, что ... это файл класса Java или XML-файл? – user547453

+1

Способ определения пула соединений в Tomcat состоит в настройке '

3

Tomcat использует пользовательскую реализацию Apache DBCP и Apache Pool для JNDI Datasource. Эти библиотеки расположены в одном JAR по адресу $CATALINA_HOME/lib/tomcat-dbcp.jar.

Основной пакет org.apache.tomcat.dbcp во избежание конфликтов с обычными пакетами Apache Commons.

+0

@Paul .... но мне еще нужно определить пул соединений? Apache Tomcat не будет создавать его автоматически? – user547453

3

JNDI - это механизм поиска удаленных ресурсов посредством поиска. Он не имеет ничего общего с библиотеками объединения пулов. Эти библиотеки, из которых c3p0, DBCP и BoneCP, являются самыми известными, позволяют создавать источники данных с возможностью объединения соединений и/или операторов. Если этот источник данных используется в пределах вашего приложения, вам не нужно использовать JNDI, если он находится на удаленной системе (например, в Tomcat), вам необходимо использовать JNDI для доступа к данным источник.

В качестве побочного примечания, почему вы решили работать со старой школой Servlet/JSP? Лучше всего работать с JSP-преемником, facelets, который является предпочтительной технологией просмотра в JSF 2.x.

Еще один комментарий - передать управление вашим источником данных в известную структуру. Одним из направлений может быть использование ORM, например Hibernate, для управления вашим источником данных (который был создан с учетом пула соединений).