Jsf x controle de transaÇÂo (hibernate)

Pessoal sou estou aprendendo jsf è estou com o seguinte erro:

06/09/2007 08:40:04 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: net/sf/cglib/proxy/MethodInterceptor
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1817)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1817)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1325)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at Modelo.Negocio.Factory.FacadeFactory.getMenu(FacadeFactory.java:23)
	at Teste.TesteJSF.getMenuTopo(TesteJSF.java:26)
	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.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:457)
	at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:85)
	at org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:535)
	at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:386)
	at javax.faces.component.UIData.getValue(UIData.java:1023)
	at javax.faces.component.UIData.createDataModel(UIData.java:789)
	at javax.faces.component.UIData.getDataModel(UIData.java:769)
	at javax.faces.component.UIData.getRowCount(UIData.java:194)
	at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeInnerHtml(HtmlTableRendererBase.java:221)
	at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeChildren(HtmlTableRendererBase.java:134)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:527)
	at javax.faces.webapp.UIComponentTag.encodeChildren(UIComponentTag.java:483)
	at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:364)
	at org.apache.myfaces.shared_impl.taglib.UIComponentBodyTagBase.doEndTag(UIComponentBodyTagBase.java:57)
	at org.apache.jsp.index1_jsp._jspx_meth_h_005fdataTable_005f0(index1_jsp.java:228)
	at org.apache.jsp.index1_jsp._jspx_meth_f_005fview_005f1(index1_jsp.java:170)
	at org.apache.jsp.index1_jsp._jspService(index1_jsp.java:77)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
	at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:419)
	at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
	at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

As minhas classes são:

@Entity @Table(schema="public", name="tb_carro")
public class CarroVO implements Serializable{

	@Id 
	@GeneratedValue(strategy = GenerationType.SEQUENCE)
	@Column(name="cod_carro")
	private int codCarro;
	@Column(name="descricao")
	private String cor;
                etc...
               //Getters e Setters

}
public class TesteJSF {
	private String ola ="ola mundo";
	private List<CarroVO> carros;
	public TesteJSF() {
		// TODO Auto-generated constructor stub
	}
	public String getOla() {
		return ola;
	}
	public void setOla(String ola) {
		this.ola = ola;
	}
	public List<CarroVO> getMenuTopo(){
		CarroFacade facade = FacadeFactory.getCarro();
		carros= facade.getLista();			
		return carros;
		
}

public void setCarro(List<CarroVO> carros) {
	this.carros = carros;
}
}
public class CarroFacade {

	public CarroFacade() {		
	}
	
	public List<CarroVO> getLista(){
		try{
			DAOFactory factory = DAOFactory.getDAOFactory(DAOFactory.HIBERNATE);
			CarroDAO carroDAO = factory.getCarroDAO();
			return carroDAO.list(TipoMenuVO.class);		
		}catch(Exception e2){
			e2.printStackTrace();
			return null;
		}
	
	}

}

[code]

public abstract class DAOFactory {
public static final int HIBERNATE = 1;

public static DAOFactory getDAOFactory(int whichFactory){ 
  switch(whichFactory){ 
   case 1: 
    return new HibernateDAOFactory();	   
   default: 
    return null; 
  }
 }
 
 public abstract CarroDAO getCarroDAO(); 

}[/code]

public class FacadeFactory {

	public static CarroFacade getCarro(){
		try{
			return (CarroFacade)TransactionClass.
		    	create(CarroFacade.class, HibernateInterceptorAnnotation.class);
		}catch (Exception ex){
		   return null;
		}
	}
	
}
public interface CarroDAO extends GenericDAO <CarroVO, Long>{

}
public class HibernateCarroDAO extends GenericHibernateDAO<CarroVO, Long, CarroDAO> implements CarroDAO{

}
public interface GenericDAO <T, ID extends Serializable>{
	
	public T findById(Class clazz, ID id); 
	public List list(Class clazz); 
	public List list(Class clazz, int firstResult, int maxResults); 
	public List listByExample(T entity); 
	public T makePersistent(T entity); 
	public void makeTransient(T entity); 
}
public class GenericHibernateDAO <T, ID extends Serializable, DAOImpl extends GenericDAO<T, ID>> implements GenericDAO<T, ID> {
	private Session session; 
	
