Erro de Conexão iReport 3.7.4 com Spring e Hibernate

Configurando classpath com Ireport:

-> Ferramentas
-> Opções
-> Classpath
-> addFolder [ coloquei todos os diretórios (pacotes) da aplicação ]

Configurando conexão com Ireport:

-> Connections / Datasources
-> New
-> Spring loaded Hibernate connection
-> Next

->Name: conexao
->Spring configuration: applicationContext.xml,Banco.hbm.xml
->Session Factory Bean ID: sessionFactory

[b]Mensagem de Erro quando clico no botão test:

IOException parsing XML document from class path resource[Banco.hbm.xml];nested exception is java.net.UnknownHostException:hibernate.sourceforge.net[/b]

[code]package aop;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class OperacaoAdvice implements MethodInterceptor {

public Object invoke(MethodInvocation methodInvocation) throws Throwable {

	System.out.println("AOP -> Método chamado: " + methodInvocation.getMethod().getName());
	Object object = null;
	
	try {
		object = methodInvocation.proceed();				
		System.out.println(object);
		
		return object;
		
	}catch (Exception e) {
		// TODO: handle exception
	}
	
	return object;
}

}

package aop;
import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class RecuperacaoListasAdvice implements
AfterReturningAdvice {
public void afterReturning(Object returnValue, Method metodo,
Object[] arg2, Object target) throws Throwable {

	Object lista = returnValue;
	System.out.println("AOP -> A lista retornou " + lista + " objetos.");
	
}

}

<?xml version="1.0" encoding="UTF-8"?>
<class name="Banco" table="TB_BANCO" lazy="false">
	<id name="id" type="java.lang.Long" column="ID">
		<generator class="native" />
	</id>
	<property name="nome" column="NOME" type="java.lang.String"
		length="50" unique="true" />
</class>

package banco;

import java.io.Serializable;

@SuppressWarnings(“serial”)
public class Banco implements Serializable {

private Long id;
private String nome;

public Banco() {

}

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String toString() {
	return id + " - " + nome;
}

}

package banco;

public interface BancoDao {

public void salvarBanco(Banco banco);	

}

package banco;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class BancoImp extends HibernateDaoSupport implements BancoDao {

@Override
public void salvarBanco(Banco banco) {
	getHibernateTemplate().saveOrUpdate(banco);
}

}

<?xml version="1.0" encoding="UTF-8"?>
<!-- *************************************************************************************************** 
Configuração AOP: spring framework
**************************************************************************************************** -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	 <property name="driverClassName"> <value>org.hsqldb.jdbcDriver</value> 
		</property> <property name="url"> <value>jdbc:hsqldb:database/tutorial/db_sistema</value> 
		</property> <property name="username"> <value>sa</value> </property> <property 
		name="password"> <value></value> </property>					 
</bean>

<bean id="sessionFactory"
	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	<property name="dataSource">
		<ref bean="dataSource" />
	</property>
	<property name="mappingResources">
		<list>
			<value>banco/Banco.hbm.xml</value>
		</list>
	</property>
	<property name="hibernateProperties">
		<props>
			<prop key="hibernate.max_fetch_depth">2</prop>
			<prop key="hibernate.hbm2ddl.auto">create</prop>
			<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
			<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop> 
			<prop key="hibernate.show_sql">true</prop>
			<prop key="hibernate.current_session_context_class">thread</prop>
			<prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
			<prop key="hibernate.c3p0.minPoolSize">5</prop>
			<prop key="hibernate.c3p0.maxPoolSize">20</prop>
			<prop key="hibernate.c3p0.timeout">600</prop>
			<prop key="hibernate.c3p0.max_statement">50</prop>
			<prop key="hibernate.c3p0.testConnectionOnCheckout">false</prop>
		</props>
	</property>
</bean>

<bean id="transactionManager"
	class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	<property name="sessionFactory">
		<ref bean="sessionFactory" />
	</property>
</bean>
		
<!-- *************************************************************************************************** 
Configuração AOP: spring framework
**************************************************************************************************** -->

