O sistema é Debian Squeeze (instalação padrão), com pacotes sun-java6-jre, sun-java6-jdk, tomcat6 e mysql-server-5.1.
Não sou o primeiro nem o último a quebrar a cabeça com os erros quando do primeiro acesso ao sistema BT com aquele login 'M10001' e senha 'Senha'. Portanto vou publicar a resolução encontrada por mim para resolver esta questão.
Quando acontece este erro, neste caso específico, o log da aplicação retorna que a tabela não existe:
26/05/2011 14:02:45,624 | | INFO | Mensagem (obterMensagem:67) | Erro desconhecido -> Table 'bancotalentos.UsuarioSistema' doesn't exist
26/05/2011 14:02:45,625 | | ERROR | UnidadeAutenticadoraBT (autenticarUsuario:102) | autenticarUsuario(String strLoginUsuario = M10001, String strSenhaUsuario = Senha) - catch
Ao acessar a base MySQL, neste caso, e buscar pela tabela, como está sendo buscado pelo sistema, tem-se o mesmo erro:
mysql> select * from UsuarioSistema;
ERROR 1146 (42S02): Table 'bancotalentos.UsuarioSistema' doesn't exist
Mas ao executar um 'show tables;', percebe-se que as tabelas criadas pelo script BancoTalentosMySql.sql.txt estão em maiúsculas:
mysql> show tables;
+-----------------------------+
| Tables_in_bancotalentos |
+-----------------------------+
| ATRIBUTOTALENTO |
| ATRIBUTOTALENTOOPCAO |
| ATRIBUTOTALENTOVALORADO |
| CATEGORIAATRIBUTOTALENTO |
| CATEGORIATALENTO |
| FILTROCONSULTA |
| FILTROCONSULTAGRUPO |
| FILTROCONSULTAUSUARIO |
| FUNCIONALIDADESISTEMA |
| GESTORSISTEMA |
| GRUPO |
| GRUPOCATEGORIATALENTO |
| GRUPOCRITERIOCONSULTA |
| PERFILFUNCIONALIDADESISTEMA |
| PERFILSISTEMA |
| PERFILSISTEMAGRUPO |
| SIGESPPESSOAL |
| SIGESPPESSOALLOTACAO |
| SISTEMA |
| TABELAAPOIOMM |
| TALENTO |
| TIPOFILTROCONSULTA |
| TIPOHTML |
| USUARIOPERFILSISTEMA |
| USUARIOSISTEMA |
+-----------------------------+
25 rows in set (0.00 sec)
Logo, há um problema de case sensitive. No linux, o MySQL entende como tabelas diferentes 'USUARIOSISTEMA' e 'UsuarioSistema' (case sensitive). Apenas no Windows, seriam consideradas tabelas iguais (case insensitive).
Para resolver isto, removi a base de dados, adicionei a seguinte linha no /etc/mysql/my.cnf:
lower_case_table_names = 1
E reiniciei o serviço mysql.
Agora é carregado o script (de criação de tabelas e de carga)e as tabelas foram forçadas a ficarem em lower_case, bem como a consulta.
mysql> show tables;
+-----------------------------+
| Tables_in_bancotalentos |
+-----------------------------+
| atributotalento |
| atributotalentoopcao |
| atributotalentovalorado |
| categoriaatributotalento |
| categoriatalento |
| filtroconsulta |
| filtroconsultagrupo |
| filtroconsultausuario |
| funcionalidadesistema |
| gestorsistema |
| grupo |
| grupocategoriatalento |
| grupocriterioconsulta |
| perfilfuncionalidadesistema |
| perfilsistema |
| perfilsistemagrupo |
| sigesppessoal |
| sigesppessoallotacao |
| sistema |
| tabelaapoiomm |
| talento |
| tipofiltroconsulta |
| tipohtml |
| usuarioperfilsistema |
| usuariosistema |
+-----------------------------+
25 rows in set (0.00 sec)
Assim, o logon foi realizado com sucesso.
26/05/2011 14:13:23,929 | | INFO | AutenticacaoSequencia (validarLogonEfetuarLogon:262) | Logon realizado | M10001 | Presidente da Matriz
Obs.: O MySQL, ao criar a base de dados e tabelas, também cria arquivos no S.O., dai é que surge o problema com maiúsculas e minúsculas. Neste caso os arquivos ficam em /var/lib/mysql/bancotalentos
O link abaixo me ajudou a encontrar a solução e pode ajudá-los em outras dúvidas relacionadas case sensitive.
http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html
Inclusive, acho prudente editar o "Manual de Instalação" prevendo essa solução para sistemas não-Windows, já que lá nada consta prevendo tal dificuldade.
Aproveitando a oportunidade, fica a dica que é interessante também dar um exemplo de edição do log4j.properties para escrever o log em um arquivo no S.O., como o que segui, disponível em http://logging.apache.org/log4j/1.2/manual.html:
log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
Autor: Marino Jr
22 comentários