Определяемый пользователем класс доступен в CLASSPATH при запуске H2 Database Server из командной строки - PullRequest
0 голосов
/ 26 сентября 2018

Я запускаю H2 Server Tool из командной строки как:

java -cp h2*.jar org.h2.tools.Server

И я пытаюсь использовать пользовательский класс, такой как Function, показанный в Раздел «Пользовательские функции и хранимые процедуры».

Я сделал несколько попыток с моей пользовательской функцией:

  • , скомпилировав ее в Function.class файл
  • компиляция в файл acme/Function.class
  • упаковка в файл acme.jar
  • упаковка в файл h2acme.jar

И попыталсянесколько способов включить его в путь к классам, но безуспешно.
Например:

[user@host h2]$ java -cp ./h2*.jar:./acme.jar org.h2.tools.Server -tcp -web
Error: Could not find or load main class org.h2.tools.Server

Я прочитал этот связанный вопрос и следовал указаниям там.
Ноэто не похоже на работу.

1 Ответ

0 голосов
/ 26 сентября 2018

Единственный способ выполнить эту работу - обновить файл h2*.jar с помощью моего пользовательского класса:

[user@host h2]$ jar uf h2-1.4.197.jar acme/Function.class 
[user@host h2]$ jar tvf h2-1.4.197.jar | grep acme
   421 Wed Sep 26 12:17:16 EEST 2018 acme/Function.class

А затем из оболочки H2:

[user@host h2]$ java -cp h2*.jar org.h2.tools.Shell -user sa -password sa -url jdbc:h2:tcp://localhost/~/mydb
Welcome to H2 Shell 1.4.197 (2018-03-18)
...
sql> CREATE ALIAS IS_PRIME FOR "acme.Function.isPrime";
(Update count: 0, 9 ms)
sql> CALL IS_PRIME(5);
PUBLIC.IS_PRIME(5)
TRUE
(1 row, 31 ms)

Хотя я и хотел хранить свои пользовательские функции в отдельной банке.
Если кто-нибудь знает, как это сделать, это будет оценено.

...