Maybe this files can help you.

Regards.

________________
Manolo Ramirez T.

Leonardo Francalanci wrote:
In my DB tier I use an interface to get the connection.
When used under Tomcat, the class that implements the connection gets
the connecton through JNDI.
I want to test these classes outside of Tomcat.
Is there a simple way to put objects in the Context,
I mean a simple way to emulate Tomcat behavior?
I read the JNDI tutorial, but is the worse thing I've ever read.

At this moment I created a class that implements my interface
and that open a simple connection to the db, but in this way I need
to set the right interface (JNDI/Simple) in each class a want to test.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



package com.handsoftware.utils;

import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class DBjndi {

    protected static DataSource ds;

    public static void init(String name) throws NamingException{
        Context ctx = new InitialContext();
        init(name,ctx);
    }

    public static void init(String name,Context context) throws NamingException {
        ds = (DataSource)context.lookup(name);
    }

    public static Connection getConnection() throws SQLException {
        if(ds == null)
            throw new IllegalStateException("DBjndi was not initialized");
        return ds.getConnection();
    }
}
package com.handsoftware.utils.test;

import java.util.Hashtable;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class MockContext extends InitialContext {

    Hashtable data;

    public MockContext() throws NamingException{
        super();
        data = new Hashtable();
    }

    public Object add2Context(String name,Object obj) {
        return data.put(name,obj);
    }

    public Object lookup(String name) throws NamingException {
        Object obj=data.get(name);
        if(obj!=null)
            return obj;

        return super.lookup(name);
    }
}
package com.handsoftware.utils.test;

import javax.sql.DataSource;
import java.sql.*;
import java.io.PrintWriter;

public class MockDataSource implements DataSource {
    
    protected Driver m_driver;
    protected String m_url;
    protected String m_user;
    protected String m_passwd;

    public MockDataSource(String driverClass, String url, String user, String passwd) {
        try {
            m_driver = (Driver)Class.forName(driverClass).newInstance();
            DriverManager.registerDriver(m_driver);
        } catch (Exception e) {
            e.printStackTrace();
        }

        m_url=url;
        m_user=user;
        m_passwd=passwd;
    }

    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection(m_url,m_user,m_passwd);
    }

    public Connection getConnection(String username,String password) throws 
SQLException {
        return DriverManager.getConnection(m_url,username,password);
    }

    public PrintWriter getLogWriter() throws SQLException {
        return null;
    }

    public void setLogWriter(PrintWriter out) throws SQLException {
    }

    public void setLoginTimeout(int seconds) throws SQLException {
    }

    public int getLoginTimeout() throws SQLException {
        return 0;
    }
    
}
package com.handsoftware.utils;

import junit.framework.TestCase;
import com.handsoftware.utils.test.MockContext;
import com.handsoftware.utils.test.MockDataSource;
import java.sql.*;
import javax.naming.NamingException;

public class TestDBjndi extends TestCase {

    public TestDBjndi () {
        super();
    }

    public void setUp() throws NamingException {
        MockContext context = new MockContext();
        String jndiName="java:comp/env/jdbc/PruebasDB";
        context.add2Context(jndiName,new MockDataSource("org.postgresql.Driver"
                                                        
,"jdbc:postgresql://localhost:5432/pruebas"
                                                        ,"manolo","")
                            );

        DBjndi.init(jndiName,context);
    }

    public void testConnection() {

        try {
            Connection con = DBjndi.getConnection();
        
            //insercion
            PreparedStatement st =
                con.prepareStatement("insert into pruebas(id,nombre,apellido) 
values(?,?,?)");
            st.setInt(1,666);
            st.setString(2,"juan");
            st.setString(3,"perez");
            st.execute();

            //select
            st = con.prepareStatement("select nombre,apellido from pruebas where 
id=?");
            st.setInt(1,666);
            ResultSet rset = st.executeQuery();
            rset.next();
            assertEquals("no funciona select:nombre",rset.getString("nombre"),"juan");
            assertEquals("no funciona select: 
apellido",rset.getString("apellido"),"perez");
            rset.close();


            //delete
            st = con.prepareStatement("delete from pruebas where id=?");
            st.setInt(1,666);
            st.execute();
            
            st = con.prepareStatement("select * from pruebas where id=?");
            st.setInt(1,666);
            rset = st.executeQuery();
            rset.next();
            assertFalse("No funciona delete!",rset.next());

        }
        catch(SQLException e) {
            fail(e.toString());
        }
    }

}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to