Problemas com JSTL sql:transaction

4 respostas
S

Olá , estou usando o postgresql e preciso desabilitar uma trigger para uma determinada operação e após a operação ativar a trigger novamente em uma só transação, estou recebendo o seguinte erro quando tento executar o script abaixo.

Banco de Dados: Postgresql 9.1

Funciona Corretamente o código abaixo:

<c:catch var="e"> 
                
      		                                
		                   <sql:update var="rs_upt_responsible" dataSource="${con}" >
								    UPDATE fails
									   SET classification_id=?, area_id=?, updated_at=NOW()
									 WHERE id = ?;
		                       <sql:param value="${classification_id}"/>
		                       <sql:param value="${area_id}"/>
		                       <sql:param value="${id}"/>
		                   </sql:update>
		                   
		             	                   
                   
                </c:catch>

Não consigo usar a transaction: script abaixo

<c:catch var="e"> 
                
                    <sql:transaction dataSource="${con}">
                
		                   <sql:update var="alter_disabled" dataSource="${con}" >
								    ALTER TABLE fails DISABLE TRIGGER tg_responsible;
		                   </sql:update>  
		                                
		                   <sql:update var="rs_upt_responsible" dataSource="${con}" >
								    UPDATE fails
									   SET classification_id=?, area_id=?, updated_at=NOW()
									 WHERE id = ?;
		                       <sql:param value="${classification_id}"/>
		                       <sql:param value="${area_id}"/>
		                       <sql:param value="${id}"/>
		                   </sql:update>
		                   
		                   <sql:update var="alter_enabled" dataSource="${con}" >
								    ALTER TABLE fails ENABLE TRIGGER tg_responsible;
		                   </sql:update>  		                   
                   
                   </sql:transaction>
                   
                </c:catch>

Alguém pode me ajudar? Tks

4 Respostas

S

Esqueci de colocar o erro:

org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for sql in /index.jsp</h3><p>855: It is illegal to specify a DataSource when nested within a &lt;transaction&gt;</p><p>857: It is illegal to specify a DataSource when nested within a &lt;transaction&gt;</p><p>866: It is illegal to specify a DataSource when nested within a &lt;transaction&gt;</p>
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:74)
	org.apache.jasper.compiler.Validator.validateXmlView(Validator.java:1849)
	org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1795)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:216)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:372)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:352)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:339)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:594)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:344)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
L

A causa é essa: It is illegal to specify a DataSource when nested within a

Se vc omitir o datasource nas tags que estão dentro da transaction funciona?

<c:catch var="e"> <sql:transaction dataSource="${con}"> <sql:update var="alter_disabled"> ALTER TABLE fails DISABLE TRIGGER tg_responsible; </sql:update> <sql:update var="rs_upt_responsible"> UPDATE fails SET classification_id=?, area_id=?, updated_at=NOW() WHERE id = ?; <sql:param value="${classification_id}" /> <sql:param value="${area_id}" /> <sql:param value="${id}" /> </sql:update> <sql:update var="alter_enabled"> ALTER TABLE fails ENABLE TRIGGER tg_responsible; </sql:update> </sql:transaction> </c:catch>

lele_vader

Não dá para tirar o código de sql da página ?
Talvez chamar um sql para o relatório ou um collectionDataSource

S

@lsjunior obrigado , era exatamente isso!
@lele_vader , valeu também, esse é um sistema antigo meu que estou dando manutenção , quem sabe em uma nova versão faço tudo OO.

FECHADO!

Tks

Criado 3 de julho de 2012
Ultima resposta 4 de jul. de 2012
Respostas 4
Participantes 3