|
From: <jue...@we...> - 2003-04-17 15:40:58
|
Yep, Apache License. It's mentioned on the project page: http://sourceforge.net/projects/springframework BTW, we still need to apply appropriate and consistent source headers. Juergen -----Original Message----- From: William G. Thompson, Jr. [mailto:wg...@rc...] Sent: Thursday, April 17, 2003 4:37 PM To: Isabelle Muszynski Cc: Kopylenko, Dmitry; spr...@li... Subject: Re: FW: Fw: [Springframework-developer] insert functionality in jdbc package Did we settle on a license for the poject? LGPL? Isabelle Muszynski wrote: > Hi Dmitry, >=20 > Can you "donate" this code to spring? The only thing I'd change is to = return a long instead of an int. Seems silly to have to redo basically = the same thing.=20 > I could then provide an implementation something for mySQL. >=20 > If the answer is yes, please email me the code, so that I don't have = to retype everything. > I'd also move it to the jdbc spring package. >=20 > Isabelle >=20 > On Wed, Apr 16, 2003 at 12:19:48PM -0400, Kopylenko, Dmitry wrote: >=20 >> >>-----Original Message----- >>From: Rod Johnson [mailto:rod...@in...]=20 >>Sent: Wednesday, April 16, 2003 11:57 AM >>To: Kopylenko, Dmitry >>Subject: Re: Fw: [Springframework-developer] insert functionality in >>jdbc package >> >> >>Dmitry, >> >>I think you sent this only to me, not the list (the reply-to thing = gets me >>often, too). >> >>Regards, >>Rod >> >>----- Original Message ----- >>From: "Kopylenko, Dmitry" <dko...@su...> >>To: "'Rod Johnson'" <rod...@in...> >>Sent: Wednesday, April 16, 2003 2:29 PM >>Subject: RE: Fw: [Springframework-developer] insert functionality in = jdbc >>package >> >> >> >>>Rod, >>> >>>here is what I've implemented for the purpose of generating key = values for >>>our projects here at Rutgers. It's simple, but it works (We're are an >> >>Oracle >> >>>shop). >>> >>>1) Here is the main abstraction: >>> >>>package edu.rutgers.acs.commons.helpers.dao; >>> >>>import com.interface21.dao.DataAccessException; >>> >>>/** >>> * Interface that defines contract of incrementing >>> * any data store field's maximum value. Works much like >>> * sequence number generator. Typical implementations could use >>> * RDBMS SQL and/or Stored Procedures to do the job. >>> * @author Dmitriy Kopylenko >>> * @version $Id: DataFieldMaxValueIncrementer.java,v 1.1 2003/02/28 >> >>16:32:44 >> >>>dkopylen Exp $ >>> */ >>>public interface DataFieldMaxValueIncrementer { >>> >>>/** >>>* Increments data store field's max value as int >>>* @return int next data store value such as <b>max + 1</b> >>>* @throws DataAccessException >>>*/ >>>public int nextIntValue() throws DataAccessException; >>> >>>/** >>>* Increments data store field's max value as String >>>* @return String next data store value such as <b>max + 1</b> >>>* @throws DataAccessException >>>*/ >>>public String nextStringValue() throws DataAccessException; >>> >>>} >>> >>>2) Abstract implementation: >>> >>>package edu.rutgers.acs.commons.helpers.dao; >>> >>>import com.interface21.dao.DataAccessException; >>> >>>/** >>> * Implementation of {@link DataFieldMaxValueIncrementer} >>> * Uses <b>Template Method</b> design pattern. >>> * Subclasses should provide implementations of protected abstract >> >>methods. >> >>> * @author Dmitriy Kopylenko >>> * @version $Id: AbstractDataFieldMaxValueIncrementer.java,v 1.4 >> >>2003/03/05 >> >>>13:44:10 dkopylen Exp $ >>> */ >>>public abstract class AbstractDataFieldMaxValueIncrementer implements >>>DataFieldMaxValueIncrementer { >>> >>>/** >>>* Template method >>>* @see >>> >> >>edu.rutgers.acs.commons.helpers.dao.DataFieldMaxValueIncrementer#nextIn= tValu >> >>>e() >>>*/ >>>public final int nextIntValue() throws DataAccessException { >>>return incrementIntValue(); >>>} >>> >>>/** >>>* Template method >>>* @see >>> >> >>edu.rutgers.acs.commons.helpers.dao.DataFieldMaxValueIncrementer#nextSt= ringV >> >>>alue() >>>*/ >>>public final String nextStringValue() throws DataAccessException { >>>return incrementStringValue(); >>>} >>> >>>/** >>>* Subclasses should provide implementation >>>* @return int >>>*/ >>>protected abstract int incrementIntValue(); >>> >>>/** >>>* Subclasses should provide implementation. >>>* @return String >>>*/ >>>protected abstract String incrementStringValue(); >>>} >>> >>>3) Oracle sequence [generic] implementation. It is a JavaBean and it = is >>>usually set as a property on the object that >>>requires it through the bean factory: >>> >>>package edu.rutgers.acs.commons.helpers.dao; >>> >>>import javax.sql.DataSource; >>> >>>import com.interface21.beans.factory.InitializingBean; >>>import com.interface21.jdbc.core.DataSourceUtils; >>>import com.interface21.jdbc.object.SqlFunction; >>> >>>/** >>> * Class to inceremnet maximum value of a given Oracle SEQUENCE >>> * @author Dmitriy Kopylenko >>> * @version $Id: OracleSequenceMaxValueIncrementer.java,v 1.3 = 2003/04/04 >>>18:15:17 dkopylen Exp $ >>> */ >>>public class OracleSequenceMaxValueIncrementer >>>extends AbstractDataFieldMaxValueIncrementer >>>implements InitializingBean { >>> >>>//----------------------------------------------------------------- >>>// Instance data >>>//----------------------------------------------------------------- >>>private DataSource ds; >>> >>>private String dsName; >>> >>>private String sequenceName; >>> >>>private boolean prefixWithZero; >>> >>>private NextMaxValueProvider nextMaxValueProvider; >>> >>>//----------------------------------------------------------------- >>>// Constructors >>>//----------------------------------------------------------------- >>>public OracleSequenceMaxValueIncrementer() { >>>this.nextMaxValueProvider =3D new NextMaxValueProvider(); >>>} >>> >>>/** >>>* @see >>> >> >>edu.rutgers.acs.commons.helpers.dao.AbstractDataFieldMaxValueIncremente= r#inc >> >>>rementIntValue() >>>*/ >>>protected int incrementIntValue() { >>>return nextMaxValueProvider.getNextIntValue(); >>>} >>> >>>/** >>>* @see >>> >> >>edu.rutgers.acs.commons.helpers.dao.AbstractDataFieldMaxValueIncremente= r#inc >> >>>rementStringValue() >>>*/ >>>protected String incrementStringValue() { >>>return nextMaxValueProvider.getNextStringValue(); >>>} >>> >>>// Private class that does the actual >>>// job of getting the sequence.nextVal value >>>private class NextMaxValueProvider { >>> >>>public String getNextStringValue() { >>>String s =3D new Integer(nextIntValue()).toString(); >>> >>>if (s.length() =3D=3D 1) { >>>if (prefixWithZero) >>>return "0" + s; >>>} >>> >>>return s; >>>} >>> >>>public int getNextIntValue() { >>>SqlFunction sqlf =3D new SqlFunction(ds, "SELECT " + >>>sequenceName + ".NEXTVAL FROM DUAL"); >>>sqlf.compile(); >>>return sqlf.run(); >>>} >>>} >>> >>>/** >>>* Sets the dsName. >>>* @param dsName The dsName to set >>>*/ >>>public void setDsName(String dsName) { >>>this.dsName =3D dsName; >>>} >>> >>>/** >>>* @see >>>com.interface21.beans.factory.InitializingBean#afterPropertiesSet() >>>*/ >>>public void afterPropertiesSet() throws Exception { >>>if (dsName =3D=3D null || sequenceName =3D=3D null) >>>throw new Exception("dsName, sequenceName properties >>>must be set on " + getClass().getName()); >>> >>>this.ds =3D DataSourceUtils.getDataSourceFromJndi(dsName); >>>} >>> >>>/** >>>* Sets the prefixWithZero. >>>* @param prefixWithZero The prefixWithZero to set >>>*/ >>>public void setPrefixWithZero(boolean prefixWithZero) { >>>this.prefixWithZero =3D prefixWithZero; >>>} >>> >>>/** >>>* Sets the sequenceName. >>>* @param sequenceName The sequenceName to set >>>*/ >>>public void setSequenceName(String sequenceName) { >>>this.sequenceName =3D sequenceName; >>>} >>>} >>> >>>I guess that there could be different implementations for different = DBMS >>>platforms. >>> >>>Regards, >>> >>>Dmitriy. >>> >>>-----Original Message----- >>>From: Rod Johnson [mailto:rod...@in...] >>>Sent: Wednesday, April 16, 2003 09:11 AM >>>To: Isabelle Muszynski; = spr...@li... >>>Subject: Re: Fw: [Springframework-developer] insert functionality in >>>jdbc package >>> >>> >>>Isabelle, >>> >>>You make a valid point about not wanting to need another product for = just >>>one problem. >>> >>>My view is that >>>- we don't want to get into full-blown O/R mapping >>>- BUT there is scope in building more JDBC-based functionality and >>>abstractions on top of the Spring JDBC way of doing things. To my = mind the >>>central value proposition of Spring JDBC is the exception hierarchy = and >> >>way >> >>>it frees developers of the tedious and error-prone tasks of raw JDBC. >>>Additional features can validly be layered on top. >>> >>>So I think you should propose how you think we should add the insert >>>functionality, perhaps even implement it, so we can discuss it and >>>incorporate it if we're all comfortable with it. I think it's >>>- important that any abstraction shouldn't impose potential = inefficiency, >>>and should allow the use of efficient RDBMS functions like Oracle >> >>sequences >> >>>- important that it should be compatible with JDBC 3.0 moving = forward. >>> >>>Thomas, do you have any thoughts on this? >>> >>>Regards, >>>Rod >>> >>> >>>>Personally, I don't think I'd want to commit to yet another = framework >> >>such >> >>>as hibernate for ex. in the project at work we're planning to do with >>>spring. Most of what we need for jdbc is in spring, except for the = insert >>>functionality. Even with oracle, I don't like the idea of having to = write >> >>a >> >>>stored procedure for every single insert, I'd probably opt for the >>>additional cost of a select next_val from dual in jdbc code (i.e. = instead >> >>of >> >>>just doing an insert, first retrieve the key val then do the insert). = The >>>main problem is with db's that don't have sequences, and if we agree = to >> >>live >> >>>with holes in the primary key sequences we can implement an algorithm >> >>where >> >>>some sort of key manager per VM reserves a range of key values per = table. >>> >>>>Isabelle >>> ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Springframework-developer mailing list Spr...@li... https://lists.sourceforge.net/lists/listinfo/springframework-developer |