портирование tigase с derby на hsqldb ... как вызвать хранимую процедуру Java и выбросить (игнорировать) результат? - PullRequest
2 голосов
/ 13 июля 2010

Попытка настроить tigase на использование hsqldb (hsqldb-1.8.0.9-1jpp.2) вместо derby (не спрашивайте почему, это не главное), и все работает отлично, за исключением настройки некоторые свойства в конце. В Дерби у меня было

CREATE procedure TigAddUserPlainPw(userId varchar(2049), userPw varchar(255)) 
    PARAMETER STYLE JAVA
    LANGUAGE JAVA
    MODIFIES SQL DATA
    DYNAMIC RESULT SETS 1
    EXTERNAL NAME 'tigase.db.derby.StoredProcedures.tigAddUserPlainPw';

и

call TigAddUserPlainPw('db-properties', NULL);

Когда я пытаюсь повторить это с помощью hsqldb,

CREATE ALIAS TigAddUserPlainPw
    FOR "tigase.db.derby.StoredProcedures.tigAddUserPlainPw";

и

CALL TigAddUserPlainPw('db-properties', NULL);

Я получаю это сообщение об ошибке

[root@tikanga scripts]# ./hsqldb-db-create.sh /var/lib/tigase/db/tigase
SQL Error at '/etc/tigase/database/hsqldb-schema-4-props.sql' line 1:
"CALL TigAddUserPlainPw('db-properties', NULL)"
Wrong data type: [Ljava.sql.ResultSet; in statement [CALL TigAddUserPlainPw(]

Есть идеи, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 15 июля 2010

Вы не можете использовать статические методы Java как они есть. Параметры Result [] неприемлемы для HSQLDB 1.8.x.

Было бы проще перейти на HSQLDB 2.0, поскольку его поддержка хранимых процедур улучшена по сравнению с версией 1.8.

Ваш пример показывает, что нам нужно внести некоторые улучшения в HSQLDB для поддержки этих объявлений процедур.

0 голосов
/ 15 июля 2010

Насколько я знаю, HSQLDB поддерживает функции Java, которые возвращают ResultSet (Фред исправит меня, если я ошибаюсь): http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#N12835

Вам потребуется новый метод:

public static ResultSet tigAddUserPlainPw(
    String userId, String userPw) throws SQLException;
...