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


Автор: eXcile 4.5.2007, 13:17
Всем доброго кодинга

Есть следующая задача: Нужно через jboss работать с Oracle через jdbc. В jboss хорошо разобрал tomcat, но дальше черная дыра, подскажите что можно почитать или какие-нибудь примеры. 
И еще пишу все в eclipse отладка jboss только через консоль и логи, есть какое-нибудь альтернативное средство?

Автор: AntonSaburov 4.5.2007, 15:13
В двух словах сложно, но попробую smile

1. Определить JNDI ресурс в web.xml. Наподобие такого - обратить внимание на последние таги -  <resource-ref>

Код

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

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <servlet>
        <servlet-name>Controller</servlet-name>
        <servlet-class>com.jbossatwork.ControllerServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Controller</servlet-name>
        <url-pattern>/controller/*</url-pattern>
    </servlet-mapping>

    <resource-ref>
        <res-ref-name>jdbc/JBossAtWorkDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

</web-app>


2. Определить файл $JBOSS_HOME/server/default/deploy/oracle-ds.xml

Код

<datasources>
−
    <local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@youroraclehost:1521:yoursid</connection-url>
−
    <!--


        Here are a couple of the possible OCI configurations.
        For more information, see http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/java.920/a96654/toc.htm

    <connection-url>jdbc:oracle:oci:@youroracle-tns-name</connection-url>
        or
    <connection-url>jdbc:oracle:oci:@(description=(address=(host=youroraclehost)(protocol=tcp)(port=1521))(connect_data=(SERVICE_NAME=yourservicename)))</connection-url>

        Clearly, its better to have TNS set up properly.
     
-->
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>x</user-name>
<password>y</password>
−
    <exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-class-name>
</local-tx-datasource>
</datasources>


3. Вот пример для получения ресурса JNDI
Код

package com.jbossatwork.util;

import javax.naming.*;
import javax.sql.*;

public class ServiceLocator {
    private ServiceLocator(  ) {  }

    public static DataSource getDataSource(String dataSourceJndiName)
                  throws ServiceLocatorException {

        DataSource dataSource = null;
        try {
            Context ctx = new InitialContext(  );
            dataSource = (DataSource) ctx.lookup(dataSourceJndiName);

        } catch (ClassCastException cce) {
            throw new ServiceLocatorException(cce);
        } catch (NamingException ne) {
            throw new ServiceLocatorException(ne);
        }
        return dataSource;
    }
}


Но это в самых общих чертах - по сути просто направление куда копать дальше.

Автор: eXcile 7.5.2007, 07:25
Вроде логика понятна, а как отлаживать? Т.е. я пишу приложение, разворачиваю на jboss и потом в логах смотреть exception?
А в jdbc предусмотрен reconnect при обрыве связи или надо это отлавливать?

Автор: tux 7.5.2007, 07:58
Цитата(eXcile @  7.5.2007,  07:25 Найти цитируемый пост)
Вроде логика понятна, а как отлаживать? Т.е. я пишу приложение, разворачиваю на jboss и потом в логах смотреть exception?

Можно отлаживать используя механизм удаленной отладки JPDA: http://java.sys-con.com/read/44918.htm?CFID=1052985&CFTOKEN=74FF2844-7441-52E4-1D5415F39021CFFC.

Цитата(eXcile @  7.5.2007,  07:25 Найти цитируемый пост)
А в jdbc предусмотрен reconnect при обрыве связи или надо это отлавливать? 

Не предусмотрен, но его может предусматривать пул соединений, используемый JBoss.

Автор: eXcile 7.5.2007, 11:42
Начал было кодить, а оказалось дров jdbc то нету. Подскажите плиз где скачать? Какую версию лучше? Испольуется Oracle 8x Jboss 4.0

Автор: eXcile 7.5.2007, 13:34

Вылетает такой exception

org.jboss.deployment.DeploymentException: Error during deploy; - nested throwable: (javax.naming.NamingException: resource-ref: jdbc/OracleDS has no valid JNDI binding. Check the jboss-web/resource-ref.)

web.xml
Код

   <resource-ref>
        <res-ref-name>jdbc/OracleDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

Автор: tux 7.5.2007, 13:58
Цитата(eXcile @  7.5.2007,  13:34 Найти цитируемый пост)
Check the jboss-web/resource-ref

JBoss говорит о jboss-web.xml, а не о web.xml. В jboss-web должна быть описана связь между физическим именем источника данных в JNDI и его логическим именем в web.xml.

Автор: eXcile 10.5.2007, 10:15
Сделал jboss-web.xml, теперь все работает. Всем спасибо за обсуждение!  smile 

Автор: superVad 10.5.2007, 15:56
Обьясните пож. зачем писать такое в web.xml:

Код

 <resource-ref>
        <res-ref-name>jdbc/JBossAtWorkDS</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>


Просто у меня без него работает?

Автор: tux 10.5.2007, 16:20
http://forum.vingrad.ru/forum/topic-126230.html
http://forum.vingrad.ru/index.php?showtopic=83074&view=findpost&p=642577

Автор: Foo 10.5.2007, 20:06
Я в эклипсе для отладки на сервере испоьзую MyEclipse который устанавливается на Eclipse, очень на мой взгляд удобно, я правда для отладки OC4J использую, но MyEclipse поддерживает отладку практически всех современных серверов.

Автор: eXcile 11.5.2007, 05:24
Цитата(Foo @  10.5.2007,  20:06 Найти цитируемый пост)
Я в эклипсе для отладки на сервере испоьзую MyEclipse который устанавливается на Eclipse


Foo можно поподробней, MyEclipse это плагин к Eclipse? И что за OC4J? 

Автор: superVad 11.5.2007, 15:07
MyEclipse вроде платный

поправте если я не прав

Автор: Foo 27.5.2007, 18:15
OC4J - oracle server for java
MyEclipse - да, он платный. И это не плагин, он устанавливается поверх эклипса и у эклипса появляется пачка приятных фичей. Стоит вроде не очень дорого 30$ обычная версия и 50 професионал едишн.

[офтоп]Но в нем очень много всего полезного (редакторы и тулзы для JSP, JSF, EJB, JS, для большинства современных фреймворков; это не говоря о мелких редакторах типа xml; ну и поддержка отладки для практически всехсовременных апликеэйшн серверов). Более подробно тут    
http://www.myeclipseide.com/module-htmlpages-display-pid-1.html [/офтоп]

Но если MyEclipse изза платности не катит то в эклипсе есть удаленный дебаг и так. Незнаю как для другихсерверов, для OC4J просто при его запуске указываеш специальные опции для удаленного дебага, потом в эклипсе настраиваеш удаленный дебаг, там минимум настроек порт для дебага и хост.

Автор: poltora 9.8.2007, 17:11
Цитата(tux @ 7.5.2007,  13:58)
Цитата(eXcile @  7.5.2007,  13:34 Найти цитируемый пост)
Check the jboss-web/resource-ref

JBoss говорит о jboss-web.xml, а не о web.xml. В jboss-web должна быть описана связь между физическим именем источника данных в JNDI и его логическим именем в web.xml.

каким образом она должна описываться - каков формат?
а если речь идет не о веб-модуле а о корпоративных бинах - то в каком фйле?
jboss.xml, jbosscmp-jdbc.xml ?

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