Ir para o conteúdo

 Voltar a Banco de Tal...
Tela cheia

[Resolução]Banco de Talentos em Linux - Erro no Primeiro Acesso

26 de Maio de 2011, 14:43 , por Desconhecido - | 1 Pessoa seguindo este artigo.
Visualizado 32 vezes

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

Essa comunidade não possui posts nesse blog