Problemas de importação .jar

Senhores,

Estou recorrendo a JSP/Servlets, pois no java basico não consegui nenhuma orientação.

Estou com problemas para importação de um arquivo .jar em um projeto web.

A situação é a seguinte:
Dentro do .jar possui varios arquivos .class, dentre eles, utilizo 3 .class, onde dois funcionam e um outro não, onde apresenta o erro:


14:27:59,648 ERROR [LogInterceptor] Unexpected Error:
java.lang.NoClassDefFoundError: com/empresa/ra/lib/vo/MetricaJavaBean

O erro ocorre na linha do codigo:

MetricaJavaBean voAux = new MetricaJavaBean();

o que eu posso fazer para solucionar esse erro?

Obrigado,

Fabiano.

bom, esse erro é porque ele não está achando o arquivo…
você fez o import completo? até o ultimo pacote??
tem certeza que a classe está lá?

faloww

Fiz import certo…

pois se não tivesse certo o eclipse iria reclamar, mas isso não acontece e outra…quando eu faço o CTRL+ESPAÇO aparece todos os metodos dessa classe.

olha o codigo da classe:

package com.empresa.ra.lib.vo;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
 
public class MetricaJavaBean {

  private String metrica;
  private ArrayList periodo;
  private HashMap periodoValor;
  
  public MetricaJavaBean()
  {
  	this.metrica = "";
  	this.periodo = new ArrayList();
  	this.periodoValor = new HashMap();
  }
  
  public String getMetrica() {
		return metrica;
	}
	public void setMetrica(String metrica) {
		this.metrica = metrica;
	}

	public ArrayList getPeriodo() {
		return periodo;
	}
	public void setPeriodo(String periodo) {
		this.periodo.add(periodo);
	}
	
	public void putPeriodoValor(String data, double valor){
		periodoValor.put(data, new Double(valor));
	}
	
	public double getPeriodoValor (Date data)
	{
		Double valor = (Double)periodoValor.get(data);
		double retorno;
		if (valor != null){
			retorno = valor.doubleValue();
		} else {
			retorno = Double.NaN; //se não existir o número, retornar NaN
		}		
		return retorno;
	}
  
}

vc disse q o projeto eh web, como vc esta fazendo o deploy da sua aplicação? qual container esta utilizando?

pq uma coisa é o eclipse encontrar o arquivo dentro de um jar q vc especificou no projeto…outra, é a sua aplicação compilada, utilizar o jar correto…

depois q vc faz o import no eclipse, onde tudo parece estar correto…efetue uma alteração qualquer, como colocar um espaço, e salve…o eclipse ira re-compilar…e aih provavelmente indicará o erro…pq ele não está encontrando o .class

eu perguntei do deploy, pois se vc esta jogando um arquivo war por exemplo dentro do webapps do seu tomcat (se tiver utilizando), precisa verificar se esse jar associado esta indo junto…se, aind com o tomcat, vc estiver utilizando o plug in da sysdeo, teoricamente ele deveria fazer isso sozinho quando vc adiciona os jars ao seu projeto tomcat no eclipse…

bom, passe as infos q eu pedi no inicio do post q vai facilitar…mas de qq forma espero ter ajudado…

falow

Bom,

vou fazer o seguinte…vou colocar o codigo completo aqui aonde está gerando o erro:

public abstract class MetricasConDataBean implements javax.ejb.SessionBean {

	/** 
	 *
	 * <!-- begin-xdoclet-definition --> 
	 * @ejb.interface-method view-type="remote"
	 * <!-- end-xdoclet-definition --> 
	 * @generated
	 *
	 * //TODO: Must provide implementation for bean method stub
	 */

	public void ejbCreate() {
	}

	/** 
	 *
	 * <!-- begin-xdoclet-definition --> 
	 * @ejb.interface-method view-type="remote"
	 * <!-- end-xdoclet-definition --> 
	 * @generated
	 *
	 * //TODO: Must provide implementation for bean method stub
	 */

public ArrayList getMetricaDataCon(
			String[] metricaList, 
			Date dataIni, 
			Date dataFin) throws TechnicalException{
		
		ArrayList retorno = new ArrayList();
		MetricaVo[] metricaRetorno = null;
		//MetricaJavaBean voRetorno[] = null;
		TreeMap metricaMap = new TreeMap();

		SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
		
		Date tempDate = dataIni;
		GregorianCalendar cal = new GregorianCalendar();

		for (int i=0; i<metricaList.length;i++)
		{
		
			DaoFactory df = DaoFactory.getDaoFactory(DaoFactory.DATASOURCE);
		
			try{
				//criando daos de acesso
				IdDadosDao idDadosdao = df.getIdDadosDao(new String[]{});
				IdMetricasDao idMetricasDao = df.getIdMetricasDao(new String[]{});
			
				String[] ids = null;
				//pesquisa os IDs da métrica
				 ids = idMetricasDao.getMetricaIds(metricaList[i]);
				 
				 System.out.println(metricaList[i]);//retirar essa linha
			
				 //pesquisa os valores dos IDs em um período
				 IndicadorVo[] idLista = 
					 idDadosdao.getIdMetricaData(dataIni, dataFin, ids);
			
				 for (int y = 0; y < idLista.length; y++) {
					 String strDate = idLista[y].getPeriodo();
					 cal.set(Integer.parseInt(strDate.substring(0, 4)), 
							 	Integer.parseInt(strDate.substring(4, 6)) - 1, 
								Integer.parseInt(strDate.substring(6, 8)));
					MetricaVo vo = (MetricaVo)metricaMap.get(cal.getTime());
					if (vo == null){
						 vo = idMetricasDao.getMetrica(metricaList[i]);
					}

					 double tempValor = 0;
					 if (Double.isNaN(vo.getIdValor(idLista[y].getId()))){
						 tempValor = idLista[y].getValor();
					 } else {
						 tempValor = idLista[y].getValor() + vo.getIdValor(idLista[y].getId());
					 }
					 vo.setPeriodo(formatter.format(cal.getTime()));
					 vo.putIdValor(idLista[y].getId(), tempValor);
					 metricaMap.put(cal.getTime(), vo);
					 
				 }
				 
				 Iterator it = metricaMap.entrySet().iterator();
				 MetricaJavaBean voAux = new MetricaJavaBean();
				 while (it.hasNext()){
					 Entry entry = (Entry)it.next();
					 MetricaVo vo1 = ((MetricaVo)entry.getValue());
					 //voAux.setMetrica(metricaList[i]);
					 //voAux.setPeriodo(vo1.getPeriodo());
					 //voAux.putPeriodoValor(vo1.getPeriodo(),vo1.getMetricaValue());
					 retorno.add(voAux);
				 }
				 metricaMap = new TreeMap();
			
			} catch (DaoException daoEx){
				throw new TechnicalException("Ocorreu uma exceção ao acessar o banco de dados: ", daoEx);
			}
			
		}

		return (retorno);
		
	}
		