<bean id="operacaoAdvice" class="aop.OperacaoAdvice"></bean>
<bean id="recuperacaoListasAdvice" class="aop.RecuperacaoListasAdvice"></bean>

<bean id="operacaoPointcutAdvisor"
	class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
	<property name="mappedNames">
		<list>
			<value>save*</value>
			<value>remove*</value>
		</list>
	</property>
	<property name="advice">
		<ref bean="operacaoAdvice" />
	</property>
</bean>

<bean id="recuperacaoListasPointcutAdvisor"
	class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
	<property name="mappedName">
		<value>pegar*</value>
	</property>
	<property name="advice">
		<ref bean="recuperacaoListasAdvice" />
	</property>
</bean>	

	
<!-- *************************************************************************************************** 
Configuração AOP: banco 
**************************************************************************************************** -->	

<bean id="bancoImpFachadaTarget" class="banco.BancoImp">
	<property name="sessionFactory">
		<ref local="sessionFactory" />
	</property>
</bean>

<bean id="bancoFachadaService" class="org.springframework.aop.framework.ProxyFactoryBean">
	<property name="target">
		<ref bean="bancoImpFachadaTarget" />
	</property>
</bean>

package principal;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import banco.Banco;
import banco.BancoDao;
import banco.BancoImp;

public class Sistema {

private BancoDao bancoDao;
private Banco banco;

private static ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
		"classpath:principal/applicationContext.xml");

public Sistema() {
	
	banco = new Banco();
	banco.setNome("Bradesco");
	
	bancoDao = (BancoImp) applicationContext
	.getBean("bancoFachadaService");
	bancoDao.salvarBanco(banco);
	
	System.out.println(banco);
}

public static void main(String[] args) {
	Sistema sistema = new Sistema();
	
}

}[/code]
Bibliotecas utilizadas:
antlr-2.7.6
cleanimports
concurrent-1.3.2
hibernate3
jaas
jbosscache-core-3.2.1.GA
jgroups-2.2.8
oscache-2.1
spring-aop
spring-hibernate
syndiag2
asm
commons-collections-3.1
connector
hibernate-annotations
jacc-1_0-fr
jboss-common
jstl
proxool-0.8.3
spring-beans
spring-orm
versioncheck
asm-attrs
commons-dbcp
dom4j-1.6.1
hibernate-commons-annotations
javassist-3.9.0.GA
jboss-jmx
jta-1.1
slf4j-api-1.6.1
spring-context
spring-remoting
xerces-2.6.2
c3p0-0.9.0
commons-logging-1.0.4
ehcache-1.1
hsqldb
jaxen-1.1-beta-7
jboss-system
log4j-1.2.16
slf4j-simple-1.6.1
spring-core
standard
xml-apis
cglib-2.1.3
commons-pool
ejb3-persistence
infinispan-core-4.0.0.FINAL
jboss-cache
jdbc2_0-stdext
mysql-connector-java-3.1.10-bin
spring
spring-dao
swarmcache-1.0rc2


vc não deve especificar o "Banco.hbm.xml"

o mapeamento é feito pelo spring, que vc já especificou na bean "sessionFactory" do applicationContext.xml

Fiz a alteraçã o mas agora parece que ele não encontrou a classe Banco.


O meu classpath está configurado com todos os pacotes,
mas não consigo encontrar o que falta.


Paulo,

No classpath do iReport, o invés de colocar:
D:\CactchusDesktop\SpringIreport\appClientModule\banco
D:\CactchusDesktop\SpringIreport\appClientModule\principal
deixe apenas:
D:\CactchusDesktop\SpringIreport\appClientModule
pois:
ao procurar a classe “banco.Banco”, o java usará “D:\CactchusDesktop\SpringIreport\appClientModule” e adicionará “\banco\Banco” para encontrar o programa já compilado “D:\CactchusDesktop\SpringIreport\appClientModule\banco\Banco.class”

note que é a pasta raiz dos “.class” e não dos “.java”

Agora estou mais próximo,

Fiz as alterações seguintes

D:\CactchusDesktop\SpringIreport\

