java.sql.SQLDataException: ORA-01843: not a valid month | java.sql.SQLException : Closed Statement | Font 'Arial' is not available to the JVM - [Resolvido]

Boa tarde Pessoal !

Sofri com um problema chato kkkk mas estou aqui apenas para repassar conhecimento, caso alguém passe pela mesma situação que eu. :cold_sweat:

Bom, eu tenho uma aplicação em spring boot com conexão com o banco de dados oracle. E eu tenho uma tela que utiliza jasper para gerar planilhas em excel. Quando eu rodava meu projeto localmente, funcionava perfeitamente, porém quando eu fazia deploy na aplicação openshift dava três erros.

1- Erro: java.sql.SQLException : Closed Statement (Relacionado ao Openshift)

2- Erro: (Relacionado a Jasper)
[net.sf.jasperreports.engine.fonts.FontUtil] (default task-11) Font ‘Arial’ is not available to the JVM. For more details, see [http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/util/JRFontNotFoundException.html ]

3- Erro: (Relacionado ao Banco de dados oracle)
java.sql.SQLDataException: ORA-01843: not a valid month

Primeiro Erro: Estava dando esse erro somente no JVM, pois localmente funcionava… Bom a conexão que fiz para acessar uma procedure estava assim:
@PersistenceContext
public EntityManager em;
Session session = em.unwrap(Session.class);
CallableStatement cs = session.doReturningWork(new ReturningWork() {
@Override
public CallableStatement execute(Connection connection) throws SQLException {
CallableStatement cs = connection.prepareCall({ ? = call PKG_BANCO.NOME_PROCEDURE(?,?,?,?,?)}}
});

O JVM por algum motivo não estava conectando ou estava entrando em um conflito.
Então peguei as variáveis de conexão no proprieties e passei como parâmetro de conexão.

@Value("${spring.datasource.url}")
private String urloracle;
	
@Value("${spring.datasource.username}")
private String username;

@Value("${spring.datasource.password}")
private String password;

Class.forName("oracle.jdbc.driver.OracleDriver");
String url = urloracle;
Connection con = DriverManager.getConnection(url, username, password);
 String command = "{ ? = call PKG_BANCO.NOME_PROCEDURE(?,?,?,?,?)}";
CallableStatement cs = con.prepareCall(command);

Segundo erro: como o ambiente que realizei deploy foi em openshift com docker, (desculpa se eu tiver falando besteira kkk sou nova nessa tecnologia, mas foi o que eu entendi pelo menos), as configurações do openshift eram cruas e não tem fonts instaladas… pensei em instalar por um comando em linux no servidor, porém cada vez que eu fosse fazer um deploy, as configurações iriam resetar, até mesmo as fonts e não iria adiantar de nada.

Uma solução que eu encontrei foi usar esse código para ignorar as fonts do jasper no proprieties do projeto. E resolveu pra mim.

net.sf.jasperreports.awt.ignore.missing.font=true

Terceiro erro: Esse erro do oracle, pela mor de Deus kkk fiquei uma semana pra descobrir e é uma coisa idiota kkk, mas pra quem tiver passando pelo mesmo problema que eu, quem saiba te ajude. Encontrei esse forum fechado, aberto em 2008 e respondido em 2014. kkk pois é… em pleno 2021 eu também tive esse problema.

A solução do cara é bem parecida com a minha, a diferença é que eu batia em uma package no banco com uma procedure. Na hora que a procedure ia inserir, percebi que um campo de data da tabela não estava sendo formatado, estava inserindo a data via hard code , dessa forma ‘01/02/2011’, então apenas coloquei o to_date(‘01/02/2011’,‘DD/MM/YYYY’).

Localmente não dava esse problema, por que eu estava utilizando o oracle developer , que automaticamente interpreta a formatação da data. Mas como eu estava subindo a aplicação em uma JVM, eu preciso dizer qual é a formatação. Então nesse caso, eu alterei a package no oracle, apenas para formatar a data e deu certo.

Espero que quem encontre esse fórum, se tiver com problema, que isso resolva kkkk

3 curtidas