	/** 
	 * @ejb.interface-method view-type="remote"
	 */


}

A questão do arquivo war, está certo, pq quando eu faço qualquer alteração, ela aparece na pagina quando levanto o servidor (jboss).

A sua primeira pergunta eu não entendi, pois estou iniciando com web.


"vc disse q o projeto eh web, como vc esta fazendo o deploy da sua aplicação? qual container esta utilizando? "

Valeu,

Fabiano.

vc ja respondeu sobre o container…eh o JBOSS, q esse sim pode ser chamado de web server…

como vc esta fazendo para “instalar” a sua aplicação dentro do jboss??? eu nao conheço jboss, então não seu qual a estrutura de pastas que ele usa…mas de qq forma o seus jars tem q estar dentro da pasta lib do seu projeto…no tomcat o mais comum eh utilizar a lib dentro do web-inf…

vc deve ter uma pasta lib dentro da pasta da sua aplicação…tente jogar o seu jar la…

mas por vc ter falado q outras duas classe do mesmo jar funcionam…eu acho q deve ser a estrutura de packages (pastas) dentro do seu jar…onde indica o caminho do .class

então…dentro desse mesmo .jar varias classes funcionam…exceto essa MetricaJavaBean, que eu criei, ou melhor, tudo que está dentro desse .jar foi eu que fiz, o problema é que essa unica classe não funciona…

O que é mais engraçado…quando uso em uma classe com main() funciona, agora quando eu vou tentar usar para web, não vai…
Não sei se precisa fazer alguma coisa com o Jboss?

Já exclui a classe e fiz novamente…sem sucesso…

Não sei mais o que fazer…

Valeu,

Fabiano.

cara…acho q vc precisa rever a estrutura de pacotes na sua aplicação…e por enquanto, deixe de lado o uso dos jars…pelo visto só esta complicando sua vida…coloque essas classes dento do seu projeto, no pacote q for adequado…

Mas se eu não utilizar eu vou “quebrar” toda minha estrutura

Mas não é possivel…no mesmo .jar eu consigo utilizar outras duas classes…

O que eu percebi, é que tudo que eu crio novo nesse .jar eu não consigo utilizar no meu projeto web.

bom ja q vc prefere continuar usando os jars…vamos la…

pelo visto vc fez o teste de incluir novas classes no seu jar, e pelo visto vc nao acessa nada alem das duas primeiras q vc inseriu nele…cara, preciso confirmar…os arquivos .class com a mesma estrutura de packages dos seus fontes estão no seu jar???

pq assim, se vc tiver apenas os fontes, o eclipse vai importar, mas vai dar problema quando vc compilar…

Sim…

Está com a mesma estrutura de packages…e para confimar isso eu descompactei o .class no meu desktop…e criou as pastas conforme a estrutura.

O problema não é com a classe pq ela funciona bem em projetos J2SE. Não é com sintaxe pq está certo. Não é com importação p/ o projeto pq se não o eclipse identificava.

Deve ser algum problema com o Jboss, mas eu não sei o que é…

é que eu não consigo anexar o .jar aqui, ai você iria ver que as classes estão todas lá…as que funcionam e a que não funciona.

em relação ao eclipse importar normalmente…não da pra levar isso em muita consideração, pois como eu disse anteriormente…ele pode achar os fontes, mas na hora q complia…o .class ja nao encontra…

verifique as configurações do seu classpath, veja se nao acusa nenhum problema em cima do jar q vc esta tentando utilizar…

sinceramente, nao sei mais em q posso te ajudar…

Eu descobri a causa do problema, mas não a solução. :slight_smile:

Fiz o seguinte teste, criei uma classe dentro do projeto web dentro da package ejb e na hora de levantar o JBOSS ele “matou” essa minha classe.

O JBOSS está matando todas as novas classe que eu tento colocar no projeto.

Alguem sabe como eu posso fazer para solucionar isso?

valeu,

Fabiano.