Java Desktop e Spring

Seguinte pessoal !!

Desenvolvi um aplicação java desktop com spring, e executando ela no eclipse ela executa normalmente

porem quando exporto meu projeto para o arquivo runnable jar

a aplicaçao nao executa, ela nao consegue carregar o arquivo spring-config-context.xml utilizando a seguinte lina de codigo:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring-config-context.xml");

Alguem tem alguma ideia do que possa estar acontecendo…

ja nao sei mais o que fazer

Tente só new ClassPathXmlApplicationContext(“spring-config-context.xml”); sem a barra

ArtesaoDeSoftware

Se eu fizer so new ClassPathXmlApplicationContext

eu nao vou ter como resgatar os beans

o que acontece é que executo a aplicaçao normalmente no eclipse, mas quando exporto para o arquivo runnabel jar

a app nao executa

Nas minhas aplicações swing com spring eu coloco o arquivo dentro um pakage normal e carrego sem problemas tanto no ambiente de desenvolvimento, quanto no ambiente de produção:


        if (ctx == null) {
            try {
                 ctx =  new ClassPathXmlApplicationContext("br/unicred/sorteio/context.xml");
            } catch (Exception e) {
               sistemaErro(e);
            }
        }
        return ctx;

t+ :wink:

Entao eu faço a mesma coisa porém

nao roda de jeito nehum, quando gero o jar da aplicaçao

Dã:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“spring-config-context.xml”);

Se o arquivo spring-config-context.xml estiver realmente no seu classpath e sem erros no xml ele vai achar.

mas ele acha o arquivo normal, ta tudo rodando certinho no eclipse

Esse é o codigo que eu uso para carregar o arquivo do spring e executar o formulario principal

	@Override
	public void run() {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				ClassPathXmlApplicationContext applicationContext = null;
				if(applicationContext == null){
				
					try {
						applicationContext = new ClassPathXmlApplicationContext("application/spring-config-homologacao.xml");
					} catch (Exception e) {
						// TODO: handle exception
					}
						
					
				}
				
				App frame = (App) applicationContext.getBean("app");
				frame.setDefaultCloseOperation(App.EXIT_ON_CLOSE);
				frame.setTitle("SIG - Sistema de Integração Gerencial");
				frame.getContentPane().setPreferredSize(frame.getSize());
				frame.pack();
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);

			}
		});

	}

É muito estranho mesmo pq se vc esta colocando o arquivo context dentro de uma pacote como se fosse um source normal…não deveria estar dando diferença entre executar na IDE e executar no JAR.
Vc tem certeza que esta enviando o arquivo para dentro do JAR na geração?

simm

quando extraio o arquivo, o arquivo context esta la dentro

jar

Alguem tem alguma ideia do que possa estar acontecendo ???

Eu costumo deixar no pacote src, tanto o spring quanto o hibernate e funciona na boa.
Estranho não funcionar para você.
Posta a exceção que está dando.

Ai é que ta nao estoura nem uma exceçao

pq no eclipse a aplicaçao roda tranquila, so nao roda quando exporto para o aquivo jar

[quote=rxavier]Ai é que ta nao estoura nem uma exceçao

pq no eclipse a aplicaçao roda tranquila, so nao roda quando exporto para o aquivo jar[/quote]

Faz assim:
Vai no modo console, entra no diretório onde você salvou o seu arquivo .jar gerado e então digita: java -jar seuarquivo.jar
Assim a exceção vai aparecer no console.

Essa é a exceçao que dispara:

log4j:ERROR Could not find value for key log4j.appender.R
log4j:ERROR Could not instantiate appender named "R".
log4j:WARN No appenders could be found for logger (org.apache.xbean.spring.conte
xt.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at application.ApplicationLauncher$1.run(ApplicationLauncher.java:35)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

O problema não parece ser esse que você citou. Se ele não encontrasse o arquivo do Spring, a exceção seria outra.
Veja que ele está mostrando como erro algo relativo ao log4j, ele está procurando uma propriedade R e não encontra ou não encontra o valor dela.
Você tem alguma coisa configurada referente ao log4j? Pq ele pode estar buscando algo e não encontrando e por isso o java.lang.NullPointerException.

[quote=rxavier]Esse é o codigo que eu uso para carregar o arquivo do spring e executar o formulario principal

[code]
.
.
.

				try {
					applicationContext = new ClassPathXmlApplicationContext("application/spring-config-homologacao.xml");
				} catch (Exception e) {
					// TODO: handle exception
				}
				.						
				.	
				.				

[/code][/quote]

Boa tarde RXavier, não te dá exceção nenhuma porque você silenciou o catch, tem um TODO ali comentado, significa que você precisa preenchê-lo.
Coloque pelo menos uma linha com seguinte trecho:

 e.printSctackTrace();

Ai você terá uma noção do que acontece quando der um erro.

Para mim o erro está relacionado ao Path onde está o seu arquivo App…xml no Eclipse está no caminho relativo correto, mas ao exportar você pode salvar em um caminho que perde-se o caminho relativo.

Espero ter ajudado!

Depois de ter o erro no console publique aqui para que possamos te ajudar! :thumbup:

Att.