1
I have a project done with Jhipster. He uses spring-boot. I use this application as an order platform where I consume several webservices of an ERP and also sound cronizo the data with android devices in the mobile version of the platform.
To consume ERP Wss, I use a class with Annotation @Component and @Scheduled(fixedDelayString = "90000") so that it works as a job every 90 seconds. It consumes 11 webservices. The problem is that this Job stops working approximately every 12 hours.
I have another similar Job running on the same project, but that does not consume any external resource, just makes calculations.
The 2 Jobs stop at the same time and only a few REST methods work.
Does anyone have any idea what it might be?
follows class:
package br.inf.gati.gts.job;
@Component
public class SyncErpJob {
private final Logger log = LoggerFactory.getLogger(SyncErpJob.class);
@Autowired
private EmpresaFilialRepository empresaFilialRepo;
@Autowired
private ClienteRepository clienteRepo;
@Autowired
private ProdutoRepository produtoRepo;
@Autowired
private CondicaoPagtoRepository condPagtoRepo;
@Autowired
private TransportadoraRepository transpRepo;
@Autowired
private TabelaPrecoRepository tabPrecoRepo;
@Autowired
private TabelaPrecoProdutoRepository tabPrecoProdRepo;
@Autowired
private ExcecaoFiscalRepository excecaoRepo;
@Autowired
private OperacaoFiscalRepository operacaoRepo;
@Autowired
private ParamImpostosRepository impostosRepo;
@Autowired
private PedidoVendaRepository pedidoRepo;
@Autowired
private ContasReceberRepository contasRepo;
@Autowired
private MailService mailService;
@Value("${gts.webservice.soap.ativo}")
public Boolean ativo;
@Value("${gts.webservice.soap.erp.date.format}")
public String dateFormatPattern;
@Value("${gts.webservice.soap.erp.date.timezone}")
public String timeZoneParam;
@Value("${gts.webservice.soap.erp.url}")
private String url;
@Value("${gts.webservice.soap.erp.port}")
private String port;
@Scheduled(fixedDelayString = "${gts.webservice.soap.erp.time}")
public void ConsumoSOAPErp() {
if(ativo){
log.info("SEJ-MSG001: Percorrendo Webservices de consumo de dados do ERP!");
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SoapClientConfig.class);
List<EmpresaFilial> listaFiliais = empresaFilialRepo.findAll();
for (EmpresaFilial filial : listaFiliais){
log.info("SEJ-MSG003: Empresa:["+filial.getCdEmpresa()+"] Filial:["+filial.getCdFilial()+"]");
consomeCliente(filial, context);
consomeProduto(filial, context);
consomeCondPagto(filial, context);
// demais WS
}
context.close();
}else{
log.debug("Consumo de werbservices inativo!");
}
}
private void consomeCondPagto(EmpresaFilial filial, AnnotationConfigApplicationContext context) {
try{
CondPagtoWsClient condPagtoListaWs = context.getBean(CondPagtoWsClient.class);
condPagtoListaWs.setUrl(url);
condPagtoListaWs.setPort(port);
condPagtoListaWs.setDefaultUri(url+":"+port+"/WSDLCPGTO.apw");
CONDSLSTRESPONSE responseList = condPagtoListaWs.getCondPagtoLstResponse(filial.getCdEmpresa(), filial.getCdFilial());
List<STCPGTO> wsCondPagto = responseList.getCONDSLSTRESULT().getAREGS().getSTCPGTO();
for (STCPGTO stCond : wsCondPagto){
log.info("SEJ-MSG020: Cond.Pagto: cdCod:["+stCond.getCE4COD() +"] "
+ "Cond. Pagto:["+stCond.getCE4COND() +"]"
+ "dsCondPagto:["+stCond.getCE4DESCRI()+"]");
try{
BigInteger regNumErp = stCond.getCE4RECNO();
CondicaoPagto cond = null;
try{
cond = condPagtoRepo.findByFilialIdAndCdCondPagto(filial.getId(),
StringUtils.truncate(stCond.getCE4COD().trim(), 3));
}catch (NullPointerException e) {}
if (cond == null){
cond = new CondicaoPagto();
cond.setFilial(filial);
cond.setCdEmpresa( StringUtils.truncate(filial.getCdEmpresa(),2));//c2
cond.setCdFilial( StringUtils.truncate(filial.getCdFilial(),2));//c2
cond.setCdCondPagto( StringUtils.truncate(stCond.getCE4COD(),3));//c3
}
cond.setCdCondicao( StringUtils.truncate(stCond.getCE4COND(),60));//c60
cond.setDsCondPagto( StringUtils.truncate(stCond.getCE4DESCRI(),60));//c60
cond.setNrDiasPrazoMedio( new BigDecimal(stCond.getCE4PRAZO()));//float14,2
cond.setDtSincronizacao( ZonedDateTime.now());
cond.setIdAutorCriacao( Constants.SERVER);
CondicaoPagto condSalvo = condPagtoRepo.save(cond);
if (condSalvo != null){
CONDSRETRESPONSE responseRet = condPagtoListaWs.setCondPagtoRetResponse(filial.getCdEmpresa(), filial.getCdFilial(), regNumErp);
if (responseRet != null){
if (responseRet.getCONDSRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_SUCESSO)){
log.info("SEJ-MSG021: Cond. Pagto. Registro ["+regNumErp+"] integrado e notificado com successo!");
}else if (responseRet.getCONDSRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_FALHA)) {
log.error("SEJ-MSG022: Cond. Pagto. Registro ["+regNumErp+"] integrado e notificado com falha!");
}else {
log.error("SEJ-MSG024: Cond. Pagto. Registro ["+regNumErp+"] integrado e notificado com falha no retorno!");
log.warn("SEJ-MSG025: msg["+responseRet.getCONDSRETRESULT().getCMESSAGE()+"]");
log.warn("SEJ-MSG026: ret["+responseRet.getCONDSRETRESULT().getCRET()+"]");
}
}else{
log.error("SEJ-MSG018: Sem retorno da notificação ao ERP!");
}
}else{
log.error("SEJ-MSG019: Falha ao integrar Cond. Pagto. registro ["+regNumErp+"]");
}
}catch (Exception e) {
log.error("SEJ-ERR005: Erro no consumo de condição de pagamento", e);
}
}
}catch (RuntimeException e) {
log.error("SEJ-ERR006: Falha de comunicação no consumo de condição de pagamento", e);
}
}
private void consomeProduto(EmpresaFilial filial, AnnotationConfigApplicationContext context) {
try{
ProdutoWsClient produtoListaWs = context.getBean(ProdutoWsClient.class);
produtoListaWs.setUrl(url);
produtoListaWs.setPort(port);
produtoListaWs.setDefaultUri(url+":"+port+"/WSDLProd.apw");
PRODUTOLSTRESPONSE responseList = produtoListaWs.getProdLstResponse(filial.getCdEmpresa(), filial.getCdFilial());
List<STPROD> wsProdutos = responseList.getPRODUTOLSTRESULT().getAREGS().getSTPROD();
for (STPROD stProd : wsProdutos){
log.info("SEJ-MSG012: Produto: cdProduto:["+stProd.getCB1COD() +"] "
+ "dsProduto:["+stProd.getCB1DESC()+"]");
try{
BigInteger regNumErp = stProd.getCB1RECNO();
Produto prod = null;
try{
prod = produtoRepo.findByCdEmpresaAndCdFilialAndCdProduto(filial.getCdEmpresa(),
filial.getCdFilial(),
StringUtils.truncate(stProd.getCB1COD().trim(),15));
}catch (NullPointerException e) {}
if (prod == null){
prod = new Produto();
prod.setFilial(filial);
prod.setCdEmpresa( StringUtils.truncate(filial.getCdEmpresa().trim(),2));//c2
prod.setCdFilial( StringUtils.truncate(filial.getCdFilial().trim(),2));//c2
prod.setCdProduto( StringUtils.truncate(stProd.getCB1COD().trim(),15));//c15
}
prod.setDsProduto( StringUtils.truncate(stProd.getCB1DESC().trim(),120));//c120
prod.setCdFamilia( StringUtils.truncate(stProd.getCB1FPCOD().trim(),2));//c2
prod.setCdUnidadeMedida( StringUtils.truncate(stProd.getCB1UM().trim(),2));//c2
prod.setCdGrupo( StringUtils.truncate(stProd.getCB1GRUPO().trim(),4));//c4
prod.setCdGrtrib( StringUtils.truncate(stProd.getCB1GRTRIB().trim(),6));//c6
prod.setPcIpi( new BigDecimal(stProd.getCB1IPI()));//float5,2
prod.setlImportZnFranca( StringUtils.truncate(stProd.getCB1IMPZFRC().trim(),1).equals(Constants.SIM) ? true : false );//c1
prod.setCdProdutoSubst( StringUtils.truncate(stProd.getCB1ALTER().trim(),15));//c15
prod.setVlCmvStandard( new BigDecimal(stProd.getCB1CUSTD()));//float16,6
prod.setVlCmvRazao( new BigDecimal(stProd.getCCMVRAZAO()));//float16,6
prod.setIdOrigem( StringUtils.truncate(stProd.getCB1ORIGEM().trim(),1));//c1
prod.setCdClassFiscal( StringUtils.truncate(stProd.getCB1POSIPI().trim(),10));//c10
prod.setQtEstoqueDisp( new BigDecimal(stProd.getCESTOQUE()));//float16,0
prod.setPcReducPis( new BigDecimal(stProd.getCB1REDPIS()));//float5,2
prod.setPcReducCofins( new BigDecimal(stProd.getCB1REDCOF()));//float5,2
prod.setPcPis( new BigDecimal(stProd.getCB1PPIS()));//float5,2
prod.setPcCofins( new BigDecimal(stProd.getCB1PCOFINS()));//float5,2
prod.setIdSitTrib( StringUtils.truncate(stProd.getCB1SITTRIB().trim(),1));//c1
prod.setDsFichaTecnica( StringUtils.truncate(stProd.getCFICHADESC(),200));//c200
// campo nr_aliq_icms_interna criado em 30/09/2016 após reunião com cliente para definir os cálculos
prod.setNrAliqIcmsInterna( new BigDecimal(stProd.getCICMSNCM()));//float5,2);
// campo nr_aliq_icms_externa criado em 30/09/2016 após reunião com cliente para definir os cálculos
// Este campo não será usado atualmente, porem foi sugerido manter pelo Analista Fiscal
prod.setNrAliqIcmsExterna( new BigDecimal(stProd.getCICMSNCM()));//float5,2);
prod.setBlobFichaTecnica( stProd.getCFICHATEC().getBytes());
if (stProd.getCFICHATEC().length() > 0 ){
log.error("[[TESTE]] tamanho do blob maior que zero stProd.getCFICHATEC()[ " + stProd.getCFICHATEC() + " ]");
}
prod.setBlobFichaTecnicaContentType(Constants.CONTENT_TYPE_PDF);
Boolean lAtivo = StringUtils.truncate(stProd.getCB1ATIVO().trim(),1).equals(Constants.SIM) ? true : false; //c1
Boolean lEnvGts = StringUtils.truncate(stProd.getCB1ENVGTS().trim(),1).equals(Constants.ATIVO) ? true : false; //c1;
prod.setlAtivo( (lAtivo && lEnvGts));
try{
prod.setCfRentabilidadeprod(new BigDecimal(stProd.getCB1COEFICI().trim()));
}catch (NullPointerException e) {
prod.setCfRentabilidadeprod(new BigDecimal(0.0));
}catch (NumberFormatException e) {
prod.setCfRentabilidadeprod(new BigDecimal(0.0));
}
prod.setDtSincronizacao(ZonedDateTime.now());
prod.setIdAutorCriacao(Constants.SERVER);
Produto prodSalvo = produtoRepo.save(prod);
if (prodSalvo != null){
// if (prodSalvo != null || !prod.islAtivo()){
PRODRETRESPONSE responseRet = produtoListaWs.setProdRetResponse(filial.getCdEmpresa(), filial.getCdFilial(), regNumErp);
if (responseRet != null){
if (responseRet.getPRODRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_SUCESSO)){
log.info("SEJ-MSG013: Produto Registro ["+regNumErp+"] integrado e notificado com successo!");
}else if (responseRet.getPRODRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_FALHA)) {
log.error("SEJ-MSG014: Produto Registro ["+regNumErp+"] integrado e notificado com falha!");
}else {
log.error("SEJ-MSG015: Produto Registro ["+regNumErp+"] integrado e notificado com falha no retorno!");
log.warn("SEJ-MSG016: msg["+responseRet.getPRODRETRESULT().getCMESSAGE()+"]");
log.warn("SEJ-MSG017: ret["+responseRet.getPRODRETRESULT().getCRET()+"]");
}
}else{
log.error("SEJ-MSG018: Sem retorno da notificação ao ERP!");
}
}else{
log.error("SEJ-MSG019: Falha ao integrar Produto registro ["+regNumErp+"]");
}
}catch (Exception e) {
log.error("SEJ-ERR003: Erro no consumo de produtos", e);
}
}
}catch (RuntimeException e) {
log.error("SEJ-ERR004: Falha de comunicação no consumo de produtos", e);
}
}
private void consomeCliente(EmpresaFilial filial, AnnotationConfigApplicationContext context) {
try{
ClienteWsClient clienteListaWs = context.getBean(ClienteWsClient.class);
clienteListaWs.setUrl(url);
clienteListaWs.setPort(port);
clienteListaWs.setDefaultUri(url+":"+port+"/WSDLCLI.apw");
CLIENTELSTRESPONSE responseList = clienteListaWs.getClientLstResponse(filial.getCdEmpresa(), filial.getCdFilial());
List<STCLIENTE> wsClientes = responseList.getCLIENTELSTRESULT().getAREGS().getSTCLIENTE();
for (STCLIENTE stCli : wsClientes){
log.info("SEJ-MSG004: Cliente: CdCliente:["+stCli.getCA1COD() +"] "
+ "CdLoja:["+stCli.getCA1LOJA()+"] "
+ "Nome:["+stCli.getCA1NOME()+"]");
try{
BigInteger regNumErp = stCli.getCA1RECNO();
Cliente cliente = null;
try{
cliente = clienteRepo.findOneByFilialIdAndCdClienteAndCdLoja( filial.getId(),
StringUtils.truncate(stCli.getCA1COD().trim(),6),
StringUtils.truncate(stCli.getCA1LOJA().trim(),4));
}catch (NullPointerException e) {}
if (cliente == null){
cliente = new Cliente();
cliente.setFilial(filial);
cliente.setCdEmpresa( StringUtils.truncate(filial.getCdEmpresa().trim(),2)); //c2
cliente.setCdFilial( StringUtils.truncate(filial.getCdFilial().trim(),2));//c2
cliente.setCdCliente( StringUtils.truncate(stCli.getCA1COD().trim(),6));//c6
cliente.setCdLoja( StringUtils.truncate(stCli.getCA1LOJA().trim(),4));//c4
}
cliente.setNmCliente( StringUtils.truncate(stCli.getCA1NOME().trim(),60));//c60
cliente.setNmClienteReduc( StringUtils.truncate(cliente.getNmCliente(),20));//c20
cliente.setDsEndereco( StringUtils.truncate(stCli.getCA1END().trim(),80));//c80
cliente.setCdTipoCli( StringUtils.truncate(stCli.getCA1TIPO().trim(),1));//c1
cliente.setCdGrptrib( StringUtils.truncate(stCli.getCA1GRPTRIB().trim(),3));//c3
cliente.setSgUf( StringUtils.truncate(stCli.getCA1EST().trim(),2));//c2
cliente.setNmCidade( StringUtils.truncate(stCli.getCA1MUN().trim(),60));//c60
cliente.setNmBairro( StringUtils.truncate(stCli.getCA1BAIRRO().trim(),30));//c30
cliente.setCdCep( StringUtils.truncate(stCli.getCA1CEP().trim(),8));//c8
cliente.setNrDdd( StringUtils.truncate(stCli.getCA1DDD().trim(),3));//c3
cliente.setNrTelefone( StringUtils.truncate(stCli.getCA1TEL().trim(),15));//c15
cliente.setDsEmail( StringUtils.truncate(stCli.getCA1EMAIL().trim(),120));//c120
cliente.setNrCnpjCpf( StringUtils.truncate(stCli.getCA1CGC().trim(),14));//c14
cliente.setNmContato( StringUtils.truncate(stCli.getCA1CONTATO().trim(),15));//c15
cliente.setNrInscr( StringUtils.truncate(stCli.getCA1INSCR().trim(),18));//c18
cliente.setCdRegiao( StringUtils.truncate(stCli.getCA1REGIAO().trim(),3));//c3
cliente.setCdSuframa( StringUtils.truncate(stCli.getCA1SUFRAMA().trim(),12));//c12
cliente.setlContribIcms( StringUtils.truncate(stCli.getCA1CONTRIB().trim(),1).equalsIgnoreCase("1") ? true: false);//c1
cliente.setIdSimplesNacional( StringUtils.truncate(stCli.getCA1SIMPNAC(),1));//c1
cliente.setVlSaldoLimite( new BigDecimal(stCli.getCLIMCRED()));//float17,2
cliente.setInadimplente( StringUtils.truncate(stCli.getCSITCLI().trim(),1).equalsIgnoreCase(Constants.SIM) ? true: false);//c1
cliente.setDtSincronizacao(ZonedDateTime.now());
cliente.setIdAutorCriacao(Constants.SERVER);
Boolean lLiberado = StringUtils.truncate(stCli.getCATIVO().trim(),1).equals(Constants.SIM) ? true : false; //c1
cliente.setlLiberado( lLiberado);
Cliente clienteSalvo = clienteRepo.save(cliente);
if (clienteSalvo != null){
CLIRETRESPONSE responseRet = clienteListaWs.setClientRetResponse(filial.getCdEmpresa(), filial.getCdFilial(), regNumErp);
if (responseRet != null){
if (responseRet.getCLIRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_SUCESSO)){
log.info("SEJ-MSG005: Cliente Registro ["+regNumErp+"] integrado e notificado com successo!");
}else if (responseRet.getCLIRETRESULT().getCRET().trim().equalsIgnoreCase(Constants.RET_FALHA)) {
log.error("SEJ-MSG006: Cliente Registro ["+regNumErp+"] integrado e notificado com falha!");
}else {
log.error("SEJ-MSG007: Cliente Registro ["+regNumErp+"] integrado e notificado com falha no retorno!");
log.warn("SEJ-MSG008: msg["+responseRet.getCLIRETRESULT().getCMESSAGE()+"]");
log.warn("SEJ-MSG009: ret["+responseRet.getCLIRETRESULT().getCRET()+"]");
}
}else{
log.error("SEJ-MSG010: Sem retorno da notificação ao ERP!");
}
}else{
log.error("SEJ-MSG011: Falha ao integrar Cliente registro ["+regNumErp+"]");
}
}catch (Exception e) {
log.error("SEJ-ERR001: Erro no consumo de clientes", e);
}
}
}catch (RuntimeException e) {
log.error("SEJ-ERR002: Falha de comunicação no consumo de clientes", e);
}
}
}
I found out. The cause of the problem is not my application, but the Soap server. When I make the response Clienthttp connection, the Soap server makes an internal select and hangs, so it never closes the http connection my Clienthttp is waiting endlessly. Timeout works correctly, but readTimeOut is infinite. Now I need to know how to set this using spring-Ws and setting the property via application.yml file.
– juceliohv100