Oi Pessoal
Eu estou com o seguinte problema
Eu ja fiz algumas aplicações com JSF e Hibernate e agora quero usar spring security
Eu fazia a conexão com o banco de dados com "hibernate.cfg.xml" "HibernateUtil.java" "Dao.java" normalmente
Então vi uns exemplos onde (pelo que eu entendi) se configura a conexão fora do arquivo "hibernate.cfg.xml" no arquivo "META-INF/context.xml" para se usar as mesmas configurações de conexão para o hibernate e o springs.
Primeiro eu resolvi testar essa maneira de configurar a conexão e ver se o hibernate continuava funcionando
Eu adicionei essas configurações no web.xml<resource-ref>
<description>DataSource TesteSpringDataSource</description>
<res-ref-name>jdbc/TesteSpringDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Springs" reloadable="true">
<Resource name="jdbc/TesteSpringDataSource"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/springsecurity?autoReconnect=true" />
</Context>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/springsecurity?autoReconnect=true</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="connection.datasource">java:/comp/env/jdbc/TesteSpringDataSource</property>
12:06:12.755 [main] ERROR o.h.c.DatasourceConnectionProvider - Could not find datasource: java:env/jdbc/TesteSpringDataSource
Initial Session creation failed.org.hibernate.HibernateException: Could not find datasource
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
Exception in thread "main" java.lang.ExceptionInInitializerError
at util.HibernateUtil.<clinit>(HibernateUtil.java:30)
at dao.Dao.<init>(Dao.java:15)
at modelo.Usuario.getDao(Usuario.java:160)
at aplicacao.Teste.main(Teste.java:17)
Caused by: org.hibernate.HibernateException: Could not find datasource
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645) ~[na:1.6.0_17]
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) ~[na:1.6.0_17]
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) ~[na:1.6.0_17]
at javax.naming.InitialContext.lookup(InitialContext.java:392) ~[na:1.6.0_17]
at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:56)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
at util.HibernateUtil.<clinit>(HibernateUtil.java:26)
... 3 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)
... 11 more
at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52) ~[hibernate3.jar:3.2.5.ga]
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) [hibernate3.jar:3.2.5.ga]
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56) [hibernate3.jar:3.2.5.ga]
at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:414) [hibernate3.jar:3.3.1.GA]
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) [hibernate3.jar:3.3.1.GA]
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) [hibernate3.jar:3.3.1.GA]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) [hibernate3.jar:3.3.1.GA]
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859) [hibernate-annotations.jar:3.3.1.GA]
at util.HibernateUtil.<clinit>(HibernateUtil.java:26) [classes/:na]
at dao.Dao.<init>(Dao.java:15) [classes/:na]
at modelo.Usuario.getDao(Usuario.java:160) [classes/:na]
at aplicacao.Teste.main(Teste.java:17) [classes/:na]
Java Result: 1
Eu quero saber se eu configurei alguma coisa errada nesses arquivos ou se eu preciso alterar alguma coisa no meu "Dao.java" ou no "HibernateUtil.java"
Ai vão os códigos completos: web.xml:<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<!-- Spring Security -->
<resource-ref>
<description>DataSource TesteSpringDataSource</description>
<res-ref-name>jdbc/TesteSpringDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/Springs" reloadable="true">
<Resource name="jdbc/TesteSpringDataSource"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/springsecurity?autoReconnect=true" />
</Context>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.datasource">java:/comp/env/jdbc/TesteSpringDataSource</property>
<mapping class="modelo.Permissoes" />
<mapping class="modelo.Usuario" />
</session-factory>
</hibernate-configuration>
package util;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.Session;
public class HibernateUtil {
private static final Session session;
public HibernateUtil() { }
static {
try {
session = new AnnotationConfiguration().configure().buildSessionFactory().openSession();
} catch (Throwable ex) {
System.err.println("Initial Session creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession() {
return session;
}
}
package dao;
import java.util.ArrayList;
import util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
public class Dao<DaoClass> {
private Class persistentClass;
private Session session = HibernateUtil.getSession();
private Transaction transaction = session.getTransaction();
public Dao(Class persistentClass) {
this.transaction = session.getTransaction();
this.persistentClass = persistentClass;
}
public void salvar(DaoClass daoClass) {
transaction.begin();
session.save(daoClass);
transaction.commit();
}
public void salvarAtualizar(DaoClass daoClass) {
transaction.begin();
session.saveOrUpdate(daoClass);
transaction.commit();
}
public void excluir(DaoClass daoClass) {
transaction.begin();
session.delete(daoClass);
transaction.commit();
}
public DaoClass buscar(int id) {
transaction.begin();
return (DaoClass) session.load(persistentClass, id);
}
public ArrayList<DaoClass> getLista() {
transaction.begin();
return (ArrayList<DaoClass>) session.createCriteria(persistentClass).list();
}
public ArrayList<DaoClass> buscarPorCampo(String campo, String valor) {
transaction.begin();
return (ArrayList<DaoClass>) session.createCriteria(persistentClass).add(Restrictions.like(campo, valor)).list();
}
}