(tive que deixar no classpath do iReport pois deixei o arquivo aplicationContext.xml neste diretório se eu tira do claspath ele dá mensagem de erro dizendo que não encontrou aplicationContext.xml)

D:\CactchusDesktop\SpringIreport\appClientModule
(tirando ou não no classpath do iReport não deu alterações)

D:\CactchusDesktop\SpringIreport\build\classes
(tive que deixar no classpath do iReport pois se eu retirar ele não encontra a classe banco.Banco)

Mas agora ele deixa o seguinte erro com a mensagem:

Cannot open connection

Agora estou mais próximo,

Fiz as alterações seguintes

D:\CactchusDesktop\SpringIreport\

(tive que deixar no classpath do iReport pois deixei o arquivo aplicationContext.xml neste diretório se eu tira do claspath ele dá mensagem de erro dizendo que não encontrou aplicationContext.xml)

D:\CactchusDesktop\SpringIreport\appClientModule
(tirando ou não no classpath do iReport não deu alterações)

D:\CactchusDesktop\SpringIreport\build\classes
(tive que deixar no classpath do iReport pois se eu retirar ele não encontra a classe banco.Banco)

Mas agora ele deixa o seguinte erro com a mensagem:

Cannot open connection




Alguém que já fez Conexão iReport com Spring e Hibernate,
e tem referencias e materiais se puderem disponibilizar agradeço.

Paulo,

Vc está no caminho certo agora. Deve ter alguma outra coisa errada que está impossibilitando a conexão com o banco de dados.
Percebi algumas coisas que pode ser o agente causador. Veja:

  1. Nas propriedades do hibernate informadas no applicationContext.xml, vc está configurando duplamente o dialeto do bd. (hibernate.dialect)

  2. Vc está utilizando o hsqldb localmente e ainda está tentando fazer pooling de conexões determinando no minimo 5 conexões abertas. Localmente, o hsql só trabalha com uma única conexão. Caso vc precise mesmo de mais de uma conexão simultânea, vc deverá instanciar um server do hsqldb. Pelo que vi, vc está apenas fazendo testes para aprendizado, não é? Assim sendo continue a trabalhar localmente mesmo e utilize um outra classe para DataSource.
    Veja exemplo para testes:[code]<bean id=“hibernateProperties”
    class=“org.springframework.beans.factory.config.PropertiesFactoryBean”>
    <property name=“properties”>
    <props>
    <prop key=“hibernate.jdbc.batch_size”>0</prop>
    <prop key=“hibernate.dialect”>org.hibernate.dialect.HSQLDialect</prop>
    <prop key=“hibernate.cache.provider_class”>org.hibernate.cache.NoCacheProvider</prop>
    <prop key=“hibernate.show_sql”>true</prop>
    <prop key=“hibernate.format_sql”>true</prop>
    <!-- <prop key=“hibernate.max_fetch_depth”>3</prop>–>
    <!-- <prop key=“hibernate.connection.autocommit”>true</prop>–>
    <prop key=“hibernate.hbm2ddl.auto”>update</prop>
    </props>
    </property>
    </bean>

    <bean id=“dataSource” class=“org.springframework.jdbc.datasource.SingleConnectionDataSource”
    destroy-method=“destroy” lazy-init=“false”>
    <property name=“driverClassName” value=“org.hsqldb.jdbcDriver”/>
    <property name=“url” value=“jdbc:hsqldb:file:/javas/hsqldbs/rnegreal”/>
    <property name=“username” value=“sa”/>
    <property name=“password” value=""/>
    <property name=“suppressClose” value=“true”/>
    </bean> [/code]

  3. Vc está “misturando as bolas” com os gerenciadores de conexões. Ou vc usa o dbcp, ou vc usa o c3p0. Como eu disse no item 2, esqueça, por ora, multiplas conexões.

  4. O arquivo “banco/Banco.hbm.xml” deve estar no classpath do iReports para que ele o encontre.

Não desista, continue tentando. Se precisar volte a postar aqui.
Boa sorte.

Ok cheguei do trabalho agora e vou dar uma olhada,
quando der certo coloco a solução resolvida no post.