[RESOLVIDO] Como criar um pool de conexões no JUnit:?

Olá, amigos, estou tentando acessar meu pool de conexões (JNDI) utilizando o Junit, mas está difícil, estou há dias, já tentei de diversas maneiras e não consigo.

Hoje, meu código está assim:

[code]public class NewEmptyJUnitTest {

public static EntityManager em;

public NewEmptyJUnitTest() {
}

@BeforeClass
public static void setUpClass() throws Exception {

    try {
        // Create initial context
        System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                "org.apache.naming.java.javaURLContextFactory");
        System.setProperty(Context.URL_PKG_PREFIXES,
                "org.apache.naming");
        InitialContext ic = new InitialContext();

        ic.createSubcontext("java:");
        ic.createSubcontext("java:/comp");
        ic.createSubcontext("java:/comp/env");
        ic.createSubcontext("java:/comp/env/jdbc");

        Properties properties = new Properties();
        properties.setProperty("url", "jdbc:mysql://sitekkk.net.br/schema");
        properties.setProperty("maxActive", "10");
        properties.setProperty("maxIdle", "8");
        properties.setProperty("minIdle", "10");
        properties.setProperty("maxWait", "10");
        properties.setProperty("testOnBorrow", "true");
        properties.setProperty("username", "user");
        properties.setProperty("password", "kk123");
        properties.setProperty("validationQuery", "SELECT 1");
        properties.setProperty("removeAbandoned", "true");
        properties.setProperty("removeAbandonedTimeout", "1");
        properties.setProperty("logAbandoned", "true");
        DataSource ds = BasicDataSourceFactory.createDataSource(properties);

        ic.bind("java:/comp/env/jdbc/schema", ds);

    } catch (NamingException ex) {
        Logger.getLogger(NewEmptyJUnitTest.class.getName()).log(Level.SEVERE, null, ex);
    }

}

@AfterClass
public static void tearDownClass() throws Exception {
}

@Before
public void setUp() {
}

@After
public void tearDown() {
}

[/code]Mas retorna o seguinte erro:

[code]
junit.framework.TestListener: addError(br.com.incard.testes.NewEmptyJUnitTest, org/apache/commons/pool/impl/GenericObjectPool)
Tests run: 0, Failures: 0, Errors: 1, Time elapsed: 25,163 sec

Testcase: br.com.incard.testes.NewEmptyJUnitTest: Caused an ERROR
org/apache/commons/pool/impl/GenericObjectPool
java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
at org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:167)
at br.com.incard.testes.NewEmptyJUnitTest.setUpClass(NewEmptyJUnitTest.java:71) // aqui no caso é linha 37
Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
[/code]O jar do commons-dbcp-1.4 já está configurado nas bibliotecas tanto do projeto quanto do teste.

Meu sistema web funciona perfeitamente, mas eu simplesmente não consigo acessar minha base de dados a partir do jUnit. Há alguma estratégia diferente para conseguir acessar a base de dados a partir de Junit? Eu uso MySQL

Obrigado!

descobri como resolver o problema… simples!

Quando eu fazia deploy local da minha aplicação web, o acesso ao banco era fornecido pelo sevidor, no caso, o glashfish. É lá que estavam configuradas as informações da url da base, usuario, senha, driver, etc. O JUnit - ainda não sei por qual razão - não consegue acessar o servidor. Para resolver isso, adicionei no método setUp do Junit a criação do entitymanager para que, sempre que eu executar a classe, ele execute antes esse código.

No meu persistence.xml, eu mudei o transaction-type de “JTA” para “RESOURCE_LOCAL” e adicionei no próprio persistence.xml as informações de usuario, senha e url: <persistence-unit name="IncardWebPU" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/base</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="eclipselink.logging.level" value="FINE"/> <property name="eclipselink.ddl-generation" value="create-tables"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://site.net.br:3306/base"/> <property name="javax.persistence.jdbc.password" value="passwd"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.user" value="user"/> </properties> </persistence-unit>E funcionou!!!

No futuro eu vou acrescentar duas unidades de persistência: uma para o sistema web e outra para o junit.
Alguém tem algo a acrescentar?