Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30

Вызов Oracle stored procedure через DBCP ?

31.01.2011, 19:17. Показов 2735. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может кто сталкивался с подобным...

Есть Tomcat + DPCP + JNDI и Oracle + stored procedure ...

Когда из приложения на Tomcat вызов хранимой процедуры осуществляется через 'прямое' соединение с Oracle - всё нормально... и результаты в ResultSet возвращаются ...

А вот когда 'прямое' соединение заменяется соединением, полученным от pool connection (DBCP) возникает ошибка.
При этом все простейшие запросы (типа select ...) через DBCP к базе работают нормально...

Для соединения с базой во всех случаях используется JDBC thin driver.

Что бы это могло быть ?

KSV
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.01.2011, 19:17
Ответы с готовыми решениями:

DB2 Java Stored Procedure
Я вот делаю эту процедуры на яве. И прикол в том что судя по всем примерам там в каком то классе который наследуется от StoredProc...

Stored Procedure
Народ, подскажите, почему не возвращаются данные из хранимой процедуры(возвращаться ведь должна переменная @out): create procedure proc1...

Stored Procedure
Решил поучить ADO.NET по Троелсену, в SQL Server Management Studio создал БД "AutoLot" и добавил таблицу "Invertory" с 4...

19
mishgun
31.01.2011, 19:30
nado posmotret settingi poola kak minimum.Typo v url v userName,password ne tot port da vsyo chto ugodno mozhet byt
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30
31.01.2011, 23:54  [ТС]
Ответ крут и главное абсолютно верный и бесполезный... т.к. является континуумом...
Но такой ответ и мне известен был до написания вопроса здесь.

KSV
0
paradise
01.02.2011, 10:33
Как спросили, так и ответили. 'Возникает ошибка' - это, мягко говоря, абстрактная формулировка. Хотите конкретный ответ - задавайте конкретный вопрос.

Кроме того, если верить вам: 'Но такой ответ и мне известен был до написания вопроса здесь.' Т.е. вам было понятно, что проблема в пуле , так почему не написать более подробно и о его настройках?
mishgun
01.02.2011, 16:54
Voobsche-to po normalnomu vikladivaut kak minimum error...
My Vam ne extrasensy chtob ugadyvat na rasstoyanii chego vi tam naportachili u sebya v proge.
Mozhem voobsche ne otvechat esli takie otvety ne nravyatsa.
V dogonku
Posmotrite esli u vas vse parametry neobhodimie dlya peredachi v store proc are bounded.
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30
01.02.2011, 17:59  [ТС]
Если не делал такое как описано выше, то вряд ли чем поможешь...
Первое сообщение исчерпывающе описывает ситуацию для тех кто это делал...

KSV
0
mishgun
01.02.2011, 18:15
Delayu delayu i ne tolko s Oraclom a nedavno s MS SQL Server.Tak chto esli ty schitaesh chto my dolzhny gadat cgto u tebya v code navorocheno ili v poole to uvol sidi i sam razbiraysaya.tak pomoshi ne prosyat.tebe chto tut obyazany brosit vsyo i lomat golovu a pochemu u etogo deyatelya ne rabotaet store proc cherez pool?
PS.esli ty dumaesh chto eto kruto delat eto vsyo na Tomcat to pozvol sprosit a chem zhe ya togda na WebLogic zanimaus?
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30
01.02.2011, 18:47  [ТС]
Уважаемый, Tomcat выбран не от хорошей жизни.

