Problem with HibernateInterceptor
I am trying HibernateInterceptor and HibernateTemplate. HibernateTemplate works like a charm. No luck with HibernateInterceptor though. Here is my spring config file:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:data/projectx</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>
</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<value>projectx.hbm.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.HSQLDialect</prop>
</props>
</property>
</bean>
<bean id="myHibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="userDAOTarget" class="com.projectx.dao.UserDAOHibernateInterceptorImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="userDAO" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>com.projectx.dao.UserDAO</value>
</property>
<property name="interceptorNames">
<list>
<value>myHibernateInterceptor</value>
<value>userDAOTarget</value>
</list>
</property>
</bean>
</beans>
Here is the hibernate.properties file:
Code:
hibernate.dialect=net.sf.hibernate.dialect.HSQLDialect
hibernate.connection.driver_class=org.hsqldb.jdbcDriver
hibernate.connection.url=jdbc:hsqldb:data/projectx
hibernate.connection.username=sa
hibernate.connection.password=
Here is the error that I get:
Code:
18:57:20,009 INFO Environment:469 - Hibernate 2.1.6
18:57:20,069 INFO Environment:503 - loaded properties from resource hibernate.properties: {hibernate.connection.username=sa, hibernate.connection.password=, hibernate.cglib.use_reflection_optimizer=true, hibernate.dialect=net.sf.hibernate.dialect.HSQLDialect, hibernate.connection.url=jdbc:hsqldb:data/projectx, hibernate.connection.driver_class=org.hsqldb.jdbcDriver}
18:57:20,079 INFO Environment:529 - using CGLIB reflection optimizer
18:57:20,439 INFO Binder:229 - Mapping class: com.projectx.model.User -> user
18:57:20,620 INFO Configuration:627 - processing one-to-many association mappings
18:57:20,620 INFO Configuration:636 - processing one-to-one association property references
18:57:20,620 INFO Configuration:661 - processing foreign key constraints
18:57:20,670 INFO Dialect:82 - Using dialect: net.sf.hibernate.dialect.HSQLDialect
18:57:20,680 INFO SettingsFactory:63 - Use outer join fetching: true
18:57:20,690 INFO ConnectionProviderFactory:53 - Initializing connection provider: org.springframework.orm.hibernate.LocalDataSourceConnectionProvider
18:57:20,700 INFO TransactionManagerLookupFactory:33 - No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)
18:57:21,561 WARN JDBCExceptionReporter:38 - SQL Error: -33, SQLState: S1000
18:57:21,561 ERROR JDBCExceptionReporter:46 - Access is denied
18:57:21,581 WARN SettingsFactory:96 - Could not obtain connection metadata
java.sql.SQLException: Access is denied
at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
at org.hsqldb.jdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132)
at org.springframework.orm.hibernate.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:59)
at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:73)
at net.sf.hibernate.cfg.Configuration.buildSettings(Configuration.java:1155)
at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:789)
at org.springframework.orm.hibernate.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:467)
at org.springframework.orm.hibernate.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:405)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:991)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:208)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:136)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:224)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:284)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
at com.projectx.dao.UserDAOTestAbstract.setUp(UserDAOTestAbstract.java:25)
at junit.framework.TestCase.runBare(TestCase.java:125)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
18:57:21,591 INFO SettingsFactory:103 - Use scrollable result sets: false
18:57:21,591 INFO SettingsFactory:106 - Use JDBC3 getGeneratedKeys(): false
18:57:21,591 INFO SettingsFactory:109 - Optimize cache for minimal puts: false
18:57:21,591 INFO SettingsFactory:118 - Query language substitutions: {}
18:57:21,601 INFO SettingsFactory:129 - cache provider: net.sf.hibernate.cache.EhCacheProvider
18:57:21,601 INFO Configuration:1116 - instantiating and configuring caches
18:57:21,952 INFO SessionFactoryImpl:118 - building session factory
18:57:22,602 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
18:57:22,783 WARN SQLErrorCodesFactory:274 - Error while getting database metadata
org.springframework.jdbc.support.MetaDataAccessException: Error while getting connection; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC connection; nested exception is java.sql.SQLException: Access is denied
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC connection; nested exception is java.sql.SQLException: Access is denied
java.sql.SQLException: Access is denied
at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
at org.hsqldb.jdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:165)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:144)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:120)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:93)
at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:209)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:115)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:96)
at org.springframework.orm.hibernate.SessionFactoryUtils.newJdbcExceptionTranslator(SessionFactoryUtils.java:122)
at org.springframework.orm.hibernate.HibernateAccessor.getJdbcExceptionTranslator(HibernateAccessor.java:158)
at org.springframework.orm.hibernate.HibernateAccessor.afterPropertiesSet(HibernateAccessor.java:201)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:991)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:208)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:136)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:230)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:284)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
at com.projectx.dao.UserDAOTestAbstract.setUp(UserDAOTestAbstract.java:25)
at junit.framework.TestCase.runBare(TestCase.java:125)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
18:57:22,863 WARN SQLErrorCodesFactory:274 - Error while getting database metadata
org.springframework.jdbc.support.MetaDataAccessException: Error while getting connection; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC connection; nested exception is java.sql.SQLException: Access is denied
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC connection; nested exception is java.sql.SQLException: Access is denied
java.sql.SQLException: Access is denied
at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
at org.hsqldb.jdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:165)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:144)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:120)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:93)
at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:209)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:115)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:96)
at org.springframework.orm.hibernate.SessionFactoryUtils.newJdbcExceptionTranslator(SessionFactoryUtils.java:122)
at org.springframework.orm.hibernate.HibernateAccessor.getJdbcExceptionTranslator(HibernateAccessor.java:158)
at org.springframework.orm.hibernate.HibernateAccessor.afterPropertiesSet(HibernateAccessor.java:201)
at org.springframework.orm.hibernate.HibernateTemplate.<init>(HibernateTemplate.java:113)
at org.springframework.orm.hibernate.support.HibernateDaoSupport.createHibernateTemplate(HibernateDaoSupport.java:87)
at org.springframework.orm.hibernate.support.HibernateDaoSupport.setSessionFactory(HibernateDaoSupport.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:684)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:588)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:720)
at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:747)
at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:736)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:797)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:271)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:208)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:136)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:230)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:284)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:80)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:56)
at com.projectx.dao.UserDAOTestAbstract.setUp(UserDAOTestAbstract.java:25)
at junit.framework.TestCase.runBare(TestCase.java:125)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
18:57:23,213 WARN JDBCExceptionReporter:38 - SQL Error: -33, SQLState: S1000
18:57:23,223 ERROR JDBCExceptionReporter:46 - Access is denied
18:57:23,233 WARN JDBCExceptionReporter:38 - SQL Error: -33, SQLState: S1000
18:57:23,233 ERROR JDBCExceptionReporter:46 - Access is denied
18:57:23,233 ERROR JDBCExceptionReporter:38 - Cannot open connection
java.sql.SQLException: Access is denied
at org.hsqldb.jdbc.jdbcUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
at org.hsqldb.jdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:156)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:132)
at org.springframework.orm.hibernate.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:59)
at net.sf.hibernate.impl.BatcherImpl.openConnection(BatcherImpl.java:286)
at net.sf.hibernate.impl.SessionImpl.connect(SessionImpl.java:3326)
at net.sf.hibernate.impl.SessionImpl.connection(SessionImpl.java:3286)
at net.sf.hibernate.impl.BatcherImpl.prepareQueryStatement(BatcherImpl.java:65)
at net.sf.hibernate.loader.Loader.prepareQueryStatement(Loader.java:779)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:265)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
at net.sf.hibernate.loader.Loader.doList(Loader.java:1033)
at net.sf.hibernate.loader.Loader.list(Loader.java:1024)
at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:854)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1544)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1521)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1517)
at com.projectx.dao.UserDAOHibernateInterceptorImpl.findUser(UserDAOHibernateInterceptorImpl.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.framework.AopProxyUtils.invokeJoinpointUsingReflection(AopProxyUtils.java:61)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:116)
at org.springframework.orm.hibernate.HibernateInterceptor.invoke(HibernateInterceptor.java:163)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:138)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:152)
at $Proxy0.findUser(Unknown Source)
at com.projectx.dao.UserDAOTestAbstract.setUp(UserDAOTestAbstract.java:28)
at junit.framework.TestCase.runBare(TestCase.java:125)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
Here is the code:
Code:
/*
* Created on Sep 3, 2004
* Created by Prashant
*/
package com.projectx.dao;
import junit.framework.TestCase;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.projectx.model.User;
/**
* @author Prashant
*
*/
public abstract class UserDAOTestAbstract extends TestCase {
private UserDAO userDAO;
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(getApplicationContextPath());
this.userDAO = (UserDAO) ctx.getBean("userDAO");
User user = userDAO.findUser("firstuser");
if (user != null) userDAO.deleteUser(user);
user = userDAO.findUser("firstuser-changed");
if (user != null) userDAO.deleteUser(user);
}
public abstract String getApplicationContextPath();
public static void main(String[] args) {
junit.textui.TestRunner.run(UserDAOTestAbstract.class);
}
/*
* @see TestCase#tearDown()
*/
protected void tearDown() throws Exception {
super.tearDown();
}
public void testCreateAndFindUser() {
// See if user already exists
User user1 = userDAO.findUser("firstuser");
if (user1 != null) {
// user exists, check if it correct user
assertEquals(user1.getUserName(), "firstuser");
// delete the user to test create
userDAO.deleteUser(user1);
}
// create user
User user = new User();
user.setUserName("firstuser");
user.setPassword("firstuserpassword");
userDAO.createUser(user);
// find user
User user2 = userDAO.findUser("firstuser");
// make sure they are same
assertEquals(user, user2);
// delte user
userDAO.deleteUser(user);
}
public void testUpdateUser() {
// See if user already exists
User user1 = userDAO.findUser("firstuser");
if (user1 != null) {
// user exists, check if it correct user
assertEquals(user1.getUserName(), "firstuser");
// delete the user to test create
userDAO.deleteUser(user1);
}
// create user
User user = new User();
user.setUserName("firstuser");
user.setPassword("firstuserpassword");
userDAO.createUser(user);
// change user
user.setUserName("firstuser-changed");
user.setPassword("firstuserpassword-changed");
// update user
userDAO.updateUser(user);
// find again
User user2 = userDAO.findUser("firstuser-changed");
// are the updates there?
assertEquals(user, user2);
// delte user
userDAO.deleteUser(user);
}
public void testDuplicateInsert() {
// create user
User user = new User();
user.setUserName("firstuser");
user.setPassword("firstuserpassword");
userDAO.createUser(user);
// create another user, duplicate of first one
User user1 = new User();
user1.setUserName("firstuser");
user1.setPassword("firstuserpassword");
try {
userDAO.createUser(user1);
} catch (Exception e){
// exception must be raise, as test is trying to insert duplicate rows
assertTrue(true);
return;
}
// if exception was not raised, then test failed
assertTrue(false);
}
public void testDuplicateUpdate() {
// create one user
User user = userDAO.findUser("firstuser");
if (user == null) {
user = new User();
user.setUserName("firstuser");
user.setPassword("firstuserpassword");
userDAO.createUser(user);
}
// create another
User user1 = userDAO.findUser("firstuser-changed");
if (user1 == null) {
user1 = new User();
user1.setUserName("firstuser-changed");
user1.setPassword("firstuserpassword-changed");
userDAO.createUser(user1);
}
// find the first one
User user2 = userDAO.findUser("firstuser");
// change it to match values of second one
user2.setUserName("firstuser-changed");
user2.setPassword("firstuserpassword-changed");
// update it, should result in exception
try {
userDAO.updateUser(user2);
} catch (Exception e) {
assertTrue(true);
return;
}
// if it reaches here, then test failed as it allowed to update a user to be with same username as another user.
assertTrue(false);
}
}
Code:
/*
* Created on Sep 3, 2004
* Created by Prashant
*/
package com.projectx.dao;
/**
* @author Prashant
*
*/
public class UserDAOTestHibernateInterceptor extends UserDAOTestAbstract {
/*
* (non-Javadoc)
*
* @see com.projectx.dao.UserDAOTestAbstract#getApplicationContextPath()
*/
public String getApplicationContextPath() {
return ("applicationContext-hibernate-interceptor.xml");
}
}
Code:
/*
* Created on Sep 3, 2004
* Created by Prashant
*/
package com.projectx.dao;
import java.util.Iterator;
import java.util.List;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import org.springframework.orm.hibernate.SessionFactoryUtils;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import com.projectx.model.User;
/**
* @author Prashant
*
*/
public class UserDAOHibernateInterceptorImpl extends HibernateDaoSupport
implements UserDAO {
/**
* @param userName
* @return User object for the given userName
*/
public User findUser(String userName) {
Session session = SessionFactoryUtils.getSession(getSessionFactory(),
false);
try {
List list = session.find("from User user where user.userName=?", userName, Hibernate.STRING);
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
User user = (User) iterator.next();
return user;
}
return null;
} catch (HibernateException ex) {
throw SessionFactoryUtils.convertHibernateAccessException(ex);
}
}
/**
* @param user
* User object to be updated
*/
public void updateUser(User user) {
return;
}
/**
* @param user
* User object to be created
*/
public void createUser(User user) {
Session session = SessionFactoryUtils.getSession(getSessionFactory(),
false);
try {
session.save(user);
return;
} catch (HibernateException ex) {
throw SessionFactoryUtils.convertHibernateAccessException(ex);
}
}
/**
* @param user
* User object to be deleted
*/
public void deleteUser(User user) {
return;
}
}
The hibernate mapping file is:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.projectx.model.User" table="user">
<meta attribute="class-description">
Represents a user.
</meta>
<id name="id" type="int" column="user_id">
<meta attribute="scope-set">protected</meta>
<generator class="native"/>
</id>
<property name="userName" type="string">
<meta attribute="use-in-tostring">true</meta>
<column name="username" not-null="true" unique="true"/>
</property>
<property name="password" type="string">
<meta attribute="use-in-tostring">true</meta>
<column name="password" not-null="true"/>
</property>
</class>
</hibernate-mapping>
I am using spring 1.1 and hibernate 2.1.6.
I am using the sample for HibernateInterceptor from Spring documentation as a starting point.
Thanks,
Prashant Rane
Resolve the issue: Stupid eclipse ant editor as XML editor
I was using Eclipse's ant editor as XML editor to edit spring's config files. I was also using built-in formating functionality to format the XML file. Well, the stupid thing added a newline at the very wrong place, my dataSource's password value. No wonder it was saying access denied. I thought, it wasn't getting intercepted to set correct sessionFactory.
Code:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:data/projectx</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
Above fragment get's turned into following fragment after applying eclipse auto format:
Code:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:data/projectx</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>
</value>
</property>
</bean>
Notice the newline in password value. That's why I was getting access denied error.