ofbiz-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Deyan Tsvetanov <deyan_of...@flexbrix.com>
Subject Re: Entity Engine: GenericDuplicateKeyException
Date Mon, 19 Jul 2010 15:43:02 GMT
ok , 

thanks :)

On Mon, 2010-07-19 at 08:27 -0700, Adrian Crum wrote:
> Then create a Jira issue and attach a patch.
> 
> We might need to support both specs by having them specified in the 
> entitytengine datasource element.
> 
> -Adrian
> 
> On 7/19/2010 8:19 AM, Deyan Tsvetanov wrote:
> > Right,
> >
> > before that we had to use the sql state to check the type of the
> > SQLException.
> >
> > Still sql state has 2 specs - xopen and sql2003 identifying the type of
> > the error. Entity Engine should support that level of abstraction and
> > throw the DuplicateKeyException.
> >
> > I am willing to implement it because I actually need it :)
> >
> >
> > -- deyan
> >
> > On Mon, 2010-07-19 at 06:46 -0700, Adrian Crum wrote:
> >> PreparedStatement.execute throws SQLException:
> >>
> >> http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/sql/PreparedStatement.html#execute()
> >>
> >> If a database vendor chooses to add meaning to that exception by using a subclass
of SQLException, then they are welcome to do so - but they are not *required* to do so.
> >>
> >> SQLIntegrityConstraintViolationException was added in Java 6. Any JDBC drivers
written before Java 6 will not use it.
> >>
> >> -Adrian
> >>
> >> --- On Mon, 7/19/10, Deyan Tsvetanov<deyan_ofbiz@flexbrix.com>  wrote:
> >>
> >>> From: Deyan Tsvetanov<deyan_ofbiz@flexbrix.com>
> >>> Subject: Re: Entity Engine: GenericDuplicateKeyException
> >>> To: user@ofbiz.apache.org
> >>> Date: Monday, July 19, 2010, 6:22 AM
> >>> The benefit here would be that
> >>> developers will not have to invoke
> >>> delegator.findOne() to check if a record with the same ID
> >>> exists before
> >>> trying create a new one. Saves one database call,
> >>> postresql, mysql,
> >>> oracle and mssql support it. If other databases or drivers
> >>> do not than
> >>> their drivers should not be labeled as JDBC compatible :)
> >>>
> >>> Anyway if the code bellow will catch the SQLException and
> >>> re-throw
> >>> GenericEntityException if the current DB driver is buggy
> >>> and does not
> >>> throw SQLIntegrityConstraintViolationException.
> >>>
> >>> -- Deyan
> >>>
> >>> On Mon, 2010-07-19 at 06:15 -0700, Adrian Crum wrote:
> >>>> I agree that better mapping of SQL exception causes
> >>> would be helpful in debugging and it could help in certain
> >>> algorithms. For example, testing for a primary key violation
> >>> could be used as an alternate way to get the next invoice
> >>> number.
> >>>>
> >>>> The problem with using
> >>> SQLIntegrityConstraintViolationException is that not all
> >>> JDBC drivers will support it, so it might not get caught.
> >>>>
> >>>> -Adrian
> >>>>
> >>>> --- On Mon, 7/19/10, Deyan Tsvetanov<deyan_ofbiz@flexbrix.com>
> >>> wrote:
> >>>>
> >>>>> From: Deyan Tsvetanov<deyan_ofbiz@flexbrix.com>
> >>>>> Subject: Entity Engine:
> >>> GenericDuplicateKeyException
> >>>>> To: user@ofbiz.apache.org
> >>>>> Date: Monday, July 19, 2010, 5:43 AM
> >>>>>
> >>>>> Hi guys,
> >>>>>
> >>>>> there is a problem in entity engine which I would
> >>> like to
> >>>>> fix.
> >>>>>
> >>>>> Reproduction:
> >>>>>
> >>>>> I am trying to create a party with a duplicate
> >>> partyId.
> >>>>>
> >>>>> In general I thought I have to expect a
> >>>>> GenericDuplicateKeyException.
> >>>>>
> >>>>> However the exception that I get is a regular
> >>>>> GenericEntityException
> >>>>> with a nested GenericDateSourceException one with
> >>> nested
> >>>>> PSQLException
> >>>>> inside. The exception  message is: ERROR:
> >>> duplicate
> >>>>> key value violates
> >>>>> unique constraint "pk_party"
> >>>>>
> >>>>> I believe it should be expected that a
> >>>>> GenericDuplicateKeyException will be thrown in
> >>> case of a
> >>>>> duplicate
> >>>>> primary key.
> >>>>>
> >>>>>
> >>>>>
> >>>>> The solution for that would be to handle not
> >>> only
> >>>>> SQLException in
> >>> org.ofbiz.entity.jdbc.SQLProcessor
> >>>>> but it's subclasses as well and throw the
> >>> corresponding
> >>>>> entity engine exceptions.
> >>>>>
> >>>>> So the code:
> >>>>>
> >>>>> } catch (SQLException sqle) {
> >>>>>             throw
> >>> new
> >>>>> GenericDataSourceException("SQL Exception while
> >>> executing
> >>>>> the following:" + sql, sqle);
> >>>>> }
> >>>>>
> >>>>> would be changed to :
> >>>>>
> >>>>>
> >>>>> } catch (
> >>> SQLIntegrityConstraintViolationException icvEx )
> >>>>> {
> >>>>>     throw new
> >>> GenericDuplicateKeyException(
> >>>>> "Duplicate key exception while executing the
> >>> following: " +
> >>>>> sql , icvEx );
> >>>>> } catch (SQLException sqle) {
> >>>>>             throw
> >>> new
> >>>>> GenericDataSourceException("SQL Exception while
> >>> executing
> >>>>> the following:" + sql, sqle);
> >>>>> }
> >>>>>
> >>>>> on all occurances of catching a SQLException
> >>> where insert
> >>>>> or update is executed.
> >>>>>
> >>>>> -- deyan
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>
> >>
> >>
> >
> >
> >



Mime
View raw message