Загрузка процедур VoltDB через классы Java с InProcessVoltDBServer

Я пытаюсь загрузить Java-процедуры VoltDB из методов и классов через jar с помощью следующего оператора:

InProcessVoltDBServer volt = new InProcessVoltDBServer();
volt.runDDLFromString("load classes StoredProcs.jar;");

После запуска файла jar с java -jar я получаю следующее сообщение об ошибке:

SQL error while compiling query: SQL Syntax error in "LOAD CLASSES StoredProcs.jar" unexpected token: LOAD
...

Мне ясно, на что указывает сообщение, но я не уверен, почему оно не распознает эту команду?

Возможно, этот конкретный синтаксис связан только с sqlcmd? Если это так, есть ли другой способ выполнить загрузку классов через java-код?

Я использую InProcessVoltDBServer и пытается загрузить все DDLs и DMLs из файла сценария sql, чтобы настроить среду для интеграционных тестов.

Кроме того, я следовал этому руководству, чтобы настроить проект в СТС.

Может ли кто-нибудь пролить свет на то, что я здесь делаю неправильно? Может, так нельзя загрузить DML (тестовые данные)?


person Marko Jovanov    schedule 21.02.2019    source источник


Ответы (1)


Команда «ЗАГРУЗИТЬ КЛАССЫ» поддерживается только в sqlcmd. Он не используется и не поддерживается облегченным сервером InProcessVoltDBServer.

В руководстве создается и тестируется процедура Java, но нет явного шага для загрузки класса. Когда команда DDL "СОЗДАТЬ ПРОЦЕДУРУ РАЗДЕЛ НА ТАБЛИЦЕ foo COLUMN id FROM CLASS procedure.UpdateFoo;" выполняется, класс процедуры .UpdateFoo уже доступен. Это может быть связано с тем, что процедура и тест находятся в одном проекте Eclipse. Если процедура разрабатывалась отдельно, вам нужно было бы загрузить jar-файл в путь к классам для проекта Eclipse, в котором вы разрабатываете тесты.

Раскрытие информации: я работаю в VoltDB.

person BenjaminBallard    schedule 21.02.2019
comment
Привет, Бенджамин, спасибо за быстрый ответ. Это помогло, спасибо! Кроме того, одна не столь очевидная часть - мне удалось загрузить как файл DDL, так и файл DML с volt.runDDLFromPath, их просто нужно было разделить на два файла .sql. - person Marko Jovanov; 21.02.2019
comment
Спасибо, никогда не пробовал, но хорошо знать. Намного проще использовать dml-скрипт, чем заключать каждый оператор в вызовы java-процедур. - person BenjaminBallard; 22.02.2019
comment
Поддерживается ли это в более старых версиях voltdb? Я получаю ›классы нагрузки test.jar; Неожиданная ошибка планирования Ad Hoc: java.lang.RuntimeException: ошибка компиляции запроса: org.voltdb.planner.PlanningErrorException: ошибка синтаксиса SQL в классах загрузки test.jar неожиданный токен: LOAD при использовании sqlcmd. - person Lieuwe; 09.08.2019
comment
load классы поддерживаются с v5.1, так что довольно давно. - person BenjaminBallard; 17.08.2019