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


Автор: goodday1941 2.3.2009, 15:37
Тема данная уже http://forum.vingrad.ru/topic-67397.html, но ответа в ней так и не прозвучало

и так по порядку.. использую последнюю версию томката и спринга, в /lib томкату положил последнюю версию драйвера

в спринге для получения датасорса прописал следующее:

Код

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:/comp/env/jdbc/test"/>
    </bean>


в веб.хмл следующее:

Код

            <Host name="test"  appBase="webapps/test" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
                <Context path="" docBase="" debug="5" reloadable="true" crossContext="true">
                    <Resource name="jdbc/test" 
auth="Container" 
type="javax.sql.DataSource" 
username="postgres" 
password="pass" 
driverClassName="org.postgresql.Driver" 
url="jdbc:postgresql://localhost/test?charSet=utf-8" 
maxActive="100" 
maxIdle="50"/>
        <Connector port="80" maxHttpHeaderSize="8192" 
maxProcessors="150" maxThreads="150" 
minSpareThreads="25" maxSpareThreads="75" 
enableLookups="false" redirectPort="8443" 
acceptCount="150" connectionTimeout="20000" 
disableUploadTimeout="true" />
                </Context>        
            </Host>


все.. при подключении получаю стандартную ошибку что jndi не нашел ресурса... куда копать? )

Автор: Samotnik 2.3.2009, 16:08
http://tomcat.apache.org/tomcat-4.1-doc/jndi-datasource-examples-howto.html ?

Добавлено @ 16:10
вообще вот так можно получить
Код

 private Connection getConnection() throws NamingException{   
          
       Connection pool;   
       Context env;   
          
       env = (Context) new InitialContext().lookup("java:comp/env");   
       Datasource pool = (Datasource)env.lookup("jdbc/YourDB");   
       Connection conn = pool.getConnection(); 
       return conn;   
    } 

Автор: goodday1941 2.3.2009, 16:10
нет... это читал уже только для версии 6 ), все вроде как делаю как они предлагают.. но не помогает

Добавлено @ 16:14
Цитата(Samotnik @  2.3.2009,  16:08 Найти цитируемый пост)
вообще вот так можно получить


да эт я прекрасно понимаю.. тут проблема в другом...

то есть оно пытается получить, а получать нечего... ) то есть ресурс не был создан

Автор: goodday1941 2.3.2009, 19:45
и так проблема на первый взгляд решена... файл persistance.xml лежал в неправильном месте... вот так вот бывает )

положив файл по пути  WEB-INF/classes/META-INF/persistance.xml эта ошибка не валится больше (валятся другие, но это уже совсем другая история  smile )


поспешил ) под конец все равно валит ту же ошибку

Автор: tux 3.3.2009, 10:24
В web.xml линка есть? 
Код

<resource-ref id="ResourceRef_test">
    <res-ref-name>jdbc/test</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

Автор: goodday1941 3.3.2009, 11:19
я почему то думал что можно обойтись без него, ведь у меня есть
Код


 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:/comp/env/jdbc/test"/>
    </bean>

Автор: tux 3.3.2009, 11:33
Пространство имен "java:/comp/env/" может указывать только на ссылку в web.xml. http://forum.vingrad.ru/forum/topic-83074/anchor-entry642577/0.html

Автор: goodday1941 3.3.2009, 12:07
мда протупил я... всем спасибо за помощь  smile, закрываем тему

Автор: am_sasa 3.3.2009, 12:09
А почему в спринге не создавать соединение, зачем в томкат его тащить?

Автор: goodday1941 3.3.2009, 12:26
Цитата(am_sasa @  3.3.2009,  12:09 Найти цитируемый пост)
А почему в спринге не создавать соединение, зачем в томкат его тащить? 

томкат создает пул конекшенов который значительно эффективнее работает чем закрытие/открытие конекшена при доступе к БД

Автор: am_sasa 4.3.2009, 12:11
Цитата(goodday1941 @ 3.3.2009,  12:26)
томкат создает пул конекшенов который значительно эффективнее работает чем закрытие/открытие конекшена при доступе к БД

Открой для себя пул вне томката!
Код

<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName">
                <value>net.sourceforge.jtds.jdbc.Driver</value>
    </property>
            <property name="url">
                <value>jdbc:jtds:sqlserver://DBServer/SUDO</value>
            </property>
            <property name="username">
                <value>sa</value>
            </property>
            <property name="password">
                <value>sa</value>
            </property>
</bean>

Автор: goodday1941 4.3.2009, 16:23
Цитата(am_sasa @  4.3.2009,  12:11 Найти цитируемый пост)
Открой для себя пул вне томката!

ну эт понятно все... но мне вариант с томактом больше нравится... даже не знаю почему ) поизящнее он просто наверное

Добавлено через 3 минуты и 20 секунд
хотя .. хотелось бы узнать мнение экспертов что лучше...

Автор: tux 4.3.2009, 17:24
Навскидку три достоинства пула соединений, определенного внутри Томката:
  • не нужно тащить себе в приложение библиотеку пула соединений
  • источник данных можно расшарить с другими приложения, использовать общий пул соединений поэффективнее будет
  • источник данных можно поменять просто изменив линку в web.xml
Пример am_sasa мне не нравится уже потому, что развернуть приложение на другой веб-контейнер не получится - он жестко привязан к Томкату.

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