Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Запуск java SP - не работает почему-то... / 17 сообщений из 17, страница 1 из 1
05.12.2006, 19:58
    #34178805
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Есть хранимая проца на java.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
/**
 * JDBC Stored Procedure activitier
 */
import java.sql.*;                   // JDBC classes

public class activitier extends COM.ibm.db2.app.StoredProc
{
    public activitier() {}

    public static void setMsgNo ( String msgBody ) throws SQLException, Exception
    {
        // Get connection to the database
        Connection con = DriverManager.getConnection("jdbc:default:connection");
        PreparedStatement stmt = null;
        String sql;

        sql = "UPDATE ACTIVITY SET MSGNO = LEFT(?, 8)";
        stmt = con.prepareStatement( sql );
        stmt.setString(  1 , msgBody );
        ResultSet rs = stmt.executeQuery();
        
    }
}

Возможно, она сама неверная, а может дело в чем-то другом. Короче, не вызывается.
Иду по предлагаемым db2 ошибкам:
1 The class was not found on the CLASSPATH.

2 The class did not implement the required interface
("COM.ibm.db2.app.StoredProc" or "COM.ibm.db2.app.UDF") or lacked
the Java "public" access flag.

3 The default constructor failed or was unavailable.

4 Could not load driver for "jdbc:default:connection".

5 Could not establish default context.

1. Класс activitier.jar в CLASSPATH указан, он находится в SQLLIB\FUNCTION
2. есть же
3. есть же
4. Где-то проскакивало, что это может быть связано с тем, что не указан какой-то путь, но сейчас не могу найти - что и где...
5. А это что такое?
4.
...
Рейтинг: 0 / 0
06.12.2006, 11:32
    #34179770
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Есть 2 способа написания java SP.
1.
Если при декларации вы указываете
PARAMETER STYLE DB2GENERAL, то:
1.1. Класс должен расширять COM.ibm.db2.app.StoredProc.
1.2. Метод должен быть public void.
1.3. Соединение получается с помощью метода getConnection() этого StoredProc.
2.
Если при декларации вы указываете
PARAMETER STYLE JAVA, то:
1.1. Класс должен быть public и может не расширять COM.ibm.db2.app.StoredProc.
1.2. Метод должен быть public static void.
1.3. Соединение получается с помощью DriverManager.getConnection("jdbc:default:connection").
...
Рейтинг: 0 / 0
06.12.2006, 12:07
    #34179943
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
У меня используется PARAMETER STYLE JAVA
- критериям, получается, соответствует. Убрал extends, раз оно необязательно... А в чем еще дело может быть? Может, в самом деле jdbc-драйвер не грузится?
...
Рейтинг: 0 / 0
06.12.2006, 12:50
    #34180158
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Вам надо зарегистрировать свой jar.
Подробнее об этом, начиная с
этого места.
...
Рейтинг: 0 / 0
06.12.2006, 14:23
    #34180560
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Спасибо!
Зарегистрировал.
CALL sqlj.install_jar( 'file:///C:/Program Files/IBM/SQLLIB/FUNCTION/wizards.jar', 'wizards' )

Затем пробую так:

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE SETMSGNO ( IN MESSAGE VARCHAR( 2000 ) )
  LANGUAGE java
  PARAMETER STYLE java 
  DYNAMIC RESULT SETS  0 
  FENCED THREADSAFE
  EXTERNAL NAME 'wizards:activitier.setMsgNo'

- не работает. Говорит, что was unable to map to a single Java method, хотя и метод у меня назван верно, и вообще он лишь один - ни с чем не спутаешь... И соответствие параметра есть: varchar(2000) <=> string[]

Я не могу понять, где ошибка...

Кстати, если не указывать 'wizards:' - процедура создается почему-то... Зато потом, при вызове
Код: plaintext
1.
CALL SETMSGNO('ABCD007 I want this to start working at last')
, та ошибка, что я указал в самом начале.
...
Рейтинг: 0 / 0
06.12.2006, 14:55
    #34180676
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Поместите пока свой class файл в sqllib/functions.
Зарегистрируйте функцию как
EXTERNAL NAME 'activitier.setMsgNo'.
Пробуйте вызвать.
Если не получится - полный пример java кода покажите.
...
Рейтинг: 0 / 0
06.12.2006, 15:59
    #34180980
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Как функцию? Я как процедуру регистрирую...

Попробовал - положил класс в FUNCTION, jar не делал.
В CLASSPATH прописал и путь к FUNCTION, и этот конкретный activitier.class....

Сейчас выдается сообщение, что class not found. Ничч-ч-чего не понимаю!

А полный код java - так в первом моем сообщении и есть полный код класса...
...
Рейтинг: 0 / 0
06.12.2006, 16:25
    #34181087
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Ага, стоп... Я менял в какой-то момент DYNAMIC RESULT SETS на единицу. Вернул ноль.

Ошибка выглядит так:

