iBatis: ExceptionInInitializerError

Alguém já tentou usar o iBatis com SqlMaps e resultou neste erro?

Eu estava testando utilizando a camada DAO do iBatis e funcionou beleza sem a utilização de SqlMaps. Depois alterei as configurações para utilização de SqlMaps e sempre ocorre este erro!

A mensagem de erro que aparece no browser:

[code]exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.ExceptionInInitializerError
br.com.sistema.model.Usuario.<init>(Usuario.java:21)
br.com.sistema.web.LogonServlet.doPost(LogonServlet.java:49)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
[/code]

No log do Tomcat não aparece erro nenhum.

A linha que ocorre o erro:

private DaoManager daoManager = DaoConfig.getDaomanager();

A classe DaoConfig:

[code]public class DaoConfig {

private static final DaoManager daoManager;

static {

try {
  String resource = "br/com/sistema/dao/config/dao.xml";
  Reader reader = Resources.getResourceAsReader(resource);
  daoManager = DaoManagerBuilder.buildDaoManager(reader);
} catch (Exception e) {
  throw new RuntimeException("Could not initialize DaoConfig.  Cause: " + e);
}

}

public static DaoManager getDaomanager() {
return daoManager;
}

}[/code]

Não consigo entender o porque, pois em principio o arquivo dao.xml está correto, pois funciona sem o SqlMap e é praticamente igual ao exemplo que eles disponibilizam (JPetstore)… e o JPetstore funciona legal.

Também parece que nem é inicializada a classe DaoConfig, pois não aparece no erro a string “Could not initialize DaoConfig. Cause”…

Alguém teria uma idéia para mim ver onde procurar mais?

Valeu!

O seu dao.xml se encontra no pacote : br.com.sistema.dao.config ?

Posta o conteúdo do dao.xml e do sqlmap-config.xml (se for esse o nome que você está usando)

Mude o seu código de:

    } catch (Exception e) {
      throw new RuntimeException("Could not initialize DaoConfig.  Cause: " + e);
    }

para:

    } catch (Exception e) {
      throw new RuntimeException("Could not initialize DaoConfig.", e);
    }

E nos envie todo o stack trace. Aí, com a exceção de verdade, poderemos ajudar.

O construtor da sua classe está lançando alguma exception quando invocado via reflection.

O meu dao.xml se encontra no pacote correto, tanto que funciona com a implementação do ibatis sem sqlmaps.

Mudando a linha do catch como sugerido aparece o mesmo erro… parece que está lançando uma exception antes disso, mas não entendi direito o porque.

Segue o dao.xml:

<?xml version="1.0" encoding="UTF-8"?>

&lt;!DOCTYPE daoConfig
    PUBLIC "-//iBATIS.com//DTD DAO Configuration 2.0//EN"
    "http://www.ibatis.com/dtd/dao-2.dtd"&gt;

&lt;daoConfig&gt;

  &lt;properties resource="br/com/sistema/dao/config/database.properties"/&gt;

  &lt;context&gt;

    &lt;transactionManager type="SQLMAP"&gt;
      &lt;property name="SqlMapConfigResource" value="br/com/sistema/dao/sqlmaps/map/sql-map-config.xml"/&gt;
    &lt;/transactionManager&gt;

    &lt;dao interface="br.com.sistema.dao.MovimentoDao"
      implementation="br.com.sistema.dao.sqlmaps.SqlMapMovimentoDao"/&gt;

    &lt;dao interface="br.com.sistema.dao.PendenciaDao"
      implementation="br.com.sistema.dao.sqlmaps.SqlMapPendenciaDao"/&gt;

    &lt;dao interface="br.com.sistema.dao.SetorDao"
      implementation="br.com.sistema.dao.sqlmaps.SqlMapSetorDao"/&gt;

    &lt;dao interface="br.com.sistema.dao.SistemaDao"
      implementation="br.com.sistema.dao.sqlmaps.SqlMapSistemaDao"/&gt;

    &lt;dao interface="br.com.sistema.dao.StatusDao"
      implementation="br.com.sistema.dao.sqlmaps.SqlMapStatusDao"/&gt;

    &lt;dao interface="br.com.sistema.dao.UsuarioDao"
      implementation="br.com.sistema.dao.sqlmaps.SqlMapUsuarioDao"/&gt;
    
  &lt;/context&gt;

&lt;/daoConfig&gt;

Segue o sql-map-config.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
&lt;!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"&gt;

&lt;sqlMapConfig&gt;

  &lt;settings
    cacheModelsEnabled="true"
    enhancementEnabled="true"
    maxSessions="64"
    maxTransactions="8"
    maxRequests="128"/&gt;

  &lt;transactionManager type="JDBC"&gt;
    &lt;dataSource type="SIMPLE"&gt;
      &lt;property value="${driver}" name="JDBC.Driver"/&gt;
      &lt;property value="${url}" name="JDBC.ConnectionURL"/&gt;
      &lt;property value="${username}" name="JDBC.Username"/&gt;
      &lt;property value="${password}" name="JDBC.Password"/&gt;
      &lt;property value="15" name="Pool.MaximumActiveConnections"/&gt;
      &lt;property value="15" name="Pool.MaximumIdleConnections"/&gt;
      &lt;property value="1000" name="Pool.MaximumWait"/&gt;
    &lt;/dataSource&gt;
  &lt;/transactionManager&gt;

  &lt;sqlMap resource="br/com/sistema/dao/sqlmaps/map/Pendencia.xml"/&gt;
  &lt;sqlMap resource="br/com/sistema/dao/sqlmaps/map/Setor.xml"/&gt;
  &lt;sqlMap resource="br/com/sistema/dao/sqlmaps/map/Sistema.xml"/&gt;
  &lt;sqlMap resource="br/com/sistema/dao/sqlmaps/map/Status.xml"/&gt;
  &lt;sqlMap resource="br/com/sistema/dao/sqlmaps/map/Usuario.xml"/&gt;
  
&lt;/sqlMapConfig&gt;

Eu acho que deve ser um erro bem básico que não estou vendo…
Obrigado pelas respostas!

[quote=eagnes]Mudando a linha do catch como sugerido aparece o mesmo erro… parece que está lançando uma exception antes disso, mas não entendi direito o porque.
[/quote]

Teoricamente deveria aparecer o erro completo na página retornada pelo Tomcat. Por favor, envie o stack trace inteiro.

Realmente mister__m, tinha coisa na stack trace que eu não tinha visto…
Este erro ocorre com qualquer problema nos arquivos xml de configuração ou de mapeamento (que possuem os statments sql).

Eu estava usando em um arquivo de mapeamento um parâmetro com a classe String, mas deveria ter colocado java.lang.String…

Foi bom saber, pois agora quando ocorrer um erro igual sei por onde procurar!

Obrigado a todos que responderam o tópico!