Para futuros googlers que visitaram esta página, aqui está o problema que tivemos . A exceção de violação de protocolo estava sendo registrada nos logs do aplicativo e no rastreamento do Oracle.
Rastreamento do Oracle
Este é um erro dos arquivos de rastreamento oracle
--- VIOLAÇÃO DE PROTOCOLO DETECTADA ---
----- Dump Cursor sql_id=1j5kjnkncpp xsc=0x2a053a2a0 cur=0x2a052f1cf0 ---
----- Current SQL Statement for this session (sql_id=1jjns4k6npp) -----
select xyz
Nos registros do aplicativo
Caused by: org.springframework.jdbc.UncategorizedSQLException: SqlMapClient operation; uncategorized SQLException for SQL []; SQL state [72000]; error code [20000];
Sintoma
Essa exceção acontecia ocasionalmente. O rastreamento de pilha tinha um sql diferente, o que era muito confuso. Executando o sql com sql plus funcionou bem.
Causa Raiz
A exceção foi lançada quando o driver oracle estava tentando exportar dados CLOB. Isso estava acontecendo com apenas alguns registros, não todos eles. Os dados como tal eram um arquivo. Visualmente, não conseguimos identificar o que havia de errado com esses dados.
Por que estávamos vendo erros nos logs do Oracle?
Então, se isso foi um defeito de driver, por que vimos o erro no oracle trace? Logicamente, os erros de driver devem ser confinados apenas aos logs do aplicativo. A razão foi que, quando a violação do protocolo ocorreu, a conexão foi corrompida. Esta conexão foi retornada ao pool de conexões. Qualquer usuário ou trabalho quando usar essa conexão não funcionará e apresentará erros. É por isso que isso acontecerá em lugares aleatórios, com usuários aleatórios
Solução
Uma correção de curto prazo foi alterar essa propriedade no pool de conexões. Estamos usando o pool de conexão DBCP.
Alterado deds.setTestOnBorrow(false);tods.setTestOnBorrow(true);
Agora, quando o pool retorna uma conexão corrompida ao pool, antes que o aplicativo empreste essa conexão, ele testará a validade. Se a conexão for inutilizável, o pool será descartado e o aplicativo obterá uma conexão nova/válida.
Se você habilitar os logs do pool de conexões, deverá ver a exceção que normalmente é engolida.
Atualização de driver
A atualização para OJDBC 12.1.0.2 do OJDBC 12.1.0.1 resolveu o problema, mesmo para as linhas problemáticas.
Alguns outros links para referência
https://confluence.atlassian.com/display/CONFKB/java.sql.SQLException%3A+Protocol+violation+caught+while+accessing+a+page+and+Oracle+DB+is+used