Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> D-Bus, DBusConnection.getConnection() 
V
    Опции темы
Gugle
Дата 26.8.2015, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



Доброго времени суток!

Необходимо использовать D-Bus для работы 2х приложений. 
В java используется библиотека libdbus-java-2.7.jar.
Я взял примеры тут и первый же пример выдает ошибку:

Цитата

$ Cannot Resolve Session Bus Address
$ org.freedesktop.dbus.exceptions.DBusException: Cannot Resolve Session Bus Address
$  at org.freedesktop.dbus.DBusConnection.getConnection(Unknown Source)


В интернете пока ничего путного не нашел.
Есть, кто сталкивался с D-Bus применительно к java?

Вот код:
Код


package com.rm5248;

import org.apache.log4j.Logger;
import org.freedesktop.dbus.DBusConnection;
import org.freedesktop.dbus.exceptions.DBusException;

public class JavaReceive implements ReceiveInterface {
    
    private static final Logger log = Logger.getLogger(JavaReceive.class);
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new JavaReceive();
    }
    
    public JavaReceive() {
        log.info("MyPath:"+System.getProperty("java.library.path"));
        DBusConnection conn = null;
        try {
            log.info("Connect to session bus.");
            conn = DBusConnection.getConnection(DBusConnection.SESSION);
        } catch (DBusException ex) {
            log.error(ex.getMessage(), ex);
            System.exit(0);
        }
        log.info("Connected true.");
        log.info("Request name.");
        try {
            conn.requestBusName("com.rm5248");
        } catch (DBusException ex) {
            log.error(ex.getMessage(), ex);
            System.exit(0);
        }
        log.info("Name true.");
        log.info("Register dbus object.");
        try {
            conn.exportObject("/", new JavaReceive());
        } catch (DBusException ex) {
            log.error(ex.getMessage(), ex);
            System.exit(0);
        }
        log.info("Registered true.");
        System.exit(0);
    }
    
    @Override
    public int echoMessage(String str) {
        log.info(str);
        return 0;
    }

    @Override
    public boolean isRemote() {
        return false;
    }
    
    @Override
    public int echoAndAdd(String str, int a, int b) {
        log.info(str);
        return a+b;
    }
    
}


и интерфейс:

Код


package com.rm5248;

import org.freedesktop.dbus.DBusInterface;

public interface ReceiveInterface extends DBusInterface {
    
    public int echoMessage(String str);
        public int echoAndAdd(String str, int a, int b);
}

PM MAIL   Вверх
tzirechnoy
Дата 26.8.2015, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



А у Вас dbus-то сам работает? Что пишэт dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
?
PM MAIL   Вверх
Gugle
Дата 27.8.2015, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



Да, работает:

Код

$ dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
method return sender=org.freedesktop.DBus -> dest=:1.204 reply_serial=2
   array [
      string "org.freedesktop.DBus"
      string "com.canonical.Unity.Launcher"
      string "org.freedesktop.Notifications"
      string ":1.7"
      string ":1.8"
      string "com.canonical.indicator.datetime"
....
      string "com.canonical.indicator.power"
   ]

PM MAIL   Вверх
Gugle
Дата 27.8.2015, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



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

От обычного пользователя:
Код

$ java -jar -Djava.library.path=/usr/lib/jni/libunix-java.so D-BusTestv1.jar
10:46:07,264  INFO JavaReceive - /usr/lib/jni/libunix-java.so
10:46:07,265  INFO JavaReceive - DBusConnection
Exception in thread "main" java.lang.NoClassDefFoundError: cx/ath/matthew/unix/UnixSocket
    at org.freedesktop.dbus.Transport.connect(Unknown Source)
    at org.freedesktop.dbus.Transport.<init>(Unknown Source)
    at org.freedesktop.dbus.DBusConnection.<init>(Unknown Source)
    at org.freedesktop.dbus.DBusConnection.getConnection(Unknown Source)
    at com.rm5248.JavaReceive.main(JavaReceive.java:27)
Caused by: java.lang.ClassNotFoundException: cx.ath.matthew.unix.UnixSocket
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)


И от супер пользователя:
Код

$ sudo java -jar -Djava.library.path=/usr/lib/jni/libunix-java.so D-BusTestv1.jar

10:46:27,187  INFO JavaReceive - /usr/lib/jni/libunix-java.so
10:46:27,189  INFO JavaReceive - DBusConnection
10:46:27,197 ERROR JavaReceive - Cannot Resolve Session Bus Address
org.freedesktop.dbus.exceptions.DBusException: Cannot Resolve Session Bus Address
    at org.freedesktop.dbus.DBusConnection.getConnection(Unknown Source)
    at com.rm5248.JavaReceive.main(JavaReceive.java:27)


Дам информацию о системе. Может натолкнет кого на мысли:
Код

$ uname -a
Linux 3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux


Установленные lib:
$ sudo apt-get install dbus qdbus libunixsocket-java dbus-java-bin libdbus-java libmatthew-io-java
PM MAIL   Вверх
tzirechnoy
Дата 27.8.2015, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Цитата
java.lang.NoClassDefFoundError: cx/ath/matthew/unix/UnixSocket


Как говорится, какое слово перевести? Найдите и поставьте этот cx.ath.matthew.unix.UnixSocket

Цитата
И от супер пользователя:


Это нормально, dbus ищет шыну по переменной DBUS_SESSION_BUS_ADDRESS, а sudo по умолчанию зачищает переменные.

PM MAIL   Вверх
Gugle
Дата 27.8.2015, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  27.8.2015,  10:11 Найти цитируемый пост)
Как говорится, какое слово перевести? Найдите и поставьте этот cx.ath.matthew.unix.UnixSocket


Собственно:
Цитата

dbus-java needs to have a RPM dependency to libmatthew-java.


Я так полагал, ее заменила libmatthew-io-java. Возможно ошибался...
PM MAIL   Вверх
Gugle
Дата 27.8.2015, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



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

Код

$ java -cp /usr/share/java/unix.jar -Djava.library.path=/usr/lib/jni/libunix-java.so -jar D-BusTestv1.jar
   Caused by: java.lang.ClassNotFoundException: cx.ath.matthew.unix.UnixSocket


В чем проблема?
PM MAIL   Вверх
Gugle
Дата 27.8.2015, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



Разобрался.
Подключил библиотеки с абсолютными путями.

/usr/share/java/unix.jar
/usr/share/java/dbus.jar

И прально указал путь к системной библиотеки:
-Djava.library.path=/usr/lib/jni
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.