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


Автор: sith 2.1.2008, 12:03
...есть у меня такой вопрос...
... хочу сделать свое преложение такого плана - пользователь заполняет форму... форма передаеться сервелту и сервлет записывает данные в БД... вопрос такой... нужно ли в конфигах томката прописывать используемый сервер баз данных или нет... если нужно то сбросьте пример... пожалуйста

Автор: Zamuta 2.1.2008, 12:13
sith, томкат по умолчанию идёт с apache common-dbcp (data base connection pool). Если собираешься использовать его пул соединений, а желательно это делать, то необходимо прописать в context.xml (для конкретного приложения) или в server.xml (если для всего сервера) настройки работы dbcp.

Вот пример для context.xml для mysql
Код

<Context path="/path">
  <Resource auth="Container" 
      driverClassName="com.mysql.jdbc.Driver"
      maxActive="200"
      maxIdle="10" 
      maxWait="10000"
      name="myPool"
      password="pass"
      removeAbandoned="true"
      removeAbandonedTimeout="30"
      type="javax.sql.DataSource"
      url="jdbc:mysql://localhost:3306/schema_name" 
      username="root"/>
  </Context>

Для server.xml смотреть на сайте томката.


Автор: sith 2.1.2008, 12:38
а зачем это делать... как это я буду использовать в коде сервлета...? 

Автор: Platon 2.1.2008, 12:52
Это http://en.wikipedia.org/wiki/Java_Naming_and_Directory_Interface

Добавлено через 5 минут и 54 секунды
http://forum.vingrad.ru/faq/topic-157996.html

Добавлено через 8 минут и 25 секунд
но лично я, не могу понять смысла этих Джндай...

Автор: XEugene 2.1.2008, 13:02
Нужно ещё создать ссылку на datasource в web.xml
Код

    <resource-ref>
        <res-ref-name>jdbc/mysql-connector-java-3.1.14-bin</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>


Дальше созданный пул юзается через JNDI
В сервлете(хотя я бы завел для этой цели отдельный класс) должно присутствовать что-то подобное

Код

    DataSource pool;
    Connection con;
    Context env = null;
    try {
        env = (Context)new InitialContext().lookup("java:comp/env");
        pool = (DataSource)env.lookup("jdbc/mysql-connector-java-3.1.14-bin");
        if (pool == null) throw new ServletException("Unknown DataSource");
    }
    catch(NamingException ex) {
           throw new ServletException(ex.getMessage());
    } 
    con = pool.getConnection();


Дальше юзаешь созданный коннект как обычно,  создавая Statement или PreparedStatement.

Добавлено через 9 минут и 39 секунд
После каждого обращения к БД нужно будет возвращать соединения в пул
Код

con.close();
 иначе открытые соединения будут накапливаться.

Автор: sith 2.1.2008, 15:49
... это делаеться для того что бы потом удобно было заменять сервера... если я захочу перейти на другой... или зачем...?

Автор: Platon 2.1.2008, 15:54
smile на самом деле наверно я просто не сталкивался с такой проблемой, но истинно, к примеру БД с hibernate что в standalone что в Web приложении у меня работа ведется одинаково, никаких джндаев.

Автор: sith 2.1.2008, 16:13
XEugene к тебе вопрос... а где я указываю в твоих примерах кода нужный мне драйвер для работы с БД

Автор: Tony 2.1.2008, 16:34
Цитата(sith @ 2.1.2008,  12:03)
...есть у меня такой вопрос...
... хочу сделать свое преложение такого плана - пользователь заполняет форму... форма передаеться сервелту и сервлет записывает данные в БД... вопрос такой... нужно ли в конфигах томката прописывать используемый сервер баз данных или нет... если нужно то сбросьте пример... пожалуйста

Mozhno i ne ispolzovat' konfigi tomcata i dazhe lutshe. T.k ti ne budesh privjazan k Tomcatu. smile 

Автор: XEugene 2.1.2008, 17:10
context.xml в случае с моим драйвером будет вылядеть так
Код

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/yourWebAppContext">
    <Resource
      name="jdbc/mysql-connector-java-3.1.14-bin"
      type="javax.sql.DataSource"
      username="root"
      password=""
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      validationQuery="SELECT 1"
      url="jdbc:mysql://localhost/test?characterEncoding=UTF-8"
      maxActive="4"/>
 </Context>


Драйвер указан в Resource name.  Сам mysql-connector-java-3.1.14-bin.jar у меня при этом находиться в WEB-INF/lib.  
Хотя его местоположение наверное не принципиально,  но у меня в работающем примере так...
Главное,  он должен быть подключен к проекту.

В url должно быть указано название базы данных,  у меня это test.

А в web.xml и в коде как у меня выше...

А насчет назначения пула коннектов,   насколько мне известно это нужно для обеспечения эффективной работы с БД многих пользователей
одновременно.   




Цитата(Platon @  2.1.2008,  15:54 Найти цитируемый пост)
на самом деле наверно я просто не сталкивался с такой проблемой, но истинно, к примеру БД с hibernate что в standalone что в Web приложении у меня работа ведется одинаково, никаких джндаев
Ну,   не хибернетом единым...
К тому же я видел примеры,  где датасорс хранящийся в JNDI,   используют в Hibernate. 

Автор: Kangaroo 2.1.2008, 18:13
Цитата(Platon @  2.1.2008,  14:54 Найти цитируемый пост)
на самом деле наверно я просто не сталкивался с такой проблемой, но истинно, к примеру БД с hibernate что в standalone что в Web приложении у меня работа ведется одинаково, никаких джндаев. 

Если в приложении надо использовать пул соединений (но при этом не нужен Hibernate), то можно использвать пул сервера (например, Томкета). У Hibernate свой пул соединений, поэтому при его использовании не нужен другой пул.

Автор: sith 4.1.2008, 01:49
прикрутить жестко к сервелету базу данных у меня получилось а вот с помощью JNDI нет...
... он ругаеться на то что не может создать обьект драйвера... 

Код
 con = pool.getConnection();

 на этой строчке выбрасываетьтся исключение... есть какойто более работающий пример...?

Автор: Kangaroo 4.1.2008, 02:37
Цитата(sith @  4.1.2008,  00:49 Найти цитируемый пост)
на этой строчке выбрасываетьтся исключение... 

А какое исключение?

Автор: XEugene 4.1.2008, 10:54
И заодно - какя версия томката?

http://forum.vingrad.ru/index.php?showtopic=184682&view=findpost&p=1333323 это делается одинаково.




Цитата(sith @  4.1.2008,  01:49 Найти цитируемый пост)
есть какойто более работающий пример...?
Может я что-то не так делаю,  но у меня этот работает  smile 

Автор: sith 4.1.2008, 21:56
... большое спасибо... действительно у меня был 6 томкат... и плюс я контекст прописывал не в конфигах томката... а у себя в проекте... получаеться действительно мое преложение не может быть просто перенесенно на другой контейнер... пускай даже с томкатом шестым но другой сервер... придеться лесть в настройки самого сервера...? плюс добавлять в lib  томката драйвера нужно свои?

Автор: XEugene 5.1.2008, 00:17
О том,  где должен быть описан контекст написано http://tomcat.apache.org/tomcat-6.0-doc/config/context.html.

Драйвер можно конечно положить в common/lib Томката,  но у меня например лежит в WEB-INF/lib и все нормально работает. 

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