Procedure or user-defined function "CIC_USER.SETMSGNO", specific name "SQL061206141801100" aborted with an exception "[IBM][CLI Driver][DB2/NT] SQL0418".

Уже ближе к делу, но всё же...
...
Рейтинг: 0 / 0
06.12.2006, 16:25
    #34181088
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Щас посмотрел внимательнее ваши посты - у вас v9?

На своей v8 только что попробовал:
---
import java.sql.*; // JDBC classes

public class activitier
{
public static void setMsgNo ( String msgBody ) throws SQLException
{
// Get connection to the database
Connection con = DriverManager.getConnection("jdbc:default:connection");
PreparedStatement stmt = null;
ResultSet rs = null;
try {
String sql = "select cast(? as varchar(2000)) from sysibm.sysdummy1";
stmt = con.prepareStatement( sql );
stmt.setString( 1, msgBody );
rs = stmt.executeQuery();
} finally {
if (rs!=null) rs.close();
if (stmt!=null) stmt.close();
if (con!=null) con.close();
}
}
}
---
CREATE PROCEDURE SETMSGNO ( IN MESSAGE VARCHAR(2000) )
LANGUAGE java
PARAMETER STYLE java
EXTERNAL NAME 'activitier.setMsgNo';
---
Поместил class файл в sqllib\function, classpath не трогал и вам не советую.
call SETMSGNO('') - работает.

P.S.:
executeQuery - для select.
executeUpdate - для update, delete, insert.
...
Рейтинг: 0 / 0
06.12.2006, 16:29
    #34181110
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
NafigatorProcedure or user-defined function "CIC_USER.SETMSGNO", specific name "SQL061206141801100" aborted with an exception "[IBM][CLI Driver][DB2/NT] SQL0418".

Уже ближе к делу, но всё же...
Код: plaintext
1.
2.
3.
sql = "UPDATE ACTIVITY SET MSGNO = LEFT(cast(? as varchar(2000)), 8)";
stmt = con.prepareStatement( sql );
stmt.setString(  1 , msgBody );
stmt.executeUpdate();
...
Рейтинг: 0 / 0
06.12.2006, 16:34
    #34181131
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Да, оставил только строчку коннекшна - отработало. Проблема в запросе. Буду разбираться. Однако когда класс у меня заработает - хотелось бы, чтобы заработал и jar...
...
Рейтинг: 0 / 0
06.12.2006, 17:20
    #34181237
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
По свежим следам опять попробовал (с этой одной строчкой) воспользоваться jar - ничего не вышло:
unable to map... :(

В чем же ошибка, где он видит неоднозначность методов? :((
Почему класс работает, а jar - нет?
...
Рейтинг: 0 / 0
06.12.2006, 17:49
    #34181325
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Попробовал и в jar завернуть - у меня работает...
...
Рейтинг: 0 / 0
06.12.2006, 18:07
    #34181375
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Для чистоты эксперимента я даже взял Ваш вариант процедуры....

Не понимаю!

Возможно, всё-таки в моей системе не прописаные какие-то пути или переменные, необходимые для правильной работы? :(
...
Рейтинг: 0 / 0
06.12.2006, 20:04
    #34181592
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Заметил, что при выполнении процедуры, которая регистрирует jar, он копируется в каталог
\FUNCTION\jar\[имя пользователя, под которым запущена база]\

Установил Developer Workbench, он мне выдал чуть отличающийся вариант создания процедуры
(на имена не обращайте внимания - я имена функций менял в процессе, имена классов)
- имя package после jar добавилось, оно же фигурирует в исходнике после package:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE SETMSGNO ( IN msgBody CHAR( 32 ) )
SPECIFIC SETMSGNO
NOT DETERMINISTIC
LANGUAGE Java
EXTERNAL NAME 'WIZARDS:PKG61106044150920.SETMSGNO.setMsgNo'
FENCED
THREADSAFE
PARAMETER STYLE JAVA

Но картины это не изменило - всё тот же опротивевший "unable to map"!
...
Рейтинг: 0 / 0
07.12.2006, 09:52
    #34182190
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
NafigatorЗаметил, что при выполнении процедуры, которая регистрирует jar, он копируется в каталог
\FUNCTION\jar\[имя пользователя, под которым запущена база]\Он копируется в каталог \FUNCTION\jar\[имя пользователя, создавшего процедуру]
А вообще, вот вам совет: не используйте пока в серьезных целях v9. Если поиграться или вы жить не можете без нового xml-ядра, то можно, конечно.
Я практически уверен, что ее на протяжении еще как минимум 3-4-х фикспаков будет штормить...
...
Рейтинг: 0 / 0
07.12.2006, 12:59
    #34182964
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск java SP - не работает почему-то...
Забавно, но сегодня, после очередной попытки, у меня всё получилось. Так и не понял, в чем была проблема...

Совпало так, что в одном из источников увидел, что перед jar id можно указать схему: сработало. Убрал схему - всё равно сработало... Черт-и-что... :-\
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Запуск java SP - не работает почему-то... / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]