Erro 500 - Constraint Violation Exception
26/10/2009 00:00
0
olá galera!

alterei meu "UrlMappings" para redirecionar para um controller e não para a view.
no controller estou "buscando" os seguintes erros para mostrar em um flash.message:


def code = request.'javax.servlet.error.status_code'
def causa = request.'exception'
def uri = request.'javax.servlet.forward.request_uri'


quando eu rodo local, com o run-app (Jetty), a seguinte mensagem é retornada:

Erro: 500
Causa: org.codehaus.groovy.grails.web.errors.GrailsWrappedRuntimeException: Check constraint violation occurred, dbname = 'aluno', table name = 'aluno..setor_mandato', constraint name = 'CKT_SETOR_MANDATO'.
URI: /sisacad/setor_mandato/save

Perfeito, exatamente o que eu quero.
Porém quando eu passo para produção, em um servidor tomcat 6, a 'Causa' vem diferente,
o tomcat recebe outra informação no request.'exception', e essa é inutil para o meu caso.
Segue o retorno do servidor Tomcat 6:

Erro: 500
Causa: org.codehaus.groovy.grails.web.errors.GrailsWrappedRuntimeException: null id in Setor_mandato entry (don't flush the Session after an exception occurs)
URI: /sisacad/setor_mandato/save


Eu preciso buscar a Causa no mesmo formato dos demais (javax.servlet), mas não sei como fazer isso, ja tentei com javax.servlet.error.message, javax.servlet.error.exception, javax.servlet.exception, mas todas retornam null.

Alguem sabe me dizer como contornar este problema?

Valeu!
Tags: Grails


0
a titulo de teste, vc poderia usar o plugin para tomcat e fazer o teste na sua máquina para ver se o erro persiste.

Herrera
26/10/2009 00:00


0
olá Herrera.
eu tenho tomcat instalado localmente,
já testei nele também, mesmo problema.

eu estou tentando ao invez de mandar para um controller,
colocar o conteudo do arquivo error.gsp em cada create.gsp
dentro de uma tag <g:if test=&quot;${exception}&quot;>
acredito que assim vai mostrar o que eu quero, porém,
não faço a minima ideia de como redirecionar para a mesma view que chamou o erro no UrlMappings

de qualquer forma, se alguem tiver uma solução para resolver do modo ErrorController é melhor.

vlw

obs: não consigo instalar o plugin do tomcat no meu grails porque uso a versão 1.1.1 ainda
26/10/2009 00:00


0
enquanto não consigo resolver isso, estou fazendo assim:
UrlMappings
&quot;500&quot;(view&#58;'/error')


deixo igual só mudo o formato que vai mostrar as exceptions, ja ta valendo.

Agora me deparei com um problema.
Tem uma Constraints na tabela setor_mandato que diz que a data final tem que ser maior que a data Inicial. Foi vinculado a essa constraints uma message &quot;a data final deve ser maior que a data inicial&quot;.

Ae o problema, agora a exception vem com a Causa assim:
Caused by: com.sybase.jdbc3.jdbc.SybSQLException: Message empty.

Message Empty, mas a mensagem esta la, se eu tentar dar um INSERT pelo banco mesmo a mensagem aparece direitinho.

Alguem tem ideia do que causa isso? Hibernate não trata dessas mensagens vinculadas?

vlw
26/10/2009 00:00


0
Ola erhorn,

eu sei que, o que vou te passar não tem muito a ver com o problema que vc está enfrentando no tomcat + producao, mas navegando no jira para a versão do grails 1.2RC1, tem o seguinte bug fix :

GRAILS-5201 - Render template from plugin does not work in 1.2M3 on tomcat in production

http&#58;//jira.codehaus.org/browse/GRAILS-5201

isso é só para dizer que algo não esta(va) bem com o tomcat.
28/10/2009 00:00


0
hmm, entendo..

falta algumas coisas ainda né, na versão 1.2 já vai ficar bem melhor.

Valeu pelo reply Herrera!
Mas até que não era o tomcat que tava me atrapalhando nesse problema da mensagens de exception. Era o jeito que eu estava fazendo minha aplicação que não estava bem certo. Estava usando duas bases distintas na mesma app.

O problema de Message Empty que eu falei é do Sybase mesmo, não é um erro, mas tipo algo que faltou.

É assim, em um field eu crio um constraint que diz que a data final não pode ser menor que a data inicial, e vínculo uma message a esse constraint, essa message fica salva em uma tabela do sistema dentro da base que contem o constraint (sysusermessages). O probleminha esta aí, como eu uso duas bases e para cada domain eu uso &quot;table 'aluno..setor_mandato'&quot; (por exemplo), e sempre efetuo o login na Master, quando o erro é gerado, o banco tenta buscar essa sysusermessage vinculada ao meu constraint na base Master ao invez de buscar na aluno. É talvez uma &quot;falha&quot; do próprio Sybase mesmo.

Agora eu alterei no DataSource.groovy para acessar direto minha base aluno, só estou usando ela, e as demais tabelas de outras bases eu uso como uma View dentro do base aluno. Problema resolvido =]

valeu aí!
28/10/2009 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto