Lazy Datatable / Client Proxy error

UI Components for JSF
Post Reply
quantum
Posts: 8
Joined: 06 Oct 2011, 15:58

10 Oct 2011, 20:06

Hi all,
My environment:

JSF: Mojarra 2.0.4
Server: JBoss AS Web 7.0.0 Final
Primefaces: 3.0.M3

I've just upgraded to the latest version of PF and noticed a slight change in how the lazy datatable is used. I modified my program but get the following error.

Code: Select all

com.google.common.collect.ComputationException: java.lang.RuntimeException: java.lang.NullPointerException
	at com.google.common.collect.ComputingConcurrentHashMap.compute(ComputingConcurrentHashMap.java:218) [guava-r08.jar:]
	at com.google.common.collect.ComputingConcurrentHashMap.apply(ComputingConcurrentHashMap.java:100) [guava-r08.jar:]
	at com.google.common.collect.MapMaker$ComputingMapAdapter.get(MapMaker.java:515) [guava-r08.jar:]
	at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:113) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.weld.el.AbstractWeldELResolver.lookup(AbstractWeldELResolver.java:136) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.weld.el.AbstractWeldELResolver.getValue(AbstractWeldELResolver.java:112) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.as.weld.webtier.jsf.ForwardingELResolver.getValue(ForwardingELResolver.java:46) [jboss-as-weld-7.0.0.Final.jar:7.0.0.Final]
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175) [jboss-el-api_2.2_spec-1.0.0.Final.jar:1.0.0.Final]
	at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:67) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.el.parser.AstValue.getValue(AstValue.java:115) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:55) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:193) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:181) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.component.UIData.getValue(UIData.java:557) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at org.primefaces.component.datatable.DataTable.getValue(DataTable.java:805) [primefaces-3.0.M3.jar:]
	at javax.faces.component.UIData.getDataModel(UIData.java:1297) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.component.UIData.getRowCount(UIData.java:342) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at org.primefaces.component.datatable.DataTable.calculatePage(DataTable.java:758) [primefaces-3.0.M3.jar:]
	at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:185) [primefaces-3.0.M3.jar:]
	at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:95) [primefaces-3.0.M3.jar:]
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:883) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1659) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:853) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:304) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at com.sun.faces.renderkit.html_basic.GroupRenderer.encodeChildren(GroupRenderer.java:105) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:853) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1652) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:163) [prettyfaces-jsf2-3.3.0.jar:]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:273) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118) [prettyfaces-jsf2-3.3.0.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:734) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:541) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:479) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:407) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:110) [prettyfaces-jsf2-3.3.0.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
	at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:49) [jboss-as-jpa-7.0.0.Final.jar:7.0.0.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
	at java.lang.Thread.run(Thread.java:722) [:1.7.0]
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
	at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:240) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.weld.util.reflection.SecureReflections.newInstance(SecureReflections.java:390) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:261) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:97) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.weld.bean.proxy.ClientProxyProvider.access$000(ClientProxyProvider.java:47) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.weld.bean.proxy.ClientProxyProvider$1.apply(ClientProxyProvider.java:61) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at org.jboss.weld.bean.proxy.ClientProxyProvider$1.apply(ClientProxyProvider.java:52) [weld-core-1.1.2.AS7.jar:2011-07-06 12:26]
	at com.google.common.collect.ComputingConcurrentHashMap.compute(ComputingConcurrentHashMap.java:206) [guava-r08.jar:]
	... 67 more
My code looks like

Code: Select all

                <p:dataTable var="_myEntity" value="#{tableBean.lazyModel}" 
                             paginator="true" rows="14"
                             lazy="true"  
                             paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
                             pageLinks="0">
                    <p:column id="myID" filterBy="#{_myEntity.name}">
                        <h:outputText value="#{_myEntity.name}"/>
                    </p:column>
                         ...
                         ...
                </p:dataTable>

Code: Select all

// import statements
                         ...
                         ...
@ViewScoped
@Named
public class TableBean implements java.io.Serializable {

    private LazyDataModel<MyEntity> lazyModel;

    public TableBean () {
        lazyModel = new MyLazyDataModel();
    }

    public LazyDataModel<MyEntity> getLazyModel() {
        return lazyModel;
    }
}

Code: Select all

// import statements
                         ...
                         ...
public class MyLazyDataModel extends LazyDataModel<MyEntity>{

    @Inject private MyFacade myFacade;

    public MyLazyDataModel() {
        setRowCount(myFacade.rowCount());
    }

    @Override
    public Category getRowData(String rowKey) {
        return (myFacade.find(Long.valueOf(rowKey)));
    }

    @Override
    public Object getRowKey(MyEntity myEntity) {
        return myEntity.getId();
    }

    @Override
    public List<MyEntity> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
        return myFacade.load(first, pageSize, sortField, sortOrder, filters);
    }
}
Is there a problem with my scopes or using Weld? I get the same error by replacing @Inject with @EJB though.

Cheers.
PrimeFaces 3.3.1, JBoss AS 7.1.1.Final "Brontes", Mojarra 2.1.7-jbossorg-1 (20120227-1401)

quantum
Posts: 8
Joined: 06 Oct 2011, 15:58

21 Oct 2011, 00:16

Hi,
I guess I'm using this in totally the wrong way. In the DataTable - Lazy Loading showcase example (PrimeFaces-3.0.M4-SNAPSHOT on Mojarra-2.1.2), can anyone @Inject an EntityManager (or anything) into the LazyCarDataModel class. I've tried accessing my DAO by

Code: Select all

@Inject private MyFacade myFacade;
which didn't work. Then I decided to skip the DAO (and Weld) altogether, and access my database directly from LazyCarDataModel by

Code: Select all

@PersistenceContext
private EntityManager em;
which again resulted in a null em. LazyDataModel extends DataModel which contains an embedded final class. Could this be preventing injection? This all worked a charm in version 3.0.M2. How are you all accessing your datasources from your LazyDataModel implementations?

Many thanks.
PrimeFaces 3.3.1, JBoss AS 7.1.1.Final "Brontes", Mojarra 2.1.7-jbossorg-1 (20120227-1401)

quantum
Posts: 8
Joined: 06 Oct 2011, 15:58

21 Oct 2011, 12:46

Gotcha! I annotated my constructor (in MyLazyDataModel ) with @Inject.

So what I do now is:

xhtml code stays the exact same.

Code: Select all

    // import statements
                             ...
                             ...
    @ViewScoped
    @Named
    public class TableBean implements java.io.Serializable {

       @Inject private LazyDataModel<MyEntity> lazyModel;

        public TableBean () {
        }

        public LazyDataModel<MyEntity> getLazyModel() {
            return lazyModel;
        }
    }

Code: Select all

// import statements
                         ...
                         ...
public class MyLazyDataModel extends LazyDataModel<MyEntity>{

    private MyFacade myFacade;

    @Inject 
    public MyLazyDataModel(MyFacade myFacade) {
        this.myFacade = myFacade;
        setRowCount(myFacade.rowCount());
    }

    @Override
    public Category getRowData(String rowKey) {
        return (myFacade.find(Long.valueOf(rowKey)));
    }

    @Override
    public Object getRowKey(MyEntity myEntity) {
        return myEntity.getId();
    }

    @Override
    public List<MyEntity> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
        return myFacade.load(first, pageSize, sortField, sortOrder, filters);
    }
}
PrimeFaces 3.3.1, JBoss AS 7.1.1.Final "Brontes", Mojarra 2.1.7-jbossorg-1 (20120227-1401)

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 28 guests