пятница, 1 апреля 2016 г.

Пакеты openfire 4.0.2 для Debian не работают с java 7

Попробовал обновить openfire с 4.0.1 до 4.0.2 в Debian Wheezy. Обновление проходит без проблем, но клиенты не могут подключиться к серверу.

В логе openfire следующее:

2016.04.01 14:35:18 org.jivesoftware.openfire.nio.ConnectionHandler - Closing connection due to exception in session: (0x00000002: nio socket, server, /x.x.x.x:50558 => /y.y.y.y:5222)
java.lang.NoSuchMethodError: java.util.concurrent.ConcurrentHashMap.keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;
at org.jivesoftware.openfire.roster.Roster.broadcastPresence(Roster.java:628)

[пропущен кусок лога]

at java.lang.Thread.run(Thread.java:745)

В багтрекере openfire есть несколько записей на эту тему (OF-965, OF-1115, OF-1116). Причина в том, что openfire 4.0.2 скомпилирован с использованием java 8.x, а в Wheezy доступна только java 7.x. Тут более детально описан источник несовместимости.

Я могу понять позицию разработчиков openfire на счет EOL java 7, но в этом случае нужно изменить зависимости пакета и обновить документацию - тогда никаких вопросов не будет. А пока же заявлена поддержка java 7, но работать будет только с java 8.

UPDATE: Собрал openjdk-8 под Debian Wheezy. Установил на тестовый сервер и попробовал удалить старый openjdk-7 - фиг вам. Оказывается он еще и в зависимостях пакета прибит гвоздями:

$ apt-cache show openfire | grep Depends
Pre-Depends: openjdk-7-jre-headless | openjdk-7-jre | oracle-java7-jre

Перепаковывать лениво - остановил openfire и прописал в /etc/default/openfire нужный JAVA_HOME. После этого все заработало.

5 комментариев:

  1. Добрый день!
    а подскажите какой параметр в default/openfire вы прописали?

    ОтветитьУдалить
    Ответы
    1. JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

      Удалить
    2. это когда вы уже руками собрали и добавили openjdk-8 , а если оставлять 7 версию, то JAVA_HOME прописать на ..../jvm/java-7-openjdk получается и будет работать? или так и не будет?

      Удалить
  2. все попробовал, савсем не работает с 7 версией :(
    только сейчас увидел ссылку на более детально описан источник несовместимости.

    ОтветитьУдалить
    Ответы
    1. Пакет с java 7 не будет работать совсем. Для себя я собрал бэкпорт openjdk 8 для wheezy и поправил зависимости пакета, чтобы не пришлось держать java 7 и java 8.

      Удалить