Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > настройка MySQL DataSource


Автор: UnicornMirage 1.3.2006, 02:07
Здравствуйте!
сейчас изучаю принципы работы с БД через пул соединений. использую MySQL и его родной драйвер mysql-connector-java-3.1.10-bin.jar

прочитал статью http://lib.juga.ru/article/articleprint/162/-1/68/ немного понял принцип работы и решил ознакомиться с уже готовыми решениями. на сайте http://dev.mysql.com/doc/refman/5.0/en/cj-general-j2ee-concepts.html прочитал про использование DataSource но не удалось понять как работает JNDI (правильно ли я понял что не настроил его правильно?) при выполнении примера, указанного в http://dev.mysql.com/doc/refman/5.0/en/cj-general-j2ee-concepts.html вываливается ошибка

Код

Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.lookup(Unknown Source)


указывающая на строку примера
Код

         /*
          * Lookup the DataSource, which will be backed by a pool
          * that the application server provides. DataSource instances
          * are also a good candidate for caching as an instance
          * variable, as JNDI lookups can be expensive as well.
          */

        DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB");


подскажите пожалуйста какую строку в качестве параметра нужно передать чтобы настроить этот DataSource?

у меня на localhost работает MySQL, на нем база bd_test, пользователь guest, пароль guest

заранее очень благодарен если кто поможет разобраться!!

Автор: tux 1.3.2006, 03:15
Привет!
Вот здесь тема JNDI достаточно подробно обсуждалась - http://forum.vingrad.ru/index.php?showtopic=83074.

Что касается твоего примера. Тот способ получения DataSource, который у тебя используется характерен для приложений, работающих внутри веб-контейнера. Чтобы настроить источник данных, тебе надо описать его в файлах конфигурации веб-контейнера (сервера приложений), причем для разных серверов настраивается это по-разному. В общем нужно знать что ты используешь.

Если речь идет не о веб-приложении, можно посмотреть, во-первых, вот эту статью - http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html. Там приведена реализация очень простого пула соединений. В общем-то полезно увидеть как это работает. Во-вторых, есть несколько реализаций пулов соединений, не связанных с серверами приложений. Например, такие:
  • http://jakarta.apache.org/commons/dbcp/
  • http://sourceforge.net/projects/c3p0
В пакетах есть примеры использования и документация.

Если нужен все-таки сервер приложений, напиши какой.

Автор: UnicornMirage 1.3.2006, 12:01
большое спасибо за информацию.. сейчас ее читаю.

пул соединений планирую использовать в своем сервлете, который выполняется в Resin 3.0.17

Автор: tux 1.3.2006, 14:22
Вот готовый рецепт использования источника данных в сервлете для Resin - http://www.caucho.com/resin-3.0/db/cookbook/servlet.xtp. Параметры настройки пула соединений описаны здесь - http://www.caucho.com/resin-3.0/db/config.xtp#Core-Configuration. Если параметры по умолчанию устраивают, тогда их можно не задавать.

Автор: Sherst 2.3.2006, 22:48
to tux
А есть ли такие рецепты только для Tomcat ?

Автор: tux 3.3.2006, 03:04
Есть конечно. Для этого нужно
1. в TOMCAT_HOME/conf/server.xml описать источник данных:
Код

<Context path="/application" debug="3">

    <Resource name="jdbc/DefaultDS" auth="Container" scope="Shareable"
        type="javax.sql.DataSource" />
    <ResourceParams name="jdbc/DefaultDS">
        <parameter>
            <name>factory</name>
            <value>
                org.apache.commons.dbcp.BasicDataSourceFactory
            </value>
        </parameter>
        <parameter>
            <name>driverClassName</name>
            <value>com.mysql.jdbc.Driver</value>
        </parameter>
        <parameter>
            <name>url</name>
            <value>jdbc:mysql://localhost/db_test?useUnicode=true&characterEncoding=cp1251</value>
        </parameter>
        <parameter>
            <name>username</name>
            <value>guest</value>
        </parameter>
        <parameter>
            <name>password</name>
            <value>guest</value>
        </parameter>
        <parameter>
            <name>maxActive</name>
            <value>20</value>
        </parameter>
        <parameter>
            <name>maxIdle</name>
            <value>10</value>
        </parameter>
        <parameter>
            <name>maxWait</name>
            <value>-1</value>
        </parameter>
    </ResourceParams>
</Context>

2. в web.xml веб-приложения пишем следующее:
Код

<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/DefaultDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

3. в программном коде:
Код

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/DefaultDS");
Connection conn = ds.getConnection();

Можешь посмотреть еще статью от производителя по этому поводу - http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html

Автор: Sherst 3.3.2006, 16:59
to tux
Сенькс. Буду разбираться.

Автор: rezzz 27.1.2009, 11:44
Добрый день.. помогите пожалуйста разобраться с ConnectionPool

tux,

не могли бы более подробно объяснить как использовать ваш пример?!

Система работает под apache 4.0, бд - MS SQL Server 2005.

В server.xml для системы прописано только 
<!-- Tomcat Root Context -->
   <Context path="" docBase="ROOT\DOSEE_docum" debug="0" reloadable="true" />

система использует БД c названием dosee_db...

вопрос.. чтобы организовать пул нужно в примере изменить название бд на dosee_db
и код Java куда следует вставлять?!

нужны еще какие-нибудь модули... ?


Если не затруднит ответьте пожалуйста.

tux

Автор: tux 27.1.2009, 17:44
А как приложение разворачивается на Tomcat?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)