2011-08-15 4 views
0

.properties 파일을 저장하려고하면 응용 프로그램에서 이상한 동작이 발생합니다. 응용 프로그램은 maven과 Spring 3.0.5를 사용하는 JSF 2.0입니다.속성 파일을 저장할 때 Tomcat 7이 응용 프로그램을 다시로드 중입니다.

public class ControladorPopupConfiguracaoImportadorNFe extends ControladorPopup{ 

private static final long serialVersionUID = 1L; 
private ModeloPopupConfiguracaoImportadorNFe modeloPopup; 
private ControladorPopupAlerta popupAlerta; 

@Override 
public void submit() {   
    Properties propriedades=new Properties();  
    definirPropriedades(propriedades);  
    if(salvar(propriedades)){ 
     this.fechar();  
     popupAlerta.abrir("As novas configurações foram salvas e já estão em uso!"); 
    }else 
     popupAlerta.abrir("Não foi possível salvar as novas configurações."); 
} 

private void definirPropriedades(Properties propriedades) {  
    propriedades.setProperty("recuperadorNFe.usaSsl",modeloPopup.getUsaSsl().toString()); 
    propriedades.setProperty("recuperadorNFe.porta",modeloPopup.getPorta()); 
    propriedades.setProperty("recuperadorNFe.urlImap",modeloPopup.getUrl()); 
    propriedades.setProperty("recuperadorNFe.usuario",modeloPopup.getUsuario()); 
    propriedades.setProperty("recuperadorNFe.senha",modeloPopup.getSenha()); 
    propriedades.setProperty("recuperadorNFe.nomeDaCaixa",modeloPopup.getCaixaEntrada()); 
    propriedades.setProperty("recuperadorNFe.diretorioDeArmazenamento",modeloPopup.getDiretorioDeArmazenamento()); 
    propriedades.setProperty("recuperadorNFe.caixaDestino",modeloPopup.getCaixaDestino()); 
    propriedades.setProperty("recuperadorNFe.horarioRecuperacao",modeloPopup.getHorarioRecuperacao());  
} 

private synchronized boolean salvar(Properties propriedades) { 
    try {   
     FileOutputStream outputStream=new FileOutputStream(modeloPopup.getArquivo());   
     propriedades.store(outputStream, "SEM COMETÁRIOS");   
     System.out.println("!!!!!!!!!!!!! - - - "+outputStream.getFD().toString()+" - - - !!!!!!!!!!!!!!");   
     outputStream.close();   
     return true; 
    } catch (Exception e) {    
     e.printStackTrace(); 
    }  
    return false; 
} 

@Override 
public void setModelo(ModeloComponenteBasico modelo) { 
    modeloPopup=(ModeloPopupConfiguracaoImportadorNFe) modelo; 
    super.setModelo(modelo); 
} 

public ControladorPopupAlerta getPopupAlerta() { 
    return popupAlerta; 
} 

public void setPopupAlerta(ControladorPopupAlerta popupAlerta) { 
    this.popupAlerta = popupAlerta; 
}} 

클래스 ControladorPopupConfiguracaoImportadorNFe의 객체를 생성 봄 파일은 다음과 같습니다 :

파일을 저장하려고 코드는 다음입니다

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
    scope="singleton"> 
    <property name="locations" value="classpath:../propriedades/recuperadorNFe.properties" /> 
</bean> 


<bean id="controladorPopupConfiguracaoImportadorNFe" class="com.hrgi.ui.controladores.popups.ControladorPopupConfiguracaoImportadorNFe" 
    scope="request"> 
    <property name="modelo" ref="modeloPopupConfiguracaoImportadorNFe"/> 
    <property name="popupAlerta" ref="controladorPopupAlerta"/> 
</bean> 

<bean id="modeloPopupConfiguracaoImportadorNFe" class="com.hrgi.ui.modelo.ModeloPopupConfiguracaoImportadorNFe" 
    scope="session"> 
    <property name="visivel" value="false"/> 
    <property name="caixaDestino" value="${recuperadorNFe.caixaDestino}"/> 
    <property name="caixaEntrada" value="${recuperadorNFe.nomeDaCaixa}"/> 
    <property name="diretorioDeArmazenamento" value="${recuperadorNFe.diretorioDeArmazenamento}"/> 
    <property name="horarioRecuperacao" value="${recuperadorNFe.horarioRecuperacao}"/> 
    <property name="porta" value="${recuperadorNFe.porta}"/> 
    <property name="senha" value="${recuperadorNFe.senha}"/> 
    <property name="url" value="${recuperadorNFe.urlImap}"/> 
    <property name="usaSsl" value="${recuperadorNFe.usaSsl}"/> 
    <property name="usuario" value="${recuperadorNFe.usuario}"/> 
    <property name="arquivo" value="#{propriedadesImportador.file}"/>  
