Re: JNDI Datasource
Dear Kirk Wylie, Thanks for your reply, here is the tomcat's server.xml file pls. find it, Regards, viru --server.xml - factory org.apache.commons.dbcp.BasicDataSourceFactory maxActive 100 maxWait 1 password suiwah url jdbc:mysql://191.100.10.248:3306/db_slcs?autoReconnect=true driverClassName org.gjt.mm.mysql.Driver maxIdle 30 username admin user admin password suiwah driverClassName org.gjt.mm.mysql.Driver driverName jdbc:mysql://191.100.10.248:3306/db_slcs - - Original Message - From: "Kirk Wylie" <[EMAIL PROTECTED]> To: "Struts Users Mailing List" <[EMAIL PROTECTED]> Sent: Friday, October 17, 2003 2:31 AM Subject: Re: JNDI Datasource > This actually looks like a Tomcat problem, not a Struts problem, but if > you post your server.xml file it might help debug the problem. > > Kirk Wylie > M7 Corporation > > virupaksha wrote: > > > Dear All, > > > > I am facing following error, when i am trying to connect jndi data source. > > > > error is "Cannot load JDBC driver class 'null'". > > > > here i am using Mysql database, i have copied mysql driver jar files into > > struts application's lib folder , tomcat's common/lib and shared/lib > > folder and Jndi datasource is configured in server.config,, > > > > can any one pls. help me to correct my mistake.. > > > > Regards, > > viru > > > > > > - > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: JNDI Datasource
Kirk Wylie You can copy the JDBC driver *.jar to $TOMCAT_HOME/common/lib or make the CLASSPATH. Welkin --- Kirk Wylie <[EMAIL PROTECTED]> wrote: > This actually looks like a Tomcat problem, not a > Struts problem, but if > you post your server.xml file it might help debug > the problem. > > Kirk Wylie > M7 Corporation > > virupaksha wrote: > > > Dear All, > > > > I am facing following error, when i am trying to > connect jndi data source. > > > > error is "Cannot load JDBC driver class 'null'". > > > > here i am using Mysql database, i have copied > mysql driver jar files into > > struts application's lib folder , tomcat's > common/lib and shared/lib > > folder and Jndi datasource is configured in > server.config,, > > > > can any one pls. help me to correct my mistake.. > > > > Regards, > > viru > > > > > > - > To unsubscribe, e-mail: > [EMAIL PROTECTED] > For additional commands, e-mail: > [EMAIL PROTECTED] > __ Do you Yahoo!? The New Yahoo! Shopping - with improved product search http://shopping.yahoo.com - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: JNDI Datasource
This actually looks like a Tomcat problem, not a Struts problem, but if you post your server.xml file it might help debug the problem. Kirk Wylie M7 Corporation virupaksha wrote: Dear All, I am facing following error, when i am trying to connect jndi data source. error is "Cannot load JDBC driver class 'null'". here i am using Mysql database, i have copied mysql driver jar files into struts application's lib folder , tomcat's common/lib and shared/lib folder and Jndi datasource is configured in server.config,, can any one pls. help me to correct my mistake.. Regards, viru - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
JNDI Datasource
Dear All, I am facing following error, when i am trying to connect jndi data source. error is "Cannot load JDBC driver class 'null'". here i am using Mysql database, i have copied mysql driver jar files into struts application's lib folder , tomcat's common/lib and shared/lib folder and Jndi datasource is configured in server.config,, can any one pls. help me to correct my mistake.. Regards, viru
Re: R: [OT] JNDI datasource lookup to test classes
Alternatively, If you are worried about test code in production, you could extend from ConnectionHandlerFactory with a TestConnectionHandlerFactor and override the getConnectionHandler() method to return the connectionHandler for testing. James James CE Johnson wrote: The most common solution to this problem is using a Factory Method to return the correct implementation of the interface. Your classes should never know which implementation is in use because they will all ask the Factory Method for the object. You just need to change the one line in the method to return a different object for testing. Ok, you mean something like that: Class ConnectionHandlerFactory ... public IConnectonHandler getConnectonHandler() { if (test) return new ConnectionHandlerTest(); else return new ConnectionHandlerForTomcat(); } but I think this has 2 problems: 1) in my production code I'll have code that is written just for testing purpose 2) Before executing any test I have to set the "test" variable to true. Or I did not understand? That's the gist of it. We've solved it thusly: if (Boolean.getBoolean("use.test.objects")) { try { return = (IConnectonHandler) Class.forName( "path.to.ConnectionHandlerTest").newInstance(); } catch (Exception e) { log.fatal("Unable to create Test object.", e); throw new RuntimeException(e); } } else { return = new ConnectionHandlerForTomcat(); } So when we're executing our tests we set the property use.test.objects=true. It uses Class.forName() to create the object instance so that it doesn't have to know about the test object at compile time or production runtime. We also keep our testcase source in a separate, though parallel, tree in the filesystem. That lets us easily build a production jarfile that doesn't include any of the testcase classes. (If you need to reach me please email directly as I don't always manage to keep up with the mailing list.) Later, J - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: R: [OT] JNDI datasource lookup to test classes
> > > The most common solution to this problem is using a Factory Method to > > return the correct implementation of the interface. Your classes should > > never know which implementation is in use because they will all ask the > > Factory Method for the object. You just need to change the one line in > > the method to return a different object for testing. > > Ok, you mean something like that: > > Class ConnectionHandlerFactory > ... > > public IConnectonHandler getConnectonHandler() > { > if (test) > return new ConnectionHandlerTest(); > > else > return new ConnectionHandlerForTomcat(); > > > } > > but I think this has 2 problems: > > 1) in my production code I'll have code that is written just for testing > purpose > 2) Before executing any test I have to set the "test" variable to true. > > > Or I did not understand? > That's the gist of it. We've solved it thusly: if (Boolean.getBoolean("use.test.objects")) { try { return = (IConnectonHandler) Class.forName( "path.to.ConnectionHandlerTest").newInstance(); } catch (Exception e) { log.fatal("Unable to create Test object.", e); throw new RuntimeException(e); } } else { return = new ConnectionHandlerForTomcat(); } So when we're executing our tests we set the property use.test.objects=true. It uses Class.forName() to create the object instance so that it doesn't have to know about the test object at compile time or production runtime. We also keep our testcase source in a separate, though parallel, tree in the filesystem. That lets us easily build a production jarfile that doesn't include any of the testcase classes. (If you need to reach me please email directly as I don't always manage to keep up with the mailing list.) Later, J - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
R: [OT] JNDI datasource lookup to test classes
> The most common solution to this problem is using a Factory Method to > return the correct implementation of the interface. Your classes should > never know which implementation is in use because they will all ask the > Factory Method for the object. You just need to change the one line in > the method to return a different object for testing. Ok, you mean something like that: Class ConnectionHandlerFactory ... public IConnectonHandler getConnectonHandler() { if (test) return new ConnectionHandlerTest(); else return new ConnectionHandlerForTomcat(); } but I think this has 2 problems: 1) in my production code I'll have code that is written just for testing purpose 2) Before executing any test I have to set the "test" variable to true. Or I did not understand? - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [OT] JNDI datasource lookup to test classes
On 08/22/2003 04:43 PM Leonardo Francalanci wrote: I read the JNDI tutorial, but is the worse thing I've ever read. You've obviously never read any of my poetry. -- struts 1.1 + tomcat 4.1.27 + java 1.4.2 Linux 2.4.20 RH9 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [OT] JNDI datasource lookup to test classes
--- Leonardo Francalanci <[EMAIL PROTECTED]> 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. The most common solution to this problem is using a Factory Method to return the correct implementation of the interface. Your classes should never know which implementation is in use because they will all ask the Factory Method for the object. You just need to change the one line in the method to return a different object for testing. David > > > > - > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > __ Do you Yahoo!? Yahoo! SiteBuilder - Free, easy-to-use web site design software http://sitebuilder.yahoo.com - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [OT] JNDI datasource lookup to test classes
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")
[OT] JNDI datasource lookup to test classes
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]