ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jose Alberto Fernandez" <jalbe...@cellectivity.com>
Subject RE: proposed patch to ANT SQL task
Date Tue, 21 Jan 2003 20:20:39 GMT
Hi, if I remember correctly someone posted a <connection> datatype so that one could
define
all the parameters for you <sql> tasks in one place and then refid them to the <sql>
task.
 
It seem to me this would be the ideal place to put this additional parameter definitions instead
of
overflowing the <sql> task with more elements.
 
Just a thought.
 
Jose Alberto

	-----Original Message----- 
	From: Paul King [mailto:king@asert.com.au] 
	Sent: Tue 1/21/2003 8:17 AM 
	To: ant-dev@jakarta.apache.org 
	Cc: 
	Subject: proposed patch to ANT SQL task
	
	


	Hi, I needed to pass properties in to a type-3 JDBC driver
	(WebLogic's RMI driver) in a SQL task.  Perhaps I missed
	how this could be done using existing functionality.
	
	I also removed the need to have userid and password specified.
	The JDBC spec doesn't require them and some database drivers
	such as cloudscape don't need them.  Net result is that
	I can now have databases which don't support user/pw fields
	(without dummy entries):
	
	    <target name="test_db_init">
	      <sql driver="COM.cloudscape.core.JDBCDriver"
	           url="jdbc:cloudscape:${base.dir}/database"
	           onerror="continue"
	           autocommit="true"
	      >
	      DELETE from NAMEAUDIT where NAME='xyzzy';
	      </sql>
	    </target>
	
	And I can support properties:
	
	    <target name="test_db_init2">
	      <sql driver="weblogic.jdbc.rmi.Driver"
	           url="jdbc:weblogic:rmi"
	
	properties="weblogic.server.url=t3://localhost:7001;weblogic.jdbc.datasource=Testing-ageapp-AgeDS"
	           onerror="continue"
	           autocommit="true"
	      >
	      DELETE from NAMEAUDIT where NAME='xyzzy';
	      </sql>
	    </target>
	
	Obviously you can place the username and password fields into the
	properties field directly if you want or still use the old style
	separate elements.
	
	I haven't checked that my code meets any style guidelines at this point
	or checked if it breaks any existing tests - just wanted some feedback
	first.
	
	I am new to this project and am not a commiter so let me know what I
	need to do now.
	
	I also wanted to support datasources directly so that I could have
	something like:
	
	    <target name="test_db_init3">
	      <sql contextFactory="weblogic.jndi.WLInitialContextFactory"
	           url="t3://localhost:7001"
	           datasource="Testing-ageapp-AgeDS"
	           onerror="continue"
	           autocommit="true"
	      >
	      DELETE from NAMEAUDIT where NAME='xyzzy';
	      </sql>
	    </target>
	
	This would let me support the latest best practice of using
	datasources which would allow me to write more portable ant
	scripts across different app servers but I wasn't sure how to get
	the JNDI code to support the SQL's optional classpath element
	so I wimped out.
	
	
	Regards, Paul.
	
	-------->8----------
	*** JDBCTask.java.orig  Wed Oct  2 11:09:20 2002
	--- JDBCTask.java       Tue Jan 21 15:47:18 2003
	***************
	*** 67,72 ****
	--- 67,73 ----
	   import java.sql.SQLException;
	   import java.util.Hashtable;
	   import java.util.Properties;
	+ import java.util.StringTokenizer;
	
	   /**
	    * Handles JDBC configuration needed by SQL type tasks.
	***************
	*** 171,177 ****
	        */
	       private String password = null;
	
	!     /**
	        * RDBMS Product needed for this SQL.
	        **/
	       private String rdbms = null;
	--- 172,183 ----
	        */
	       private String password = null;
	
	!       /**
	!        * Properties
	!        */
	!       private String properties = null;
	!
	!       /**
	        * RDBMS Product needed for this SQL.
	        **/
	       private String rdbms = null;
	***************
	*** 233,252 ****
	           this.url = url;
	       }
	
	!     /**
	!      * Sets the password; required.
	        * @param password The password to set
	        */
	!     public void setPassword(String password) {
	           this.password = password;
	       }
	
	!     /**
	        * Auto commit flag for database connection;
	        * optional, default false.
	        * @param autocommit The autocommit to set
	        */
	!     public void setAutocommit(boolean autocommit) {
	           this.autocommit = autocommit;
	       }
	
	--- 239,280 ----
	           this.url = url;
	       }
	
	!       /**
	!        * Set the user name for the connection;
	!        * optional, but some RDBMSs will require it.
	!        * @param userId The userId to set
	!        */
	!       public void setUserid(String userId)
	!       {
	!               this.userId = userId;
	!       }
	!
	!       /**
	!      * Sets the password;
	!        * optional, but some RDBMSs will require it.
	        * @param password The password to set
	        */
	!     public void setPassword(String password)
	!       {
	           this.password = password;
	       }
	
	!       /**
	!        * Sets the properties; optional.
	!        * @param properties The properties to set
	!        */
	!       public void setProperties(String properties)
	!       {
	!               this.properties = properties;
	!       }
	!
	!       /**
	        * Auto commit flag for database connection;
	        * optional, default false.
	        * @param autocommit The autocommit to set
	        */
	!     public void setAutocommit(boolean autocommit)
	!       {
	           this.autocommit = autocommit;
	       }
	
	***************
	*** 317,345 ****
	           return loader;
	       }
	
	!     /**
	        * Creates a new Connection as using the driver, url, userid and
	password specified.
	        * The calling method is responsible for closing the connection.
	        * @return Connection the newly created connection.
	        * @throws BuildException if the UserId/Password/Url is not set
	or there is no suitable driver or the driver fails to load.
	        */
	!     protected Connection getConnection() throws BuildException {
	!         if (userId == null) {
	!             throw new BuildException("User Id attribute must be set!",
	location);
	!         }
	!         if (password == null) {
	!             throw new BuildException("Password attribute must be
	set!", location);
	!         }
	           if (url == null) {
	               throw new BuildException("Url attribute must be set!",
	location);
	           }
	           try {
	
	               log("connecting to " + getUrl(), Project.MSG_VERBOSE);
	!             Properties info = new Properties();
	!             info.put("user", getUserId());
	!             info.put("password", getPassword());
	!             Connection conn = getDriver().connect(getUrl(), info);
	
	               if (conn == null) {
	                   // Driver doesn't understand the URL
	--- 345,391 ----
	           return loader;
	       }
	
	!       /**
	!        * Creates a new Properties data structure from userid, password and
	specified properties.
	!        * @return Properties the newly merged properties.
	!        * @throws BuildException if the properties string is malformed.
	!        */
	!       protected Propterties getAllProperties() throws BuildException
	!       {
	!               Properties info = new Properties();
	!               if (userId != null) info.put("user", getUserId());
	!               if (password != null) info.put("password", getPassword());
	!               if (properties != null)
	!               {
	!                       StringTokenizer st = new StringTokenizer(getProperties(), ";");
	!                       while (st.hasMoreTokens())
	!                       {
	!                               String token = st.nextToken();
	!                               int keyEnd = token.indexOf('=');
	!                               if (keyEnd < 0 || keyEnd == token.length()-1)
	!                                       throw new BuildException("Malformed Property!", location);
	!                               info.put(token.substring(0,keyEnd),token.substring(keyEnd+1));
	!                       }
	!               }
	!               return info;
	!       }
	!
	!       /**
	        * Creates a new Connection as using the driver, url, userid and
	password specified.
	        * The calling method is responsible for closing the connection.
	        * @return Connection the newly created connection.
	        * @throws BuildException if the UserId/Password/Url is not set
	or there is no suitable driver or the driver fails to load.
	        */
	!     protected Connection getConnection() throws BuildException
	!       {
	           if (url == null) {
	               throw new BuildException("Url attribute must be set!",
	location);
	           }
	           try {
	
	+                       Connection conn=null;
	               log("connecting to " + getUrl(), Project.MSG_VERBOSE);
	!                       conn = getDriver().connect(getUrl(), getAllProperties());
	
	               if (conn == null) {
	                   // Driver doesn't understand the URL
	***************
	*** 453,466 ****
	       }
	
	       /**
	-      * Set the user name for the connection; required.
	-      * @param userId The userId to set
	-      */
	-     public void setUserid(String userId) {
	-         this.userId = userId;
	-     }
	-
	-     /**
	        * Gets the password.
	        * @return Returns a String
	        */
	--- 499,504 ----
	***************
	*** 468,478 ****
	           return password;
	       }
	
	!     /**
	        * Gets the rdbms.
	        * @return Returns a String
	        */
	!     public String getRdbms() {
	           return rdbms;
	       }
	
	--- 506,526 ----
	           return password;
	       }
	
	!       /**
	!        * Gets the properties.
	!        * @return Returns a String
	!        */
	!       public String getProperties()
	!       {
	!               return properties;
	!       }
	!
	!       /**
	        * Gets the rdbms.
	        * @return Returns a String
	        */
	!     public String getRdbms()
	!       {
	           return rdbms;
	       }
	
	-------->8----------
	
	
	--
	To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
	For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>
	
	

Mime
View raw message