You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Paul Landolt <la...@royalsys.com> on 2002/09/03 16:06:43 UTC
Re: Tomcat 4.1.x, JNDI, and Junit
Well, I've made some progress, but I'm still stuck.
by adding a reference to the apache context factory, I've managed to get an initial context:
System.setProperty("java.naming.factory.initial", "org.apache.naming.java.javaURLContextFactory");
However, I still cannot resolve "java:comp/env/db/pgDevInt"; It fails with the following exception:
NamingException: e= javax.naming.NameNotFoundException: Name java:comp is not bound in this Context
So, how do I bind to java:comp? A straight context lookup (like below) does not work either.
DataSource ds = (DataSource)envContext.lookup("db/pgDevInt");
Anybody have any ideas?
Paul Landolt wrote:
> Hello,
>
> Has anyone managed to use a JUnit test framework to connect to a JNDI resource
> provided by Tomcat? I'd like to be able to test my Java Database code using
> JUnit.
>
> When I used to use Weblogic, we could leave Weblogic running and then execute
> JUnit test cases external of the web app while connecting to Weblogic's JNDI
> resources. I'd like to perform the same task with TOMCAT. I've got the JNDI
> services running and working, but I'd like to execute JUnit tests outside of
> Tomcat and still use the Tomcat JNDI services that I've set up.
>
> I have managed to configure a Tomcat JNDI resource to my Postgres Developer
> Integration database. The resource is named, oddly enough, "db/pgDevInt". I've
> created a successful demo Java Server Page to check the connectivity. Here is a
> code snippet from the page:
>
> <%@page import = "java.util.*"%>
> <%@page import = "java.io.*"%>
> <%@page import = "java.sql.*"%>
> <%@page import = "javax.sql.*"%>
> <%@page import = "javax.naming.Context"%>
> <%@page import = "javax.naming.InitialContext"%>
>
> [...]
> <%
> Connection conn = null;
> PreparedStatement ps = null;
> ResultSet rs = null;
>
> try {
> conn = null;
> ps = null;
> rs = null;
>
> InitialContext ctx = new InitialContext();
> DataSource ds = (DataSource)ctx.lookup("java:comp/env/db/pgDevInt");
> conn = ds.getConnection();
> ps = conn.prepareStatement("select username from login");
> rs = ps.executeQuery();
>
> String userName = null;
> while (rs.next()) {
> [...]
> }
> [...]
> }
> %>
>
> This works without a hitch.
>
> I would like to use a very similar snippet in a Junta test harness. I assume you
> need to set some system properties before attempting to get the InitialContext,
> but I'm not sure how to proceed.
>
> Here is a snippet from my (currently not working JUnit test case):
>
> import junit.framework.TestCase;
> import junit.framework.TestSuite;
> import junit.framework.Test;
> import java.io.*;
> import java.lang.*;
> import java.util.*;
> import java.sql.*;
> import javax.sql.*;
> import javax.naming.*;
> import javax.naming.Context;
> import javax.naming.InitialContext;
> import javax.sql.DataSource;
>
> [...]
>
> public static void testDBConnectForRetrieve() {
>
> System.setProperty("java.naming.provider.url", "127.0.0.1");
>
> Connection conn = null;
> PreparedStatement ps = null;
> ResultSet rs = null;
>
> try {
> conn = null;
> ps = null;
> rs = null;
>
> InitialContext ctx = new InitialContext();
> DataSource ds = (DataSource)ctx.lookup("java:comp/env/db/pgDevInt");
> conn = ds.getConnection();
> ps = conn.prepareStatement("select username from login");
> rs = ps.executeQuery();
> }
> }
>
> When Junit attempts to get an InitialContext, the following exception is raised:
>
> [junit] NamingException: e= javax.naming.NoInitialContextException:
> Need to specify class name in environment or system property, or as
> an applet parameter, or in an application resource
> file: java.naming.factory.initial
>
> I've attached the entire JUnit test case in the event that someone would like to
> examine it (or use it)
> If anybody has successfully managed to do this, I'd love to hear from you. If
> others have suggestions, I'm all ears (figuratively speaking)
>
> ...Paul
>
> ------------------------------------------------------------------------
> package ca.passport.ContentManager.Test;
>
> import junit.framework.TestCase;
> import junit.framework.TestSuite;
> import junit.framework.Test;
> import java.io.*;
> import java.lang.*;
> import java.util.*;
> import java.sql.*;
> import javax.sql.*;
> import javax.naming.*;
> import javax.naming.Context;
> import javax.naming.InitialContext;
> import javax.sql.DataSource;
>
> /**
> * This is the DBConnect Testing Class. It uses JUnit3.7 to test
> * out the DB connections through a JNDI resource
> *
> * @author J. Paul Landolt
> * @company Passport New Media
> * @version $Id:$
> */
> public class TestDBConnect extends TestCase {
> // private final static boolean DEBUG = false; // output debug messages to System.err?
> private final static boolean DEBUG = true; // output debug messages to System.err?
>
> static String dsTest = null;
>
> public TestDBConnect(String s) {
> super(s);
> }
>
> public void setUp() {
> }
>
> public void tearDown() {
> }
>
> /**
> * Starts the application.
> *
> * @param args 'text' will optionally use a text-based test rather than graphical
> *
> */
> public static void main(java.lang.String[] args) {
> // Graphic or text UI
> if ((args.length > 0) && (args[0].equals("gui"))) {
> System.out.println("Testing with GUI");
> junit.awtui.TestRunner.main(new String[] { TestDBConnect.class.getName() ,"-noloading"});
> }
> else {
> System.out.println("Testing with Text UI");
> junit.textui.TestRunner.main(new String[] { TestDBConnect.class.getName() });
> }
> }
>
> public static Test suite() {
> // Get test Datasource from properties list
> dsTest = System.getProperty("test.datasource");
>
> TestSuite suite = new TestSuite(TestDBConnect.class);
> return suite;
> }
>
> /**
> * Blank Test. Exercises/Tests the test suite
> *
> * This test should be in all test classes written. It should
> * be run before any other code is added in order to verify
> * it's correct operation.
> */
> public static void testNothing() {
> System.out.println("testNothing()");
> }
>
> /**
> * Tests the insertion of an element
> */
> public static void testDBConnectForRetrieve() {
> System.out.println("testDBConnectForRetrieve()");
>
> assertNotNull("test.datasource property undefined. Cannot connect to datasource without it", dsTest);
>
> if (DEBUG) {
> System.out.println("using datasource - " + dsTest);
> }
>
> // System.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
> System.setProperty("java.naming.provider.url", "127.0.0.1");
> System.setProperty("datasource.jndi", dsTest);
>
> Connection conn = null;
> PreparedStatement ps = null;
> ResultSet rs = null;
>
> try {
> conn = null;
> ps = null;
> rs = null;
>
> InitialContext ctx = new InitialContext();
> DataSource ds = (DataSource)ctx.lookup("java:comp/env/db/pgDevInt");
> conn = ds.getConnection();
> ps = conn.prepareStatement("select username from login");
> rs = ps.executeQuery();
>
> String userName = null;
> while (rs.next()) {
> if (DEBUG) {
> userName = rs.getString("username");
> if (userName != null) {
> System.out.println("username retrieved is: " + userName);
> }
> else {
> System.out.println("NULL username retrieved");
> }
> }
> }
> } catch (java.sql.SQLException e) {
> System.out.println("SQLException: e= " + e);
> fail("SQL Exception raised during test");
> } catch (javax.naming.NamingException e) {
> System.out.println("NamingException: e= " + e);
> fail("NamingException raised during test");
> } catch (Exception e) {
> System.out.println("Exception: e= " + e);
> fail("Exception raised during test");
> } finally {
> if (rs != null) {
> try { rs.close(); } catch( java.sql.SQLException e) {};
> }
> if (ps != null) {
> try { ps.close(); } catch( java.sql.SQLException e) {};
> }
> if (conn != null) {
> try { conn.close(); } catch( java.sql.SQLException e) {};
> }
> }
> }
> }
>
> ------------------------------------------------------------------------
> --
> To unsubscribe, e-mail: <ma...@jakarta.apache.org>
> For additional commands, e-mail: <ma...@jakarta.apache.org>
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>