Stardog: невозможно загрузить класс [org.postgresql.Driver]

Я пытаюсь следовать руководству Stardog по использованию виртуальных графов.

В соответствии с инструкциями я установил переменную среды $STARDOG_EXT.

Настройка JDBC

Stardog не поставляется с драйверами JDBC, поэтому вам необходимо вручную скопировать файл JAR, содержащий драйвер для вашей СУБД, в путь к классам сервера Stardog. Предпочтительный способ сделать это — установить переменную окружения STARDOG_EXT так, чтобы она указывала на каталог вне каталога установки Stardog, и скопировать туда jar-файл:

$ export STARDOG_EXT=/opt/stardog/ext
$ mkdir $STARDOG_EXT
$ cp JDBC_JAR_FILE $STARDOG_EXT

У меня есть файл JAR, скопированный в указанное выше место, как указано ниже.

bilesh@vm-ubuntu:~$ echo $STARDOG_EXT 
/opt/stardog/ext

bilesh@vm-ubuntu:~$ cd $STARDOG_EXT

bilesh@vm-ubuntu:/opt/stardog/ext$ ls -la
total 916
drwxr-xr-x 2 root    root      4096 Feb 19 20:22 .
drwxr-xr-x 9 stardog stardog   4096 Feb 19 20:21 ..
-rw-r--r-- 1 stardog root    927447 Feb 19 20:22 postgresql-42.2.10.jar

Но я получаю сообщение об ошибке Unable to load class: org.postgresql.Driver при попытке создать виртуальный граф с помощью PostgreSQL.

bilesh@vm-ubuntu:~$ sudo /opt/stardog/stardog-server.sh start
Starting stardog
Starting Stardog server in background, see /var/opt/stardog//stardog.log for more information.

bilesh@vm-ubuntu:~$ cd Workspace/Stardog/pgsql_demo

bilesh@vm-ubuntu:~/Workspace/Stardog/pgsql_demo$ stardog-admin virtual add music.properties music_mappings.ttl
Unable to load class: org.postgresql.Driver from ClassLoader:sun.misc.Launcher$AppClassLoader@619a5dff;ClassLoader:java.net.URLClassLoader@3b63d1de

Мой файл свойств PostgreSQL (music.properties) и файл сопоставления (music_mappings.ttl) находятся в папке — ~/Workspace/Stardog/pgsql_demo.


person Bilesh Ganguly    schedule 20.02.2020    source источник
comment
у вас возникает та же проблема, если вы не используете sudo для запуска сервера?   -  person Bryan A    schedule 20.02.2020
comment
@BryanA - нужно запустить его с sudo. Сценарий должен писать в некоторых местах, к которым у пользователя нет доступа для записи.   -  person Bilesh Ganguly    schedule 20.02.2020


Ответы (2)


Чтобы заставить его работать, я поместил файл JAR (postgresql-42.2.10.jar) в $JAVA_HOME/jre/lib/ext/ и перезапустил сервер.

После этого мне удалось успешно создать виртуальный граф.

Не уверен, что именно так я должен делать это в будущем.

person Bilesh Ganguly    schedule 20.02.2020
comment
какую версию Stardog вы используете? у меня были проблемы с запуском sudo из-за разрешений, когда он работает как root. вы можете попробовать создать системную службу, которая запускает ее под учетной записью пользователя stardog, которая у вас есть, но я не знаю, в этом ли проблема - person Bryan A; 21.02.2020

При использовании пакета вам нужно установить STARDOG_EXT по-другому. Он не будет виден среде демона, если вы установите его только в своей оболочке. См. документы здесь: https://docs.stardog.com/get-started/install-stardog/linux-installation#package-layout

Также вы должны использовать systemd/systemctl для запуска сервера, если он установлен таким образом.

person Jess Balint    schedule 21.02.2020