cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Konovalov <oleg...@yahoo.com>
Subject Re: Handling SQL Transformer exceptions
Date Mon, 27 Mar 2006 23:16:42 GMT
Warrell,

So what you are saying is that I can not do SQL exception (or error) handling inside that
SQL transformer
and have to do it from outside (and after the transformer itself).
That is a pity, because in the same sql transformer file I have lots of column validations
which call it to show user errors, so it would be very convenient.

OK, so here is my new transformer. Please tell me if it looks OK to you.
Have inserted it right after SQL Trasformer [before presentation screen.]
Still doesn't work.
<?xml version='1.0' encoding='UTF-8'?>            <!-- Created to handle SQLExceptions
during DB insert or update -->
<xsl:stylesheet version='1.0'     
        xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
        xmlns:sql="http://apache.org/cocoon/SQL/2.0">

<xsl:output method='xml' indent='yes'/>


<xsl:template match="/">
    <page>        
        <content>
            <xsl:apply-templates/>
        </content>
    </page>
</xsl:template>


<xsl:template match='mainTemplate'>
    <xsl:if test="count(//sql:error[1]) > 0">  <!-- Do SQLExceptions check -->
        <error>        
            <message>ERROR: Can not insert/update the record into the database (not
recorded)</message>            
        </error>        
    </xsl:if>
</xsl:template>

</xsl:stylesheet>

 
Thank you,
Oleg.

----- Original Message ----
From: Warrell.Harries@westsussex.gov.uk
To: users@cocoon.apache.org
Sent: Monday, March 27, 2006 10:19:10 AM
Subject: Re: Handling SQL Transformer exceptions

 
Hi Oleg, 
 
Thanks for clearing that up. Have you put that error-handling code in the stage of the pipeline
that follows the SQL transform? The XML document after your SQLTrnsformer stage will consist
of Error elements so you will have to provide templates for them if you want to handle them.
That is, if the XSL that outputs the <sql:query> elements is in query.xsl then the error
handling should be in process.xsl 
 
        <map:transform src="query.xsl"/> 
        <map:transform type="sql"> 
                <map:parameter name="use-connection" value="db"/> 
        </map:transform> 
        <map:transform src="process.xsl"/> 
 
Of course, you will also provide templates for the <sql:row> elements generated when
there are no errors! 
 
Hope this helps
     Warrell Harries | IT Services, West Sussex County Council | Location: Northleigh House
 Office: +44 (0) 1243-756837 | Email: warrell.harries@westsussex.gov.uk
 
 
 
 
   Oleg Konovalov <olegkon@yahoo.com>  27/03/2006 15:59    Please respond to
 users@cocoon.apache.org
 
 
    To
 users@cocoon.apache.org   cc
    Subject
 Re: Handling SQL Transformer exceptions 
     
 
 
 
Warrell,
 
 >I don't think that you can call this a 'bug in Cocoon'!
 I meant, a bug in my app (DB problem is not shown to the user and not handled, just fails
to insert and let user guess what happened). 
  I use Cocoon 2.0.4, not 2.1. Would it mean any difference for handling SQLTransformer exceptions
? 
  
Thank you,
 Oleg. 

 
 ----- Original Message ----
 From: Warrell.Harries@westsussex.gov.uk
 To: users@cocoon.apache.org
 Sent: Monday, March 27, 2006 8:54:35 AM
 Subject: Re: Handling SQL Transformer exceptions
 
 
 Hi Oleg, 
 
 I don't think that you can call this a 'bug in Cocoon'! Do you really mean a Cocoon 2.0 version
or just generally version 2 of Cocoon? 
 
 It seems you are building a generic DB query tool so I suppose the following is not appropriate
but I would argue that this is not the desired way to use the SQLTransformer since the overall
Application design should prevent any constraints ever being violated. In my view, such Constraints
are fundamental rules that are there to define the parameters of the system and not just as
a last line of defence or for the creation of indexes. However,  to handle such Processing
Exceptions in Cocoon you should take a look at :- 
 
 http://cocoon.apache.org/2.1/userdocs/concepts/errorhandling.html 
 
 if, of course, you are using Cocoon 2.1. 
 
 Hope this helps 
 
 Warrell    Warrell Harries | IT Services, West Sussex County Council | Location: Northleigh
House
 Office: +44 (0) 1243-756837 | Email: warrell.harries@westsussex.gov.uk
 

 
 
    Oleg Konovalov <olegkon@yahoo.com>  27/03/2006 14:26  
    Please respond to
 users@cocoon.apache.org
 
 
 
    To
 cocoon list <users@cocoon.apache.org>    cc
    Subject
 Handling SQL Transformer exceptions 
 
     
 

 
 
 Hi,
 
 I am trying to fix the bug in the Cocoon 2.0 application:
 - it is not handling exceptions from SQLTransformer in the GUI,
 need to show user an error that Insert failed.
 
 Here is an exception we often get:
 ERROR   (2006-03-24) 15:29.31:855   [sitemap.transformer.sql] (/myapp) Thread-11/SQLTransformer$Query:
Caught a SQLException
 java.sql.SQLException: ORA-00001: unique constraint (MBRDEV.UKC_ASSOC_COT) violated
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
 
 Here is a simplified version of my XSL:
 <xsl:template match="/">
    <page>
        <title><xsl:value-of select='$table'/><xsl:text> modification</xsl:text></title>
        <content>
            <xsl:apply-templates/>
        </content>
    </page>
 </xsl:template>
 
 <xsl:template name='doInsert'>
    <xsl:param name='row'/>
    <xsl:param name='table'/>
    
    <sql:execute-query>
        <sql:query>
            <xsl:text>insert into </xsl:text>
            <xsl:value-of select='$table'/>
            .........
        </sql:query>
    </sql:execute-query>
    
    <!-- This is the code I added to handle that exception which is supposed to show it
to the user -->
    <xsl:if test="count(//sql:error[1]) > 0">  
        <xsl:call-template name='buildErrorMessage'>
            <xsl:with-param name='row' select='.'/>
            <xsl:with-param name='message'><xsl:text>ERROR: Can not insert the
row into the database (not recorded)</xsl:text></xsl:with-param>
        </xsl:call-template>            
    </xsl:if>
    
 </xsl:template>
 ....
 
 Am I doing it right and in correct place ("This is the code...") ?
 
 For some reason it doesn't seem to work (maybe that condition is false: "count(//sql:error[1])
> 0"  ?)
 
 
 Sorry for the newbie question. Any help is very appreciated.
 
 
 Thank you in advance,
 Oleg.
 
 
 
 
 ---------------------------------------------------------------------
 To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
 For additional commands, e-mail: users-help@cocoon.apache.org
 
 
 
 
 -- 
 This e-mail and any attachments are confidential and intended solely for the persons addressed.
If it has come to you in error please reply to advise us but you should not read it, copy
it, show it to anyone else nor make any other use of its content.   West Sussex County Council
takes steps to ensure e-mails and attachments are virus-free but you should carry out your
own checks before opening any attachment.  

 -- 
 This e-mail and any attachments are confidential and intended solely for the persons addressed.
If it has come to you in error please reply to advise us but you should not read it, copy
it, show it to anyone else nor make any other use of its content.   West Sussex County Council
takes steps to ensure e-mails and attachments are virus-free but you should carry out your
own checks before opening any attachment. 


Mime
View raw message