Problema com JDBC - Composite Entity + DAO

:arrow: Cenario:
Estou implementando um sistema onde tenho um CMP (Usuario) com 1 objeto dependente (Administrador).
Resolvi implementar usando o padrao Composite Entity e estou usando a estrategia Composite Value Object.
Implementei o Administrador usando o padrao Data Access Object e estou usando a estrategia Factory for Data Access utilizando tambem o padrao Abstract Factory.
Estou usando Jboss 3.2.3RC1 como conteiner.

:arrow: Problema:
No metodo de conexao da classe MysqlDAOFactory estou tentando usar JNDI para abrir a conexao:

InitialContext c = new InitialContext();
DataSource jdbcFactory = (DataSource)c.lookup("java:comp/env/jdbc/SistemaDS");
Connection conn = jdbcFactory.getConnection();

E nao estou conseguindo!!! :cry:

:arrow: Configuracoes:

mysql-ds.xml

  <local-tx-datasource>
    <jndi-name>SistemaDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/sistema</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>jboss</user-name>
    <password>password</password>
  </local-tx-datasource>

jboss-web.xml

  <resource-ref>
      <res-ref-name>jdbc/SistemaDS</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <jndi-name>java:/SistemaDS</jndi-name>
	  <res-auth>Container</res-auth>
  </resource-ref>

web.xml

    <resource-ref>
        <description>DB Connection</description>
   		<res-ref-name>jdbc/SistemaDS</res-ref-name> 
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

Espero q as informacoes sejam suficientes!! :wink:
Se alguem puder me ajudar agradecerei muito. :smiley:

O Daniel me deu uma sugestão de correção que funcionou…
Ao invez de: (DataSource)c.lookup("java:comp/env/jdbc/SistemaDS"); usar (DataSource)c.lookup("java:/SistemaDS");

Funcionou!!! :lol:

Valeu Daniel! :wink:

Só para constar nos autos…

O problema que a Gleise estava cometendo (e que muita gente começando com EJB também comete) é que ela não estava fazendo o bind (associação) correto entre o datasource que ela definiu no mysql-ds.xml e o EJB.

A linha marcada em negrito define o nome que seu DataSource vai assumir no container e é através dele que você vai procurá-lo. Portanto, para usá-lo em seu EJB, basta apenas:

InitialContext ctx = new InitialContext();
DataSource source = (DataSource)ctx.lookup("java:/MeuDataSource");