I'm testing hibernate using a session facade bean. When I run the createUser method and I pass it an existing username it changes the data in the db, but if I send it a new username/password it does nothing and bombs out on tx.commit(). Here's the offending session facade bean and the stack trace of the exception, and the bean
STACSFacadeBean.java
/*
* File Name: STACSFacade.java
* Author: Jason L. van Brackel
* Created: Jun 11, 2004
*
*/
package com.cimconsultants.STACS.session;
import java.rmi.RemoteException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.cimconsultants.STACS.hibernate.Role;
import com.cimconsultants.STACS.hibernate.User;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.MappingException;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
/**
* @ejb.bean name="STACSFacade"
* jndi-name="STACSFacadeBean"
* type="Stateless"
*
* @ejb.dao class="com.cimconsultants.STACS.session.STACSFacadeDAO"
* impl-class = "com.cimconsultants.STACTS.dao.STACSFacadeDAOImpl"
*
* @ejb.resource-ref res-ref-name = "jdbc/STACS_DS"
* res-type = "javax.sql.Datasource"
* res-auth = "Container"
*
* @jboss.resource-ref res-ref-name = "jdbc/STACS_DS"
* jndi-name = "jdbc/STACS_DS"
*
* @author Jason
* @version 1.0
*/
public class STACSFacadeBean implements SessionBean {
protected SessionContext ctx;
/**
* Sets the session context
* @param javax.ejb.SessionContext the new ctx value
**/
public void setSessionContext(SessionContext ctx) {
this.ctx = ctx;
}
/**
* Unsets the session context
*/
public void unsetSessionContext() {
this.ctx = null;
}
/**
* The ejbCreate method.
*
* @ejb.create-method
**/
public void ejbCreate() throws javax.ejb.CreateException {
}
public void ejbActivate() throws EJBException, RemoteException { // TODO Auto-generated method stub
}
public void ejbPassivate() throws EJBException, RemoteException {
}
public void ejbRemove() throws EJBException, RemoteException {
}
/** * Create a new user to the system * * @author Jason L. van Brackel * @version 1.0 * @ejb.interface-method */ public void createUser(String username, String password, String role) throws HibernateException, MappingException, NamingException { SessionFactory factory = null; Session session = null; // Set up the hibernate session factory = getSessionFactory(); session = factory.openSession(); Transaction tx = session.beginTransaction(); User user = (User)session.get(User.class, username); if(user == null) { user = new User(); } user.setUsername(username); user.setPassword(password); session.saveOrUpdate(user); try { tx.commit(); } catch (Exception e) { e.printStackTrace(); } finally { session.close(); } }
private SessionFactory getSessionFactory() throws NamingException {
Hashtable props = new Hashtable();
props.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.put(InitialContext.PROVIDER_URL, "jnp://127.0.0.1:1099");
InitialContext initialContext = new InitialContext(props);
SessionFactory factory = (SessionFactory)initialContext.lookup("java:/HibernateFactory");
return factory;
}
}
User.java
package com.cimconsultants.STACS.hibernate;
import java.util.Collections;
import java.util.Set;
/**
* Represents a User in the system
*
* @hibernate.class table="Users"
*
* @author Jason L. van Brackel
* @version 1.0
*/
public class User {
private String username = null; // Primary Key
private String password = null;
private Set roles = Collections.EMPTY_SET;
public User() {}
/**
* The User's password
*
* @hibernate.property column = "Password"
* type = "string"
*
*
* @return String
*
* @return String
* @author Jason L. van Brackel
* @return String password
**/
public String getPassword() {
return password;
}
/**
* Sets the User's password
*
*
* @author Jason L. van Brackel
* @param String password
**/
public void setPassword(String password) {
this.password = password;
}
/**
* Returns the user's username
*
* @hibernate.id generator-class = "assigned"
* type="string"
* column="username"
*
* @author Jason L. van Brackel
* @return String username
**/
public String getUsername() {
return username;
}
/**
* Sets the user's username
*
* @author Jason L. van Brackel
* @param String username
**/
public void setUsername(String username) {
this.username = username;
}
/**
* The users roles
*
* @hibernate.set table = "UserRoles"
* cascade = "all"
* inverse = "true"
* order-by = "username"
*
* @hibernate.collection-key column="username"
*
* @hibernate.collection-one-to-many class="com.cimconsultants.STACS.hibernate.Role"
*
* @return Set
* @author Jason L. van Brackel
* @return Set of Role objects
**/
public Set getRoles() {
return roles;
}
/**
* Sets the User's password
*
*
* @author Jason L. van Brackel
* @param Set of Role objects
**/
public void setRoles(Set roles) {
this.roles = roles;
}
}
Stack Trace
net.sf.hibernate.HibernateException: Batch update row count wrong: 0
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:65)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:122)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2417)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2368)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2236)
at net.sf.hibernate.transaction.JTATransaction.commit(JTATransaction.java:52)
at com.cimconsultants.STACS.session.STACSFacadeBean.createUser(STACSFacadeBean.java:115)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:683)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:72)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:84)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:267)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:128)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:118)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.StatelessSessionContainer.internalInvoke(StatelessSessionContainer.java:331)
at org.jboss.ejb.Container.invoke(Container.java:700)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispatcher.java:284)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:546)
at org.jboss.invocation.local.LocalInvoker.invoke(LocalInvoker.java:101)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:90)
at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:46)
at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:45)
at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:100)
at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:85)
at $Proxy35.createUser(Unknown Source)
at com.cimconsultants.STACS.actions.UserActions.perform(UserActions.java:41)
at com.cimconsultants.web.html.HTMLActionSupport.perform(HTMLActionSupport.java:40)
at com.cimconsultants.web.SimpleRequestProcessor.processRequest(SimpleRequestProcessor.java:89)
at com.cimconsultants.STACS.controllers.DelegationServlet.process(DelegationServlet.java:132)
at com.cimconsultants.STACS.controllers.DelegationServlet.doPost(DelegationServlet.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at com.cimconsultants.STACS.filters.DelegationFilter.doFilter(DelegationFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.jboss.web.tomcat.security.JBossSecurityMgrRealm.invoke(JBossSecurityMgrRealm.java:220)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:553)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.jboss.web.tomcat.tc4.statistics.ContainerStatsValve.invoke(ContainerStatsValve.java:76)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2417)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:65)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:577)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:197)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
at java.lang.Thread.run(Thread.java:534)
|