	public DAOImpl setSession(Session s) { 
		  this.session = s; 
		  return (DAOImpl)this; 
		 } 

		 protected Session getSession() { 
		  if (session == null) 
		  throw new IllegalStateException("Session has not been set on DAO before usage"); 
		  return session; 
		 } 

		 public T findById(Class clazz, ID id) { 
		  return (T)getSession().get(clazz, id); 
		 } 

		 public List list(Class clazz) { 
		  return getSession().createCriteria(clazz).list(); 
		 } 

		 public List list(Class clazz, int firstResult, int maxResults) { 
		  Criteria criteria = getSession().createCriteria(clazz); 
		  criteria.setFirstResult(firstResult); 
		  criteria.setMaxResults(maxResults); 
		  return criteria.list(); 
		 } 

		 public List listByExample(T entity) { 
		  Criteria criteria = getSession().createCriteria(entity.getClass()); 
		  Example sample = Example.create(entity); 
		  sample.enableLike(); 
		  sample.excludeZeroes(); 
		  criteria.add(sample); 
		  return criteria.list(); 
		 } 

		 public T makePersistent(T entity) { 
		  getSession().saveOrUpdate(entity); 
		  return entity; 
		 } 

		 public void makeTransient(T entity) { 
		  getSession().delete(entity); 
		 } 
}
public class HibernateHelper {
	private static final SessionFactory sessionFactory;
	private static final ThreadLocal sessionThread = new ThreadLocal();
	private static final ThreadLocal transactionThread = new ThreadLocal();

	static {
	  try {
		  sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
	  } catch (Throwable ex) {
		  //Make sure you log the exception, as it might be swallowed
		  System.err.println("Initial SessionFactory creation failed." + ex);
		  throw new ExceptionInInitializerError(ex);
	  }
	}

	 public static Session currentSession() {
		 if (sessionThread.get() == null) {
			 Session session = sessionFactory.openSession();
			 sessionThread.set(session);
		 }
		 return (Session) sessionThread.get();
	 }

	 private static void closeSession() {
		 Session session = (Session) sessionThread.get();
		 if (session != null)
			 session.close();	  
		 	sessionThread.set(null);
	 	}

	 public static void beginTransaction() {
		 if (transactionThread.get() == null){ 
			 Transaction transaction = currentSession().beginTransaction();
			 transactionThread.set(transaction);
		 }
	 }

	 public static void commitTransaction() {
		 Transaction transaction = (Transaction) transactionThread.get();
		 if (transaction != null && !transaction.wasCommitted() && !transaction.wasRolledBack()) {
			 transaction.commit();
			 transactionThread.set(null);
		 }	  
		 closeSession();
	 }

	 public static void rollbackTransaction() {
		 Transaction transaction = (Transaction) transactionThread.get();
		 if (transaction != null && !transaction.wasCommitted() && !transaction.wasRolledBack()) {
			 transaction.rollback();
			 transactionThread.set(null);
		 }	  
		 closeSession();
	 }
}

[code]
public abstract class HibernateInterceptor implements MethodInterceptor {
//private static final Logger logger = Util.startLogger(HibernateInterceptor.class);

 /**
  * O método intercept, proveniente da interface MethodInterceptor (CGLib), se encarrega 
  * de fazer o controle transacional. Veja que ele usa o HibernateHelper, 
  * e que o método transacional é explicitamente invocado, através de methodProxy.invokeSuper(), 
  * e o seu retorno é explicitamente devolvido
  * @throws Throwable 
  */
 public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable  {
  
  if (isTransactional(object, method)){
   //logger.debug("logica de negocio deve ser executada dentro de uma transacao");
   HibernateHelper.beginTransaction();
  }
  
  Object result = null;
  try {
   result = methodProxy.invokeSuper(object, args);
   HibernateHelper.commitTransaction();
   //logger.debug("logica de negocio executada com sucesso");
  }catch (Throwable e){
   //logger.debug("erro ao executar logica de negocio");
   HibernateHelper.rollbackTransaction();
   throw e;
  }
  
  return result;
 }
 
 
 /**
  * Definido como abstrato para para obter máxima flexibilidade, pois apenas 
  * estendendo esta classe e implementando este método, podemos saber se o 
  * método é transacional ou não de diversas maneiras, como arquivos XML, 
  * arquivos texto, e anotações! (Esta classe é um caso do pattern Template Method).
  */
 public abstract boolean isTransactional(Object object, Method method) ;

}[/code]

