You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by James Carman <ja...@carmanconsulting.com> on 2006/01/27 01:14:32 UTC

RE: hibernate with tapestry

Didn't someone answer your question?  I thought they told you to include
dom4j.jar in the WEB-INF/lib directory to fix this.

-----Original Message-----
From: news [mailto:news@sea.gmane.org] On Behalf Of Ron Piterman
Sent: Sunday, February 26, 2006 6:34 PM
To: tapestry-user@jakarta.apache.org
Subject: Re: hibernate with tapestry

damn, and I thought this is a tapestry mailing list...
but I guess I must look for tapestry help at cayene mailing list... *g*
Ron


david b wrote:
> Hello, 
> 
> I starting to make a simple application using Tapestry 3.1 I have tomcat
5.5.7 using JDK 1.5.
> My next step was to integrate a call to hibernate but this part is not
working yet.
> 
> Going to this url: http://localhost:8080//firstApp/app?service=page/Login
> 
> I am getting this error: org.apache.tapestry.ApplicationRuntimeException
> Unable to invoke method doLogin on
com.entercite.finance.model.abstrt.LoginComponent$Enhance_0@b23d12[Login]:
null
> 
> java.lang.reflect.InvocationTargetException
> java.lang.NoClassDefFoundError
> org/dom4j/io/SAXReader
> 
> Stack Trace:
>     * org.hibernate.util.XMLHelper.createSAXReader(XMLHelper.java:35)
>     * org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1218)
>     * org.hibernate.cfg.Configuration.configure(Configuration.java:1162)
>     * org.hibernate.cfg.Configuration.configure(Configuration.java:1148)
>     *
com.entercite.finance.persistence.HibernateFactory.buildSessionFactory(Hiber
nateFactory.java:26)
>     *
com.entercite.finance.persistence.abstrt.AbstractDao.<init>(AbstractDao.java
:21)
>     *
com.entercite.finance.persistence.LoginDaoImpl.<init>(LoginDaoImpl.java:12)
>     *
com.entercite.finance.model.abstrt.LoginComponent.isValidLogin(LoginComponen
t.java:52)
>     *
com.entercite.finance.model.abstrt.LoginComponent.doLogin(LoginComponent.jav
a:35) 
>     
> Here is the development structure and code. 
> 
> C:\
>    |-main
>       |
>       |-HelloTapestry
>       |  |-ant
>       |  |--build.bat
>       |
>       |-build
>       |   |-log
>       |   |-WEB-INF
>       |       |-web.xml
>       |       |-classes
>       |       |  |-hibernate.cfg.xml
>       |       |-lib (Copy of all from lib)
>       |       |-web
>       |          |-Home.html
>       |
>       |-Config
>       |   |-hibernate.cfg.xml
>       |
>       |-deploy (firstApp.war)
>       |
>       |-lib
>       |   |-tapestry-3.0.jar, tapestry-contrib-3.0.jar, ognl-2.6.3.jar,
log4j-1.2.11.jar
>       |   |-A bunch of apache commons jars
>       |   |-jakarta-oro-2.0.6.jar, javassist-2.5.1.jar, spring.jar,
hibernate3.jar, bsf-2.3.0.jar
>       |
>       |-src
>          |
>          |-context
>          |   |-Login.html
>          |   |-login.page
>          |   |-Main.html
>          |   |
>          |   |-WEB-INF
>          |        |-web.xml
>          |-java
>             |-com
>                |-entercite
>                     |-finance
>                         |
>                         |-model
>                         |   |-Login.java
>                         |   |-abstrt
>                         |       |-LoginComponent.java
>                         |-persistence
>                             |-HibernateFactory.java
>                             |-LoginDaoImpl.java
>                             |
>                             |-abstrt
>                             |   |-AbstractDao.java
>                             |-exception
>                             |   |-DataAccessLayerException.java
>                             |-intrface
>                                 |-ILoginDao.java
> 
> 
> web.xml
>
----------------------------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE web-app
>       PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
>       "http://java.sun.com/dtd/web-app_2_3.dtd">
> 
> <web-app>
>   <display-name>Tutorial: Test</display-name>
>   <servlet>
>     <servlet-name>app</servlet-name>
>     <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
>     <load-on-startup>0</load-on-startup>
>   </servlet>
>   <servlet-mapping>
>     <servlet-name>app</servlet-name>
>     <url-pattern>/app</url-pattern>
>   </servlet-mapping>
> </web-app>
> 
>
----------------------------------------------------------------------------
> 
> login.html
>
----------------------------------------------------------------------------
> <html jwcid="@Shell" title="Login">
> <body>
> 
> <span jwcid="@Conditional" condition="ognl:message">
>   <font color="red">
>     <span jwcid="@Insert" value="ognl:message"> Error Message </span>
>   </font>
> </span>
> 
> <p/>
> 
> <DEFANGED_form jwcid="@Form" listener="ognl:listeners.loginComponent">
>   <table>
>     <tr>
>       <th>User Name:</th>
>       <td>
>         <input type="text" jwcid="@TextField"
>            value="ognl:login.userName"
>            size="30"/>
>       </td>
>     </tr>
>     <tr>
>       <th>Password:</th>
>       <td>
>         <input type="password" jwcid="@TextField"
>            value="ognl:login.password"
>            hidden="ognl:true"
>            size="30"/>
>       </td>
>     </tr>
>     <tr>
>       <td><input type="submit" value="Login"/></td>
>     </tr>
>   </table>
> </form>
> 
> <hr/>
> <p><a href="#" jwcid="@PageLink" page="Home">Return to Home page</a>.</p>
> </body>
> </html>
>
----------------------------------------------------------------------------
> 
> Login.page
>
----------------------------------------------------------------------------
> <?xml version="1.0"?>
> <!DOCTYPE page-specification PUBLIC 
>     "-//Apache Software Foundation//Tapestry Specification 3.0//EN" 
>     "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
>             
> <page-specification
class="com.entercite.finance.model.abstrt.LoginComponent">
>   <property-specification name="message" type="java.lang.String"/>
>   <property-specification name="login"
type="com.entercite.finance.model.Login"/>
> </page-specification>
>
----------------------------------------------------------------------------
> 
> login
>
----------------------------------------------------------------------------
> package com.entercite.finance.model;
> import java.util.*;
> 
> public class Login {
>     private Integer loginId = new Integer(0);
>     private String userName = "";
>     private String password = "";
>     private Integer permissionType = new Integer(0);
> 
>     public void setLoginId(Integer loginId){ this.loginId = loginId; }
>     public Integer getLoginId(){return this.loginId;}
> 
>     public void setUserName(String userName){ this.userName = userName;}
>     public String getUserName(){return this.userName;}
> 
>     public void setPassword(String password){this.password = password;}
>     public String getPassword(){return this.password;}
> 
>     public void setPermissionType(Integer
permissionType){this.permissionType = permissionType;}
>     public Integer getPermissionType(){return this.permissionType;}
> }
>
----------------------------------------------------------------------------
> 
> 
> LoginComponent
>
----------------------------------------------------------------------------
> package com.entercite.finance.model.abstrt;
> 
> import com.entercite.finance.model.Login;
> import com.entercite.finance.persistence.intrface.*;
> import com.entercite.finance.persistence.LoginDaoImpl;
> 
> import org.apache.tapestry.IRequestCycle;
> import org.apache.tapestry.html.BasePage;
> 
> /**
>  *
>  */
> public abstract class LoginComponent extends BasePage {
> 
>     private Login login = new Login();
>     public abstract void setMessage(String message);
> 
>     public LoginComponent() { }
> 
>     public Login getLogin(){ return this.login; };
>     public void setLogin(Login login){ this.login = login; };
> 
>     public void setUserName(String userName){
this.getLogin().setUserName(userName); }
>     public String getUserName(){ return this.getLogin().getUserName(); }
> 
>     public void setPassword(String password){
this.getLogin().setPassword(password); }
>     public String getPassword(){ return this.getLogin().getPassword(); }
> 
>     public void doLogin(IRequestCycle cycle) {
> 
>         String u = this.getLogin().getUserName();
>         String p = this.getLogin().getPassword();
> 
>         if(isValidLogin(u,p) ) {
>             System.out.println("push to main");
>             cycle.activate("Main");
>         } else {
>             setMessage("Invalid user name or password.");
>         }
>     }
> 
>     private boolean isValidLogin(String userName, String password) {
> System.out.println("Attempt");
>         com.entercite.finance.persistence.intrface.ILoginDao ldi =
>             new com.entercite.finance.persistence.LoginDaoImpl();
<-----(call this impl)
> System.out.println("Attempt 1");
>         this.login = ldi.find(userName, password);
> System.out.println("Attempt 2");
>         if(login != null){
> System.out.println("Attempt 3");
>             return true;
> 
>         } else {
> System.out.println("Attempt 4");
>             return false;
>         }
>     }
> }
> 
> ILoginDao
>
----------------------------------------------------------------------------
> package com.entercite.finance.persistence.intrface;
> import java.util.*;
> import com.entercite.finance.model.*;
> import com.entercite.finance.persistence.exception.*;
> 
> public interface ILoginDao {
>     public void create(Login login) throws DataAccessLayerException;
>     public Login find(String name, String password) throws
DataAccessLayerException;
> }
> 
> 
> LoginDaoImpl
>
----------------------------------------------------------------------------
> package com.entercite.finance.persistence;
> 
> import org.hibernate.HibernateException;
> 
> import com.entercite.finance.persistence.abstrt.AbstractDao;
> import com.entercite.finance.model.*;
> import com.entercite.finance.persistence.intrface.ILoginDao;
> import com.entercite.finance.persistence.exception.*;
> 
> import java.util.*;
> 
> public class LoginDaoImpl extends AbstractDao implements ILoginDao {
> 
> <---THEN IT USES THE SUPER CONSTRUCTOR--->
> 
>     public void create(Login login) throws DataAccessLayerException {
>         saveOrUpdate(login);
>     }
> 
>     public Login find(String name, String password) throws
DataAccessLayerException {
>         return (Login)find(Login.class, name, password);
>     }
> }
> 
> 
> AbstractDao
>
----------------------------------------------------------------------------
> package com.entercite.finance.persistence.abstrt;
> 
> import org.hibernate.HibernateException;
> import org.hibernate.Query;
> import org.hibernate.Session;
> import org.hibernate.Transaction;
> 
> import java.util.List;
> 
> import com.entercite.finance.persistence.*;
> import com.entercite.finance.persistence.exception.*;
> 
> public abstract class AbstractDao {
> 
>     private Session session;
>     private Transaction tx;
> 
>     public AbstractDao() {
> 
>        HibernateFactory.buildSessionFactory();   <----(Which calls this)
>     }
> 
>     protected void saveOrUpdate(Object obj){
> 
>         try {
>             startOperation();
>             session.saveOrUpdate(obj);
>             tx.commit();
> 
>         } catch (HibernateException e) {
>             handleException(e);
>         } finally {
>             HibernateFactory.close(session);
>         }
> 
>     }
> 
>     protected void delete(Object obj) {
> 
>         try {
>             startOperation();
>             session.delete(obj);
>             tx.commit();
> 
>         } catch (HibernateException e) {
>             handleException(e);
>         } finally {
>             HibernateFactory.close(session);
>         }
> 
>     }
> 
>     protected Object find(Class clazz, Integer id){
> 
>         Object obj = null;
> 
>         try {
>             startOperation();
>             obj = session.load(clazz, id);
>             tx.commit();
> 
>         } catch (HibernateException e) {
>             handleException(e);
>         } finally {
>             HibernateFactory.close(session);
>         }
> 
>         return obj;
> 
>     }
> 
>     protected Object find(Class clazz, String value1, String value2){
> 
>         Object obj = null;
> 
>         try {
>             startOperation();
>             Query query = session.createQuery(
>                 "from " + clazz.getName() +
>                 " where login = " + value1 +
>                 " and password = " + value2 );
> 
>             obj = query.uniqueResult();
>             tx.commit();
> 
>         } catch (HibernateException e) {
>             handleException(e);
>         } finally {
>             HibernateFactory.close(session);
>         }
> 
>         return obj;
> 
>     }
> 
> 
>     /**
>      * Find all class from one table using the following object
>      *
>      *@param Class - this is the table to load data from
>      *@param Integer - the id to use in the where clause
>      *
>      *@return List - containing all objects you were looking for
>      */
>     protected List findAll(Class clazz, Integer id) {
> 
>         List objects = null;
> 
>         try {
> 
>             startOperation();
>             Query query = session.createQuery("from " + clazz.getName() +
" where id = " + id );
>             objects = query.list();
>             tx.commit();
> 
>         } catch (HibernateException e) {
>             handleException(e);
>         } finally {
>             HibernateFactory.close(session);
>         }
> 
>         return objects;
> 
>     }
> 
>     protected void handleException(HibernateException e) throws
DataAccessLayerException {
>         HibernateFactory.rollback(tx);
>         throw new DataAccessLayerException(e);
> 
>     }
> 
>     protected void startOperation() throws HibernateException {
>         session = HibernateFactory.openSession();
>         tx = session.beginTransaction();
> 
>     }
> }
> 
> 
> 
> HibernateFactory
>
----------------------------------------------------------------------------
> package com.entercite.finance.persistence;
> 
> import org.hibernate.SessionFactory;
> import org.hibernate.Session;
> import org.hibernate.Transaction;
> import org.hibernate.HibernateException;
> import org.hibernate.cfg.Configuration;
> 
> import org.apache.commons.logging.LogFactory;
> import org.apache.commons.logging.Log;
> 
> public class HibernateFactory {
> 
>     private static SessionFactory sessionFactory;
>     private static Log log = LogFactory.getLog(HibernateFactory.class);
> 
>     public static SessionFactory buildSessionFactory() throws
HibernateException {
> 
> System.out.println("bsf 1");
>         if(sessionFactory != null){
>             closeFactory();
>         }
> System.out.println("bsf 2");
>         Configuration configuration = new Configuration();
> System.out.println("bsf 3");
>         sessionFactory = configuration.configure().buildSessionFactory();
<---IT PUKES HERE IT APPEARS>
> System.out.println("bsf 4");
> 
>         return sessionFactory;
>     }
> 
>     public static SessionFactory getSessionFactory() {
>         return sessionFactory;
>     }
> 
>     public static Session openSession() throws HibernateException {
>         return sessionFactory.openSession();
>     }
> 
>     public static void closeFactory() {
>         if (sessionFactory != null) {
>             try {
>                 sessionFactory.close();
>             } catch (HibernateException ignored) {
>                 log.error("Couldn't close SessionFactory", ignored);
>             }
>         }
>     }
> 
>     public static void close(Session session) {
>         if (session != null) {
>             try {
>                 session.close();
>             } catch (HibernateException ignored) {
>                 log.error("Couldn't close Session", ignored);
>             }
>         }
>     }
> 
>     public static void rollback(Transaction tx) {
>         try {
>             if (tx != null) {
>                 tx.rollback();
>             }
>         } catch (HibernateException ignored) {
>             log.error("Couldn't rollback Transaction", ignored);
>         }
>     }
> }
> 
> 
> hibernate.cfg.xml
>
----------------------------------------------------------------------------
> <!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="connection.username">root</property>
>     <property name="connection.password">xxx</property>
>     <property name="connection.url">//localhost:3306/budget</property>
>     <property
name="connection.driver_class">com.mysql.jdbc.Driver</property>
>     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
>     
>     <mapping resource="com/entercite/finance/model/Login.hbm.xml"/>
>         
>   </session-factory>
> </hibernate-configuration>
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org