Я не просто так написал про, то что используется Jakarta DBCP ( http://jakarta.apache.org/commons/dbcp ) и thin JDBC Oracle driver.

Ты под WebLogic используешь такую связку ? Или всё же OCI и ДРУГОЙ pool connection ?

KSV

P.S.: А что такое круто?
0
mishgun
01.02.2011, 19:44
Pri developinge na Oknah + Weblogic - thin pri developinge na Unix oci i na Production serverah - oci
mishgun
01.02.2011, 19:48
A stack trace tak i ne hotim pokazivat? mozhet srazu vse voprosy by otpali
mishgun
01.02.2011, 21:12
Sorry pro pool connection propustil.estestvenno Pool Connection drugoy.Weblogic Pool Connection.No eto suti ne menyaet.Esli prostoy select prohodit nado smotret settingi poola i chto peredaetsa v store proc.Bylo kak to u menya chto v store proc dobavili escho odin parameter a mne soobshili tolko na sleduyushiy den.A ya sidel i vtikal pochemu all over sudden Ya stal poluchat ArrayOutofBoundException.Utrom poshel na razborki v Oracle gruppu a oni gryat chto dobavili escho odin parameter a mne mylo poslali utrom.Shit happens...
tak chto error v studiyu - dalshe budem posmotret))
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30
02.02.2011, 11:12  [ТС]
Мы решили ПОКА отказаться от вызова хранимых процедур в пользу pool.
Все классы, которые мы хотели запихать в Oracle в качестве хранимых процедур ПОКА будут вызываться с Tomcat и работать через pooll connection.
Почему? Потому, что вчера обнаружили в bug list Jakarta Commons Developers описание проблемы очень похожее на нашу (http://issues.apache.org/bugzilla/show_bug.cgi?id=32375).

Как только будет новая версия DBCP попробуем снова...

KSV
0
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30
06.02.2011, 11:44  [ТС]
В процессе вызова хранимой процедуры через DBCP возникает ошибка приведения типа: java.lang.ClassCastException

Листинг. server8080.xml.
<?xml version='1.0' encoding='UTF-8'?>
<Server debug='0' port='8081' shutdown='SHUTDOWN'>
<GlobalNamingResources>
<Resource name='jdbc/IcIDB' auth='Container' type='javax.sql.DataSource'/>
<ResourceParams name='jdbc/IcIDB'>
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicData SourceFactory</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>username</name>
<value>IcIDB</value>
</parameter>
<parameter>
<name>password</name>
<value>IcIDB</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@10.1.33.99:1521 :ORATEST0</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.OracleDriver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
<Service name='Tomcat-Standalone'>
<Connector acceptCount='10' className='org.apache.catalina.connector .http.HttpConnector' connectionTimeout='60000' debug='9' maxProcessors='75' minProcessors='5' port='8080'/>
<Engine debug='9' defaultHost='localhost' name='Standalone'>
<Host appBase='D:PTUVDGlobDBProjectsLoginIcIDB Tomcatwebapps' debug='9' name='localhost' unpackWARs='false'>
<Context debug='9' docBase='D:PTUVDGlobDBProjectsLoginIcIDB LoginIcIDB' path='/LoginIcIDB' reloadable='false' workDir='D:PTUVDGlobDBProjectsLoginIcIDB TomcatworkLoginIcIDB'>
<ResourceLink name='IcIDBLnk' global='jdbc/IcIDB' type='javax.sql.DataSource'/>
</Context>
</Host>
</Engine>
</Service>
</Server>

Листинг. web.xml.
<?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>
<display-name>LoginIcIDB</display-name>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionSer vlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>Appli ный ресурс в контексте приложения)
* @param attemptCnt int - кол-во попыток установить соединение
* @param timeDelay long - время между попытками установить соединение
* @return Connection - возвращаемое соединение
*/
public Connection getConnection(String dataSourceName, int attemptCnt, long timeDelay) {
Connection con=null;
try {
// инициализация контекста и пойск контекста ресурсов: компонентов и окружения
Context init = new InitialContext();
Context ctx = (Context) init.lookup('java:comp/env');
// возврат параметров набора данных по результатам поиска реурса с именем dataSourceName
DataSource dataSource = (DataSource) ctx.lookup(dataSourceName);
int curAttemptNum=0;
// попытки открыть соединение
while (con==null && curAttemptNum<attemptCnt){
try {
con = (Connection) dataSource.getConnection();
}
catch (Exception e) {
//Обработка исключения по установке соединения задержка до следующей попытки
con=null;
curAttemptNum++;
System.out.println('Attempt to open the connection is failed.');
Thread.sleep(timeDelay);
}
}
}
catch (Exception ex) {
//обработка исключения по работе с JNDI
System.out.println('Cannot retrieve java:comp/env '+dataSourceName);
}
return con;
}
}
[/code]
Метод вызова хранимой процедуры.
Соединение передается в метод, а устанавливается с помощью класса OraConnection и его метода getConnection
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public ResultSet getAuthentification(Connection con,
                                             String userName,
                                             String userPassword) {
    OracleResultSet rset = null;
    try {
// !!!!!!!!!!!!!!!!!!!!!!!!!!    ошибка приведения типа возникает именно здесь  !!!!!!!!!!!!!!!!!!!!!!!!!!
      OracleCallableStatement cs = (OracleCallableStatement)
          con.prepareCall('{? = call jstpLoginicidb.getAuthentification(?,?)}');
      cs.registerOutParameter(1, OracleTypes.CURSOR);
      cs.setString(2, userName);
      cs.setString(3, userPassword);
      cs.execute();
      rset = (OracleResultSet) ( (OracleCallableStatement) cs).getCursor(1);
    }
    catch (Exception e) {
      System.out.println(
          'IC: Runtime error: calling getAuthentification(params...)' + e);
 
    }
 
    return rset;
  }
