0 Replies Latest reply on Nov 13, 2007 6:19 PM by Gerardo Nevarez

    NPE Problem with <s:convertEntity />, seems Entity manager i

    Gerardo Nevarez Newbie

      I have an error with a dropdown, it seems something is not correct about the entity manager or the Seam Managed Persistence Context (SMPC) , although I can get a log entry saying entities were retrieved from the database.

      It's the booking example modified, some of the labels might be familiar.


      I'm using Seam 2.0.0 and AS 4.2.2

      Except from the view (registrounidad.xhtml)

      <h:selectOneMenu id="idgrupo" value="#{unidad.idgrupo}" required="true">
      
       <s:selectItems value="#{gruposDisponibles}" var="grupo" label="#{grupo.nombre}" noSelectionLabel="Please select..." />
       <s:convertEntity />
       </h:selectOneMenu>
      


      persistance.xml
      <?xml version="1.0" encoding="UTF-8"?>
      
      <persistence xmlns="http://java.sun.com/xml/ns/persistence"
      
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      
       xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
      
       version="1.0">
      
       <persistence-unit name="bookingDatabase">
      
       <provider>org.hibernate.ejb.HibernatePersistence</provider>
      
       <jta-data-source>java:/bookingDatasource</jta-data-source>
      
       <properties>
      
       <property name="hibernate.hbm2ddl.auto" value="update"/>
      
       <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
      
       <property name="hibernate.show_sql" value="true"/>
      
       <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
      
       <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
       <property name="jboss.entity.manager.factory.jndi.name" value="java:/unitsEntityManagerFactory"/>
       </properties>
      
       </persistence-unit>
      
      </persistence>
      


      components.xml
      <?xml version="1.0" encoding="UTF-8"?>
      
      <components xmlns="http://jboss.com/products/seam/components"
      
       xmlns:core="http://jboss.com/products/seam/core"
      
       xmlns:security="http://jboss.com/products/seam/security"
      
       xmlns:transaction="http://jboss.com/products/seam/transaction"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      
       xsi:schemaLocation=
      
       "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd
      
       http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd
      
       http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd
       http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd ">
      
      
      
       <core:init jndi-pattern="@jndiPattern@" debug="true"/>
      
      
      
       <core:manager conversation-timeout="120000"
      
       concurrent-request-timeout="500"
      
       conversation-id-parameter="cid"/>
      
       <core:managed-persistence-context name="entityManager" auto-create="true" persistence-unit-jndi-name="java:/unitsEntityManagerFactory"/>.
      
       <transaction:ejb-transaction/>
      
      
      
       <security:identity authenticate-method="#{authenticator.authenticate}"/>
      
      
      </components>
      


      The Search Bean (UnidadSearchingAction.java)
      package org.jboss.seam.example.booking;
      
      import java.util.List;
      
      import javax.ejb.Remove;
      import javax.ejb.Stateful;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      
      import org.jboss.seam.log.Log;
      import org.jboss.seam.ScopeType;
      import org.jboss.seam.annotations.Factory;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Scope;
      import org.jboss.seam.annotations.Out;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Logger;
      import org.jboss.seam.annotations.datamodel.DataModel;
      import org.jboss.seam.annotations.security.Restrict;
      
      @Stateful
      @Name("unidadSearch")
      @Scope(ScopeType.SESSION)
      @Restrict("#{identity.loggedIn}")
      public class UnidadSearchingAction implements UnidadSearching
      {
      
       @Logger
       Log log;
      
       @PersistenceContext
       private EntityManager entityManager;
       //private EntityManager em;
      
       private String searchString;
       private int pageSize = 10;
       private int page;
      
       @Out(required = false)
       public List<Grupo> gruposDisponibles;
      
       @DataModel
       private List<Unidad> unidades;
      
       public void find()
       {
       page = 0;
       queryUnidades();
       }
       public void nextPage()
       {
       page++;
       queryUnidades();
       }
      
      
       public List<Grupo> getGruposDisponibles() {
       return gruposDisponibles;
       }
       public void setGruposDisponibles(List<Grupo> gruposDisponibles) {
       this.gruposDisponibles = gruposDisponibles;
       }
      
       @Factory("gruposDisponibles")
       public void comboGrupos()
       {
       log.info("Loading gruposDisponibles...");
       gruposDisponibles = entityManager.createQuery("select g from Grupo g order by g.nombre")
       .getResultList();
       log.info("Size: " + gruposDisponibles.size());
       }
      
       private void queryUnidades()
       {
       unidades = entityManager.createQuery("select u from Unidad u where lower(u.etiqueta) like #{unidPattern} or lower(u.device) like #{unidPattern} or lower(u.placa) like #{unidPattern} order by u.etiqueta")
       .setMaxResults(pageSize)
       .setFirstResult( page * pageSize )
       .getResultList();
       }
      
       public boolean isNextPageAvailable()
       {
       return unidades!=null && unidades.size()==pageSize;
       }
      
       public int getPageSize() {
       return pageSize;
       }
      
       public void setPageSize(int pageSize) {
       this.pageSize = pageSize;
       }
      
       @Factory(value="unidPattern", scope=ScopeType.EVENT)
       public String getSearchPattern()
       {
       return searchString==null ?
       "%" : '%' + searchString.toLowerCase().replace('*', '%') + '%';
       }
      
       public String getSearchString()
       {
       return searchString;
       }
      
       public void setSearchString(String searchString)
       {
       this.searchString = searchString;
       }
      
       @Remove
       public void destroy() {}
      }
      


      The Stack trace
      16:38:39,914 INFO [UnidadSearchingAction] Loading gruposDisponibles...
      16:38:39,930 INFO [STDOUT] Hibernate: select grupo0_.idgrupo as idgrupo51_, grupo0_.nombre as nombre51_, grupo0_.descripcion as descripc3_51_ from gpsgrupos grupo0_ order by grupo0_.nombre
      16:38:39,952 INFO [UnidadSearchingAction] Size: 2
      16:38:39,972 ERROR [STDERR] Nov 13, 2007 4:38:39 PM com.sun.facelets.FaceletViewHandler handleRenderException
      SEVERE: Error Rendering View[/registrounidad.xhtml]
      java.lang.NullPointerException
       at org.jboss.seam.framework.EntityIdentifier.<init>(EntityIdentifier.java:15)
       at org.jboss.seam.ui.converter.EntityConverterStore.put(EntityConverterStore.java:60)
       at org.jboss.seam.ui.converter.EntityConverter.getAsString(EntityConverter.java:69)
       at org.jboss.seam.ui.converter.PrioritizableConverter.getAsString(PrioritizableConverter.java:67)
       at org.jboss.seam.ui.converter.ConverterChain.getAsString(ConverterChain.java:123)
       at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:469)
       at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:502)
       at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:757)
       at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:811)
       at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
       at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:836)
       at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:190)
       at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166)
       at org.jboss.seam.ui.renderkit.ValidateAllRendererBase.doEncodeChildren(ValidateAllRendererBase.java:33)
       at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92)
       at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
       at org.jboss.seam.ui.util.cdk.RendererBase.renderChild(RendererBase.java:186)
       at org.jboss.seam.ui.util.cdk.RendererBase.renderChildren(RendererBase.java:166)
       at org.jboss.seam.ui.renderkit.DecorateRendererBase.doEncodeChildren(DecorateRendererBase.java:94)
       at org.jboss.seam.ui.util.cdk.RendererBase.encodeChildren(RendererBase.java:92)
       at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
       at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
       at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
       at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
       at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
       at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
       at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:577)
       at org.ajax4jsf.framework.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
       at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView(AjaxViewHandler.java:233)
       at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
       at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
       at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
       at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
       at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:87)
       at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
       at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:63)
       at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
       at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:46)
       at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
       at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:127)
       at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:277)
       at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:40)
       at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
       at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:63)
       at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
       at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:140)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
       at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
       at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
       at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
       at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
       at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
       at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
       at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
       at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
       at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
       at java.lang.Thread.run(Thread.java:619)