Назад | Перейти на главную страницу

Как мне заставить Openfire 3.7.1 «запомнить» свою конфигурацию?

У меня есть (ну, до сегодняшнего утра) внутрисетевой XMPP-сервер Openfire, который весело работал в течение 370 дней без каких-либо прикосновений, и в общей сложности около 3 лет работы. Пользователи проходят аутентификацию в AD на соседнем сервере и делятся по OU на группы. Вся эта функциональность отлично работает [ed | s].

Моя проблема в том, что сегодня утром произошел сбой службы, мой помощник получил ошибку «нет места в куче Java» (и нет снимка экрана, извините) при попытке использовать консоль администратора, чтобы определить, в чем проблема. Мы перешли к физической консоли и перезапустили службу, и она перезапустилась нормально или, по крайней мере, без видимых ошибок.

Но теперь при попытке зайти в консоль администратора открывается страница начальной настройки. Я застонал, но откопал свои заметки и повторно ввел всю информацию LDAP и информацию о соединении с БД. С некоторым удовлетворением я нажал кнопку «Войти в консоль администратора» и стал ждать ... только чтобы вернуться к экрану настройки, который я только что покинул, и спросил меня, какой язык моей системы больше нравится. Так:

Сервер MySQL работает, и информация о соединении верна в файле /opt/openfire/conf/openfire.xml. Я проверил соединение, используя учетные данные в этом файле для просмотра таблицы ofProperty. Проверка содержимого таблицы ofProperty показывает, что настройки были сохранены там, включая всю информацию LDAP, имя и другие поля, определения групп, все. Но Openfire отказывается загружать их из базы данных.

Что я проверил:

РЕДАКТИРОВАТЬ: вырезки журнала, показывающие, что соединение отклонено, но, по-видимому, произошло только раньше:

    2012.05.16 09:27:47 org.jivesoftware.database.DbConnectionManager - Unable to get a connection from the database pool (attempt 10 out of 10).
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException
MESSAGE: Connection refused

STACKTRACE:

java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(DefaultConnectionBuilder.java:39)
    at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java:159)
    at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:211)
    at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.jivesoftware.database.DefaultConnectionProvider.getConnection(DefaultConnectionProvider.java:86)
    at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager.java:124)
    at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:754)
    at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:480)
    at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:212)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:113)
    at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:58)


** END NESTED EXCEPTION **



Last packet sent to the server was 1 ms ago.
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(DefaultConnectionBuilder.java:39)
    at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java:159)
    at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:211)
    at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.jivesoftware.database.DefaultConnectionProvider.getConnection(DefaultConnectionProvider.java:86)
    at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager.java:124)
    at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:754)
    at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:480)
    at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:212)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:113)
    at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:58)
2012.05.16 09:27:48 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 09:36:34 org.jivesoftware.openfire.pubsub.PubSubModule - Publish-Subscribe domain: pubsub.cc.server.local
2012.05.16 09:36:36 org.jivesoftware.openfire.muc.spi.MultiUserChatServiceImpl - Multi User Chat domain: conference.cc.server.local
2012.05.16 09:37:48 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 9:37:48 AM]
2012.05.16 09:38:01 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
  http://127.0.0.1:9090
  https://127.0.0.1:9091
2012.05.16 09:54:21 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 09:54:33 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 9:54:33 AM]
2012.05.16 09:54:46 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
  http://127.0.0.1:9090
  https://127.0.0.1:9091
2012.05.16 10:07:24 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:07:37 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:07:37 AM]
2012.05.16 10:07:49 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
  http://127.0.0.1:9090
  https://127.0.0.1:9091
2012.05.16 10:26:39 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:28:54 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:28:54 AM]
2012.05.16 10:29:10 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
  http://127.0.0.1:9090
  https://127.0.0.1:9091
2012.05.16 10:33:25 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:33:38 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:33:38 AM]
2012.05.16 10:33:51 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
  http://127.0.0.1:9090
  https://127.0.0.1:9091
2012.05.16 10:51:38 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:51:51 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:51:51 AM]
2012.05.16 10:52:04 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
  http://127.0.0.1:9090
  https://127.0.0.1:9091
2012.05.16 10:53:01 org.jivesoftware.openfire.XMPPServer - Server halted
2012.05.16 10:53:35 org.jivesoftware.openfire.XMPPServer - Openfire 3.7.1 [May 16, 2012 10:53:35 AM]
2012.05.16 10:53:49 org.jivesoftware.openfire.container.AdminConsolePlugin - Admin console listening at:
  http://127.0.0.1:9090
  https://127.0.0.1:9091

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

Короче говоря: взглянул на другую (рабочую) установку в другом месте. Оказывается, есть значение, называемое <setup> который находится в файле openfire.xml работающей установки следующим образом:

...(XML snipped)
      <minConnections>5</minConnections>  
      <maxConnections>25</maxConnections>  
      <connectionTimeout>1.0</connectionTimeout> 
    </defaultProvider> 
  </database>  
  <setup>true</setup> 
</jive>

Строка настройки отсутствовала в моем openfire.xml по какой-то причине.

Интересно, что файл принадлежит и доступен для записи только пользователю root, поэтому какой-то привилегированный процесс удалил строку (каким-то образом ???) при запуске процесса установки, оставив при этом параметры подключения в покое. Но, поскольку файл был доступен для записи только пользователю root, сценарий установки, запущенный JRE, не смог выполнить запись в файл. Кроме того, я идиот и пропустил эту строку среди исключений Java:

java.io.IOException: XML properties file must be writable: openfire.xml

По-видимому, он доступен для записи в некоторые части процесса установки, но не в другие? Я не знаю. Но если у кого-то еще есть эта проблема, надеюсь, они найдут здесь ответ. Мне удалось исправить проблему и немедленно загрузить Openfire, добавив <setup> значение для openfire.xml.