</bean> 

<bean id="propriedadesImportador" class="org.springframework.core.io.ClassPathResource" 
    scope="request"> 
    <constructor-arg name="path" value="../propriedades/recuperadorNFe.properties"/> 
</bean> 

를이 무엇을이다 바람둥이에서 발생합니다.

... 
15/08/2011 15:57:47 com.hrgi.persistencia.cadastro.conversores.ConversorPessoa carregarBeansDeContato 
AVISO: Lista de contatos está nula!! 
15/08/2011 15:57:58 org.apache.tomcat.util.http.Parameters processParameters 
INFO: Parameters: Invalid chunk '=' ignored. 
!!!!!!!!!!!!! - - - [email protected] - - - !!!!!!!!!!!!!! 
15/08/2011 15:58:02 org.apache.catalina.core.StandardContext reload 
INFO: Reloading Context with name [/cadastro] has started 
15/08/2011 15:58:02 org.apache.catalina.core.ApplicationContext log 
INFO: Closing Spring root WebApplicationContext 
15/08/2011 15:58:02 org.springframework.context.support.AbstractApplicationContext doClose 
INFO: Closing Root WebApplicationContext: startup date [Mon Aug 15 15:57:10 BRT 2011]; root of context hierarchy 
15/08/2011 15:58:02 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons 
INFO: Destroying singletons in org.s[email protected]3445378f: defining beans [controladorPopupNovoCadastroPessoa,modeloPopupNovoCadastroPessoa,carregadorTipoPessoa,tipoPessoa,controladorPopupCadastroPessoa,modeloPopupCadastroPessoa,carregadorTipoCadastro,tipoCadastro,carregadorTipoBuscaPessoa,tipoBuscaPessoa,controladorPopupBuscaPessoa,modeloPopupBuscaPessoa,controladorSugestaoPessoa,carregadorPessoaEdicao,carregadorCidadesEnderecoEntrega,carregadorCidadesEnderecoFaturamento,carregadorItensSelectEmpresa,controladorRemocaoContato,controladorSelecaoTabelaContatos,linhaSelecionadaTabelaContato,contatoSelecionado,controladorRemocaoEmail,controladorSelecaoTabelaEmail,linhaSelecionadaTabelaEmail,controladorRemocaoTelefone,controladorSelecaoTabelaTelefone,linhaSelecionadaTabelaTelefone,controladorPopupNovoContato,modeloPopupNovoContato,controladorPopupNovoTelefone,modeloPopupNovoTelefone,controladorPopupNovoEmail,modeloPopupNovoEmail,entityManagerFactory,tipoLogradouroDao,ufDao,cidadeDao,empresaDao,cadastroDao,ramoAtividadeDao,contatoDao,emailDao,telefoneDao,funcionarioDao,funcaoDao,nomeApelidoFuncionarioDao,cepDao,bancoDao,febrabanDao,agenciaDao,tipoBancoDao,contaDao,visaoBuscaPessoaDao,visaoListagemEmpresaDao,visaoListagemAgenciaDao,validadorCPF,validadorCNPJ,validadorIE,validadorEmail,validadorSenhaNovo,validadorSenhaMudanca,validadorSenhaAtual,itensSelectUf,itensSelectTipoLogradouro,controladorPopupAlerta,modeloPopupAlerta,controladorPopupConfirmacao,modeloPopupConfirmacao,funcionarioLogado,empresaFuncionarioLogado,enderecoEmpresaFuncionarioLogado,coletorUsuarioLogado,funcionario,pessoaFisica,pessoaJuridica,enderecoEntrega,enderecoFaturamento,carregadorEnderecoFaturamento,carregadorEnderecoEntrega,controladorArmazenamentoFuncionario,controladorArmazenamentoPessoa,controladorArmazenamentoEmpresa,conversorFuncionario,conversorEmpresa,conversorPessoaFisica,conversorPessoaJuridica,conversorEnderecoEntrega,conversorEnderecoFaturamento,conversorContato,novaEmpresa,controladorPopupNovaEmpresa,modeloPopupNovaEmpresa,controladorPopupCadastroEmpresa,modeloPopupCadastroEmpresa,controladorPopupBuscaEmpresa,modeloPopupBuscaEmpresa,controladorSugestaoEmpresa,carregadorEmpresaEdicao,carregadorTipoBuscaEmpresa,tipoBuscaEmpresa,org.springframework.security.web.PortMapperImpl#0,org.springframework.security.web.context.HttpSessionSecurityContextRepository#0,org.springframework.security.core.session.SessionRegistryImpl#0,org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy#0,org.springframework.security.authentication.ProviderManager#0,org.springframework.security.access.vote.AffirmativeBased#0,org.springframework.security.web.access.intercept.FilterSecurityInterceptor#0,org.springframework.security.web.access.DefaultWebInvocationPrivilegeEvaluator#0,org.springframework.security.authentication.AnonymousAuthenticationProvider#0,org.springframework.security.web.savedrequest.HttpSessionRequestCache#0,org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint#0,org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0,org.springframework.security.config.http.UserDetailsServiceInjectionBeanPostProcessor#0,org.springframework.security.filterChainProxy,org.springframework.security.authentication.DefaultAuthenticationEventPublisher#0,org.springframework.security.authenticationManager,daoAuthenticationProvider,detalhadorDeUsuarios,passwordEncoder,controladorPopupCadastroFuncionario,modeloPopupCadastroFuncionario,controladorPopupNovoCadastroFuncionario,modeloPopupNovoCadastroFuncionario,carregadorFuncoesFuncionario,controladorPopupMudancaSenha,modeloPopupMudancaSenha,controladorPopupBuscaFuncionario,carregadorFuncionarioEdicao,modeloPopupBuscaFuncionario,controladorSugestaoFuncionario,carregadorTipoBuscaFuncionario,tipoBuscaFuncionario,controladorPopupCadastroAgencia,modeloPopupCadastroAgencia,agencia,conversorAgencia,controladorArmazenamentAgencia,carregadorBancos,controladorPopupNovoCadastroBanco,modeloPopupNovoCadastroBanco,controladorPopupCadastroBanco,modeloPopupCadastroBanco,bancoOficial,itensSelectBancoFebraban,controladorArmazenamentoBanco,conversorBanco,controladorPopupCadastroConta,modeloPopupCadastroConta,conta,armazenadorConta,carregadorEmpresasComCNPJ,carregadorAgencias,controladorPopupConfiguracaoImportadorNFe,modeloPopupConfiguracaoImportadorNFe,propriedadesImportador,importadorNFe,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,organizador,recuperador,imap,conectorImap,movedorEmail,marshaller,conversorEndereco,conversorIdentificacao,conversorEmitente,conversorDestinatario,conversorProduto,formatadorDecimal,formatadorData,conversorICMS,conversorICMS00,conversorICMS10,conversorICMS20,conversorICMS30,conversorICMS40,conversorICMS51,conversorICMS60,conversorICMS70,conversorICMS90,conversorICMSPartilhado,conversorICMSST,conversorIPI,conversorPIS,conversorCOFINS,conversorImposto,conversorTotalizador,conversorItem,conversorTransportadora,conversor INFOrmacoesAdicionais,conversorTransporte,conversorFatura,conversorDuplicata,conversorCobranca,conversorNotaFiscal,formatadorString,geradorDigitoVerificador]; root of factory hierarchy 
... 

답변

1

웹 응용 프로그램에 <Context reloadable="true">을 설정하면 이런 일이 발생합니다. Eclipse와 같은 대부분의 IDE는 Webapp 컨텍스트 리소스가 변경 될 때마다 Tomcat이 다시로드 (기본적으로 : 다시 시작)되도록 기본적으로이를 수행합니다. 이것은 개발에 유용합니다. 외에도 구체적인 문제에서


는 웹 애플리케이션이 실행되는 동안 웹 애플리케이션 컨텍스트에 파일을 저장하면 다음과 같은 이유로 정말 나쁜 생각 :

는 WAR 파일을 다시 배포 할 때마다 모든 변경 사항이 분실
  1. 및/또는 서버를 다시 시작하십시오.
  2. 모든 컨테이너가 배포 된 WAR을 쓰기 가능한 폴더 구조로 확장하지는 않습니다.

이러한 파일을 webapp 외부의 고정 파일 시스템 경로에 넣고 해당 경로를 webapp의 런타임 클래스 경로에 추가해야합니다. 예 : /var/webapp/conf. 이 경로를 외부 적으로 시스템 속성으로 구성 할 수 있으며이 경로를 톰캣 /conf/catalina.propertiesshared.loader 속성에 지정하여 클래스 경로에 추가 할 수 있습니다. 다른 모든 서블릿 컨테이너는 비슷한 구조를 지원합니다. 웹 애플리케이션의 설치 매뉴얼에 따라 문서화하십시오.

+0

감사합니다. BalusC, 속성 파일의 경로를 배포 된 응용 프로그램 경로 외부로 변경합니다. – brevleq

관련 문제