Como posso fazer com que o Openfire 3.7.1 "lembre" sua configuração?

1

Eu tenho (bem, tive até esta manhã) um servidor XMPP de intranet Openfire que funcionava alegremente por 370 dias sem ser tocado, e um total de cerca de 3 anos de execução. Os usuários se autenticam no AD em um servidor adjacente e são divididos por UO em grupos. Toda essa funcionalidade funciona [ed | s] ótima.

Meu problema é que o serviço caiu esta manhã, meu assistente recebeu um erro 'no Java heap space' (e nenhuma captura de tela, desculpe) ao tentar usar o console administrativo para determinar qual era o problema. Fomos ao console físico e reiniciámos o serviço, e ele foi reiniciado corretamente ou, pelo menos, sem erro visível.

Mas agora, tentar acessar o Admin Console traz a página de configuração inicial. Eu gemi, mas tirei minhas anotações e re-inseri todas as informações de conexão LDAP e de conexão DB. Com alguma satisfação, cliquei no botão "Fazer login no Admin Console" e esperei ... apenas para voltar à tela de configuração que acabei de sair, perguntando qual era o meu idioma de sistema preferido. Então:

O servidor MySQL está em execução e as informações de conexão estão corretas no arquivo /opt/openfire/conf/openfire.xml. Eu testei a conexão usando as credenciais nesse arquivo para exibir a tabela ofProperty. Verificar o conteúdo da tabela ofProperty revela que as configurações foram salvas lá, incluindo todas as informações do LDAP, o nome e outros campos, as definições do grupo, tudo. Mas o Openfire se recusa a carregar os dados do banco de dados.

Coisas que eu verifiquei:

  • Examinar / var / log / messages não mostra nada fora do comum.
  • O MySQL está funcionando bem e é capaz de receber conexões do localhost também como o ambiente de trabalho do MySQL na minha máquina.
  • Meu disco é usado em 3%.
  • A memória não é um problema, a troca 0k é usada.
  • Esta máquina funciona apenas em openfire, nada mais.
  • O Netstat mostra apenas o processo de abertura em escuta 9090 e 9091, as portas de administração.
  • Rodar o ps mostra apenas o admin processo.
  • Nenhuma atualização foi instalada.
  • Nenhuma configuração foi alterada.
  • Esta máquina não é acessível a partir da Internet, por isso o hacking parece improvável. Também não há outros sinais disso.

EDIT: Recortes de log mostrando uma conexão recusada, mas que aparentemente só aconteceu antes:

    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

Depois dessa falha, tentei reconfigurar e reiniciar o serviço, como você pode ver no console de administração.

    
por atroon 16.05.2012 / 18:01

1 resposta

3

Longa história: veja outra instalação (em funcionamento) em outro lugar. Acontece que há um valor chamado <setup> que reside no arquivo openfire.xml de uma instalação funcional da seguinte forma:

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

Por algum motivo, a linha de configuração estava ausente do meu openfire.xml .

Curiosamente, o arquivo é de propriedade e somente gravável pelo root, portanto, algum processo privilegiado excluiu a linha (de alguma forma ???) quando o processo de instalação foi executado, aparentemente deixando apenas os parâmetros de conexão. Mas, como o arquivo era apenas gravável pelo root, o script de configuração executado pelo JRE não era capaz de gravar no arquivo. Além disso, sou um idiota e perdi essa linha entre as exceções de Java:

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

Aparentemente, é gravável em algumas partes do processo de configuração, mas não em outras? Eu não sei. Mas se alguém tiver esse problema, esperamos que encontre a resposta aqui. Consegui corrigir o problema e fazer com que o Openfire fosse carregado imediatamente adicionando o valor <setup> ao openfire.xml.

    
por 16.05.2012 / 21:11