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


Автор: SuperFly 30.11.2007, 16:25
Привет всем!

Что-то проблемы возникли с настройкой DataSource в Tomcat6 + J6, делал все http://forum.vingrad.ru/index.php?showtopic=140246&view=findpost&p=1059414

Вот что я понаписал:

context.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<Context>

    <Resource name="jdbc/mysql" auth="Container"
              type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/dbb?characterEncoding=utf8" username="root"
              password="" maxActive="20" maxIdle="10" maxWait="-1"/>
</Context>


web.xml
Код

<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!--  ....  -->
    <resource-ref>
        <res-ref-name>jdbc/mysql</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
</web-app>


Код

public class JDBCUtil {
    private static final DataSource ds;
    static {
        DataSource dss = null;
        try {
            InitialContext cxt = new InitialContext();
            dss = (DataSource) cxt.lookup("java:/comp/env/jdbc/mysql");
        } catch (NamingException e) {
            e.printStackTrace();
        }
        ds = dss;
    }
    public static Statement getStatement() {
        try {
            return ds.getConnection().createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Connection getConnection() {
        try {
            return ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
        return null;
    }
}


Цитата

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

Вот что пишет.

Может где-то необходимо доп инициализация?
Я вот к примеру вижу, что у DataSource.getConnection() есть метод с 2 аргумента имя пользователя и пароль. К чему это? Я думаю, что соединение уже должно быть установлено?

Автор: tux 30.11.2007, 17:14
Пример для пятого Томката, у тебя шестой. В шестом возможности определить источник данных в context.xml нет, нужно конфигурацию Томката редактировать. Почему так сделали, понятия не имею. Примеры здесь - http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html.

Автор: SuperFly 30.11.2007, 17:59
Ну, и дела...

Автор: SuperFly 30.11.2007, 18:20
Значит будем пробовать без Context обходиться.

Добавлено через 7 минут и 32 секунды
Может быть какую-то библиотеку посоветуете?

Автор: tux 30.11.2007, 18:56
Цитата(SuperFly @  30.11.2007,  18:20 Найти цитируемый пост)
Может быть какую-то библиотеку посоветуете? 

Библиотеку для чего?

Автор: SuperFly 30.11.2007, 19:36
Ну, реализующую пул соединений.

Автор: tux 30.11.2007, 21:50
Да пожалста, выбирай - http://java-source.net/open-source/connection-pools. Только не проще ли Томкат настроить?

Автор: SuperFly 30.11.2007, 22:36
Че за идиотизм?
Я не могу понять!!! Попробовал установить контекст в своем WEB-INF, ни черта не работает. К context.xml положил настройки, заработало :( я крайне зол. 

PS: но доволен ^_^

Добавлено через 48 секунд
А как я буду переносить в другой контейнер? Там ведь так под мою индивидуальную БД не будут настраивать.

Добавлено через 4 минуты и 28 секунд
Хм, хотя, если у меня в web.xml какое-то упоминание о res-ref-name может они как то выделяют что-то... в общем я так понимаю это дело у хостеров отлажено?

Автор: tux 1.12.2007, 11:05
Цитата(SuperFly @  30.11.2007,  22:36 Найти цитируемый пост)
Хм, хотя, если у меня в web.xml какое-то упоминание о res-ref-name может они как то выделяют что-то... в общем я так понимаю это дело у хостеров отлажено? 

Ничего они не выделяют. На другой контейнер будешь переходить, придется настраивать источник данных по-другому. Это в стандарте не описано, поэтому делают все по-разному. Смотри мануал к конкретному контейнеру. Кроме того, если ты собираешься бегать между контейнерами, у тебя будет более сложная проблема из соседней темы - в другом контейнере скорее всего не будет сервлета default и придется переделывать еще и web.xml. Пока не поздно, не упирайся и переходи на урлы типа '/login.run'. В общем с расширением. Меньше проблем будет. И забудь про русские буквы в URL, некоторые контейнеры тебя совсем не поймут.

Автор: SuperFly 1.12.2007, 11:12
Млин, теперь я понимаю, что монополия тоже имеет свои плюсы >(
Мире PHP всё просто и отлажено. Apache + PHP + MySQL, каждый первый поможет, потому что абсолютно такой же путь проходил, более того, есть единство хостеров, все как 1, доп конфигурации не требуют.

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