[code]
public class HibernateInterceptorAnnotation extends HibernateInterceptor{

public boolean isTransactional(Object object, Method method)  {
	  Annotation annotation = method.getAnnotation(HibernateTransaction.class);
	  return annotation == null ? false : true;
	 }

}[/code]

[code]
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface HibernateTransaction {

}[/code]

public class TransactionClass {

	public static Object create(Class beanClass, Class interceptorClass) throws InstantiationException, IllegalAccessException{
		  HibernateInterceptor interceptor = (HibernateInterceptor)interceptorClass.newInstance();
		  Object object = Enhancer.create(beanClass, interceptor);
		  return object;
	}
}

Caso eu crie um main e teste o metodo da TesteJSF a lista retorna com todos os objetos!
Mas quando eu tento jogar para uma pagina dá o erro descrito!
a pagina contem

<f:view>
			<h:dataTable value="#{testeJSF.carros}" var="carroa">
				<h:outputText value="#{carros.codCarro}"></h:outputText>
				<h:outputText value="#{carros.cor}"></h:outputText>
			</h:dataTable>
		</f:view>

Desde já agradeço a ajuda!!!

Na linha 3 aparece o seguinte’:

java.lang.NoClassDefFoundError: net/sf/cglib/proxy/MethodInterceptor  

Está faltando adicionar a biblioteca cglib

De uma olhada.

já estava no classpath, mas recoloquei.
É agora esta apresentando o seguinte erro

Initial SessionFactory creation failed.java.lang.ExceptionInInitializerError
06/09/2007 12:22:06 org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.NoClassDefFoundError: Could not initialize class Modelo.Persistencia.Hibernate.HibernateHelper
	at Modelo.Persistencia.Hibernate.HibernateInterceptor.intercept(HibernateInterceptor.java:57)
	at Modelo.Negocio.Facade.MenuFacade$$EnhancerByCGLIB$$ff054bf4.getListaTipoMenu(<generated>)
	at Teste.TesteJSF.getMenuTopo(TesteJSF.java:29)
	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.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:457)
	at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:85)
	at org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:535)
	at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
	at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:386)
	at javax.faces.component.UIData.getValue(UIData.java:1023)
	at javax.faces.component.UIData.createDataModel(UIData.java:789)
	at javax.faces.component.UIData.getDataModel(UIData.java:769)
	at javax.faces.component.UIData.getRowCount(UIData.java:194)
	at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeInnerHtml(HtmlTableRendererBase.java:221)
	at org.apache.myfaces.shared_impl.renderkit.html.HtmlTableRendererBase.encodeChildren(HtmlTableRendererBase.java:134)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:527)
	at javax.faces.webapp.UIComponentTag.encodeChildren(UIComponentTag.java:483)
	at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:364)
	at org.apache.myfaces.shared_impl.taglib.UIComponentBodyTagBase.doEndTag(UIComponentBodyTagBase.java:57)
	at org.apache.jsp.index1_jsp._jspx_meth_h_005fdataTable_005f0(index1_jsp.java:294)
	at org.apache.jsp.index1_jsp._jspx_meth_h_005fform_005f0(index1_jsp.java:223)
	at org.apache.jsp.index1_jsp._jspx_meth_f_005fview_005f1(index1_jsp.java:187)
	at org.apache.jsp.index1_jsp._jspService(index1_jsp.java:86)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
	at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:419)
	at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
	at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

Por que esses erro só estao acontecendo quando chamo o metodo na pagina ?

Valeu a ajuda!!!

esse eh realmente o código ?

  1. <f:view>
  2.        <h:dataTable value="#{testeJSF.carros}" var="carroa"> 
    
  3.            <h:outputText value="#{carros.codCarro}"></h:outputText> 
    
  4.            <h:outputText value="#{carros.cor}"></h:outputText> 
    
  5.        </h:dataTable> 
    
  6.    </f:view>

É mas e carros é não carroa!

<f:view> <h:dataTable value="#{testeJSF.carros}"var="carros"> <h:outputText value="#{carros.codCarro}"></h:outputText> <h:outputText value="#{carros.cor}"></h:outputText> </h:dataTable> </f:view>

Se for está errado…