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 [EMAIL PROTECTED]: 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(HibernateFactory.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(LoginComponent.java:52)
* com.entercite.finance.model.abstrt.LoginComponent.doLogin(LoginComponent.java: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/>
<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
*
[EMAIL PROTECTED] Class - this is the table to load data from
[EMAIL PROTECTED] Integer - the id to use in the where clause
*
[EMAIL PROTECTED] 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]