Ну вот кажется и все.

KSV
0
mishgun
06.02.2011, 23:43
А может стоить попробовать в целях чистоты експеримента заменить Оракловские объекты Объектами из jdk? Чтобы исключить ошибки на своей стороне.Если сработает посмотрите что за библиотеки вы подключили....
А если честно то мы вообще практически не используем OracleCallableStatement OracleResultset.Обходимся своими наследованными от jdk-ских объектов.OracleTypes.CURSOR да используем.остальное - нет
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30
07.02.2011, 09:03  [ТС]
Не понял. Так DBCP используете для вызова хранимых процедур на Oracle?
Если да, то может поделитесь кусочком кода касающегося этой темы?

KSV
0
mishgun
07.02.2011, 18:00
Ya zhe govoril chto my ispolzuem ne DBCP a Weblogic CP tak chto eto vryad li vam pomozhet.Moya ideya byla zamenit v vashem code Oraclovskiy OracleCallableStatement na java.sql.CallableStatement i OracleResultSet na java.sql.ResultSet. Esli zamena srabotaet to znachit problema v nesovmestimosti podkluchonnih classov iz biblioteki Oracle.
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
07.02.2011, 18:34
Не просветите ли. В чем польза от использования встроенной в Томкат поддержки соединения к базе, через JNDI. Наверное, это удобно, когда на Томкате бегают несколько приложений и все они имеют одинаковый унифицированный доступ? Есть ли еще преимущества по сравнению с прямым соединением из приложений?
0
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30
07.02.2011, 19:17  [ТС]
А еще в случае с точностью до наоборот при использовании naming , когда несколько ресурсов (mail, data base, переменные разных типов, LDAP...)http://www.j2eeolympus.com/J2EE/JNDI/JNDI.jsp - тут всё про JNDI...
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
07.02.2011, 21:57
А кайф от JNDI в том, что в хозяйстве много компьютеров с разными операционными системами? Или это уже не важно, а просто стандарт?
0
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 30
08.02.2011, 00:27  [ТС]
JNDI предоставляет доступ к ресурсам в виде объектов, реализующим много стандартов... http://java.sun.com/products/jndi/

KSV
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.02.2011, 00:27
Помогаю со студенческими работами здесь

SELECT in Stored Procedure
U menya takaya problema: est' tablica 10,000,000 zapisey s clasternim index-om, imeetsya khranimaya procedura v kotoruu peredautsya...

stored procedure in sqlserver2000
privet. sdelal procedure: CREATE PROCEDURE . @findword varchar(50) AS select title,url_name,description_source from search ...

Could not find stored procedure
Error Code = 80040e14 Code meaning = I Source = Microsoft OLE DB Provider for ODBC Drivers Description = Could not find stored...

Просмотр Stored Procedure
Как запросом просмотреть содержимое(source) Stored Procedure?

Could not find stored procedure 'c'
Доброго времени суток. Можете помочь и тыкнуть лицом в ошибку? При обращении к хранимой процедуре uspCreateInOut выдается ошибка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru