Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Настройка DataSource в томкате, в чём я не прав? 
V
    Опции темы
check
Дата 20.7.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Пытаюсь настроить DataSource на Tomcat-5.5.20

Пишу в server.xml следующее
Код

<!-- Global JNDI resources -->
<GlobalNamingResources>

    <!-- Test entry for demonstration purposes -->
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>

    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users -->
   <!-- <Resource name="UserDatabase" auth="Container"
              type="javax.sql.DataSource"
       description="User database that can be updated and saved"
           factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" /> -->

    <Resource name="jdbc/mysql-connector-java-3.1.14-bin" scope="Shareable" auth="Container"
              type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved" />
    <ResourceParams name="jdbc/mysql-connector-java-3.1.14-bin">
    <parameter>
        <name>driverClassName</name>
        <value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
        <name>url</name>
        <value>jdbc:mysql://localhost/news</value>
    </parameter>
    <parameter>
        <name>username</name>
        <value>root</value>
    </parameter>
    <parameter>
        <name>password</name>
        <value></value>
    </parameter>
    <ResourceParams/>
    <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> 
</GlobalNamingResources>


После добавления этих тегов томкат вообще отказывается стартовать. При запуске startup.bat
консольное окошко появляется на секунду и тут же исчезает.
Если запускать батник из командной строки то выдается следующее
Код

Using CATALINA_BASE:   D:\apache-tomcat-5.5.20
Using CATALINA_HOME:   D:\apache-tomcat-5.5.20
Using CATALINA_TMPDIR: D:\apache-tomcat-5.5.20\temp
Using JRE_HOME:        D:\Program Files\Java\jdk1.5.0_07

Впрочем это в любом случае выдается.

Драйвер mysql-connector-java-3.1.14-bin прописан у меня в CLASSPATH(это нужно?).

jdbc:mysql://localhost/news - JDBC урл, по которому я всегда коннекчусь к MySQL.
com.mysql.jdbc.Driver опять таки реальное имя класса.


PM MAIL   Вверх
check
Дата 22.7.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Томкат запустился(была ошибка в xml),   но DataSource не заработал.

Проверяю таким сервлетом
Код

package news.web;

import java.sql.*;
import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.InitialContext;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;

public class DBServlet extends HttpServlet {
    DataSource pool;
    public void init() throws ServletException {
        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 ne) {
               throw new ServletException(ne.getMessage());
        }
    }
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
    throws ServletException, IOException    {
        String sql = "select * from `news`";
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        try {
            conn = pool.getConnection();
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                out.println(rs.getString("title") + "<br/>");
            }

        }
        catch(SQLException ex) {

        } finally {
            try {
                if (stmt != null)  {
                    stmt.close();
                }
                if (conn != null)  {
                    conn.close();
                }
            }
            catch (SQLException ex)  {

            }
        }
        
    }
}

никаких ошибок нет, пустая страница.


Аналогичный сервлет не использующий DataSource c такими же параметрами
работает
Код

package news.web;

import java.sql.*;
import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.InitialContext;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;

public class DBServlet2 extends HttpServlet {

      public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
                      throws IOException, ServletException
    {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
       
        Connection con = null;
        Statement  st = null;
        ResultSet  res = null;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost/news";
                try {
                con = DriverManager.getConnection(url,"root", "");
                st = con.createStatement();
                String query = "SELECT * from `news`";
                    res = st.executeQuery(query);
                while (res.next()) 
                    out.println(res.getString("title") + "<br>");
                }
                catch (SQLException ex) {
                    ex.printStackTrace();
                }
        }
        catch( ClassNotFoundException e ) {
          e.printStackTrace();
        }                  
    }
}



Это сообщение отредактировал(а) check - 22.7.2007, 19:36
PM MAIL   Вверх
check
Дата 22.7.2007, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Начали ловиться эксепшены
Код

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused: connect

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection refused: connect
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:2569)
        at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
        at java.sql.DriverManager.getConnection(DriverManager.java:525)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at news.web.DBServlet2.doGet(DBServlet2.java:33)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)


** END NESTED EXCEPTION **



Last packet sent to the server was 0 ms ago.
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:2643)
        at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
        at java.sql.DriverManager.getConnection(DriverManager.java:525)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at news.web.DBServlet2.doGet(DBServlet2.java:33)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)


Это выдаётся при запуске из NetBeans.  Понятно,  что матерится на драйвер,  но не понятно почему.
PM MAIL   Вверх
check
Дата 23.7.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Сейчас стабильно выдает ону ошибку: 
Код

avax.servlet.ServletException: Name jdbc is not bound in this Context
news.web.DBServlet.init(DBServlet.java:23)

Добавил в server.xml тег Context(в примере по которому я делал первоначально его почему-то не было).
Код

  <!-- Global JNDI resources -->
  <GlobalNamingResources>

    <!-- Test entry for demonstration purposes -->
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>

   <Context path="/DBServlet" debug="5" reloadable="true" crossContext="true">
   <Resource name="jdbc/mysql-connector-java-3.1.14-bin" scope="Shareable" auth="Container"
       type="org.apache.catalina.UserDatabase"   factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
       description="User database that can be updated and saved" />
    <ResourceParams name="jdbc/mysql-connector-java-3.1.14-bin">
    <parameter>
        <name>driverClassName</name>
        <value>com.mysql.jdbc.Driver</value>
    </parameter>
    <parameter>
        <name>url</name>
        <value>jdbc:mysql://localhost/news</value>
    </parameter>
    <parameter>
        <name>username</name>
        <value>root</value>
    </parameter>
    <parameter>
        <name>password</name>
        <value></value>
    </parameter>
    </ResourceParams>
    </Context>
  </GlobalNamingResources>

Имя jdbc по-прежнему "вне контекста",  чего не хватает,  для того, чтобы оно было в контексте?
PM MAIL   Вверх
ecologist
Дата 24.7.2007, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 5
Всего: 9



Цитата(check @  20.7.2007,  19:43 Найти цитируемый пост)
Драйвер mysql-connector-java-3.1.14-bin

Я его помещал в {CATALINA_HOME}\common\lib.

И никакой CLASSPATH не прописывал.

Это сообщение отредактировал(а) ecologist - 24.7.2007, 08:45
PM MAIL   Вверх
check
Дата 24.7.2007, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Он и у меня в {CATALINA_HOME}\common\lib.  В данном случае это Томкат встроенный в NetBeans.  

PM MAIL   Вверх
ecologist
Дата 24.7.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 5
Всего: 9



Проверять коннект до MySQL - думаю. ты это делал.

Я также не вставлял все внутрь web.xml - все описания делал в файле context.xml который положил в META-INF

Код

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/rms">
   <Resource
      name="jdbc/RealMediaDS"
      type="javax.sql.DataSource"
      username=""
      password=""
      driverClassName="com.mysql.jdbc.Driver"
      maxIdle="2"
      maxWait="5000"
      validationQuery="SELECT 1"
      url="jdbc:mysql://127.0.0.1:3306/database?characterEncoding=UTF-8"
      maxActive="4"/>
</Context>


web.xml содержал только такую строку

Код

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

PM MAIL   Вверх
check
Дата 24.7.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Цитата(ecologist @  24.7.2007,  09:20 Найти цитируемый пост)
context.xml который положил в META-INF

Вот!    ecologist, дай я пожму твою мужественную руку! 

Теперь всё работает,  но способ который я использовал, я не сам придумал.  
Может быть для моей версии Томката(5.5.17) это уже неактуально.


Цитата(ecologist @  24.7.2007,  09:20 Найти цитируемый пост)
Я также не вставлял все внутрь web.xml

У меня это не в web.xml было, а в server.xml,   как описано в доке,  ссылку на которую я привёл.

В web.xml я добавил только тег <resource-ref>(об этом я ничего не писал - виноват).  

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1192 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.