I have a jpa datasource based listgrid which has server-side summarization (http://www.smartclient.com/smartgwte...Summaries.html). When filter the listgrid the server side throw a "node to traverse cannot be null!" exception.
I've created the following servlet testcase.
Version: SmartGWT 5.0p build: 01/10/2015 Eval
County.java
county.ds.xml
TestServlet.java
Without criteria the dsrequest can executed succesfully.
Server Log:
=== 2015-01-26 13:16:45,176 [c-19] DEBUG ISCKeyedObjectPool - Borrowing object for 'county'
=== 2015-01-26 13:16:45,176 [c-19] DEBUG PoolableDataSourceFactory - Activated DataSource 6 of type 'county'
=== 2015-01-26 13:16:45,176 [c-19] DEBUG DSRequest - Caching instance 6 of DS 'county' from DSRequest.getDataSource()
=== 2015-01-26 13:16:45,176 [c-19] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null
=== 2015-01-26 13:16:45,177 [c-19] DEBUG AppBase - [builtinApplication.null] No userTypes defined, allowing anyone access to all operations for this application
=== 2015-01-26 13:16:45,177 [c-19] DEBUG AppBase - [builtinApplication.null] No public zero-argument method named '_null' found, performing generic datasource operation
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Creating EntityManager and starting transaction.
=== 2015-01-26 13:16:45,177 [c-19] DEBUG DSRequest - [builtinApplication.null] Clobbering existing FreeResourcesHandler of type 'com.isomorphic.jpa.JPA2DataSource' with a 'com.isomorphic.jpa.JPA2DataSource'
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Executing fetch.
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Query string: select SUM(_County.population) as population from County _County where (lower(_County.name) = lower(:p0))
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Marking transaction for roll back.
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Rolling back current transaction.
=== 2015-01-26 13:16:45,178 [c-19] DEBUG JPADataSource - [builtinApplication.null] Got exception while executing. Transaction will be rolled back.
java.lang.IllegalArgumentException: node to traverse cannot be null!
at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:63)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:282)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:184)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:277)
at com.isomorphic.jpa.JPADataSource.createQuery(JPADataSource.java:2062)
at com.isomorphic.jpa.JPADataSource.executeFetch(JPADataSource.java:692)
at com.isomorphic.datasource.DataSource.execute(DataSource.java:1922)
at com.isomorphic.jpa.JPADataSource.execute(JPADataSource.java:652)
at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:726)
at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658)
at com.isomorphic.application.AppBase.execute(AppBase.java:491)
at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2543)
at com.pt.aop.master.server.TestServlet2.doGet(TestServlet2.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
=== 2015-01-26 13:16:45,178 [c-19] DEBUG DSRequest - About to free up resources for request of type fetch on DataSource county
=== 2015-01-26 13:16:45,178 [c-19] DEBUG JPADataSource - Releasing entity manager.
=== 2015-01-26 13:16:45,179 [c-19] DEBUG PoolableDataSourceFactory - Cleared and passivated DataSource 6 of type 'county'
I've created the following servlet testcase.
Version: SmartGWT 5.0p build: 01/10/2015 Eval
County.java
Code:
@Entity
public class County {
@Id
@GeneratedValue
private Integer id;
private String name;
private Integer population;
// .. getters and setters
}
Code:
<DataSource
ID="county"
serverType="jpa"
beanClassName="com.pt.aop.model.County"
>
<fields>
<field name="id" primaryKey="true" type="sequence" hidden="true"/>
<field name="name" type="text"/>
<field name="population" type="integer"/>
</fields>
</DataSource>
Code:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.isomorphic.datasource.DSRequest;
import com.isomorphic.datasource.DSResponse;
import com.isomorphic.datasource.SummaryFunctionType;
@SuppressWarnings("serial")
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
DSRequest dsRequest = new DSRequest("county", "fetch");
dsRequest.setSummaryFunctions(new HashMap<String, SummaryFunctionType>() {{
put("population", SummaryFunctionType.SUM);
}});
try {
// any criteria cause: "node to traverse cannot be null" error
dsRequest.addToCriteria("name", "Hazard");
DSResponse dsResponse = dsRequest.execute();
PrintWriter out = resp.getWriter();
out.println("Sum: " + dsResponse.getDataField("population"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Server Log:
=== 2015-01-26 13:16:45,176 [c-19] DEBUG ISCKeyedObjectPool - Borrowing object for 'county'
=== 2015-01-26 13:16:45,176 [c-19] DEBUG PoolableDataSourceFactory - Activated DataSource 6 of type 'county'
=== 2015-01-26 13:16:45,176 [c-19] DEBUG DSRequest - Caching instance 6 of DS 'county' from DSRequest.getDataSource()
=== 2015-01-26 13:16:45,176 [c-19] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null
=== 2015-01-26 13:16:45,177 [c-19] DEBUG AppBase - [builtinApplication.null] No userTypes defined, allowing anyone access to all operations for this application
=== 2015-01-26 13:16:45,177 [c-19] DEBUG AppBase - [builtinApplication.null] No public zero-argument method named '_null' found, performing generic datasource operation
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Creating EntityManager and starting transaction.
=== 2015-01-26 13:16:45,177 [c-19] DEBUG DSRequest - [builtinApplication.null] Clobbering existing FreeResourcesHandler of type 'com.isomorphic.jpa.JPA2DataSource' with a 'com.isomorphic.jpa.JPA2DataSource'
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Executing fetch.
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Query string: select SUM(_County.population) as population from County _County where (lower(_County.name) = lower(:p0))
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Marking transaction for roll back.
=== 2015-01-26 13:16:45,177 [c-19] DEBUG JPADataSource - [builtinApplication.null] Rolling back current transaction.
=== 2015-01-26 13:16:45,178 [c-19] DEBUG JPADataSource - [builtinApplication.null] Got exception while executing. Transaction will be rolled back.
java.lang.IllegalArgumentException: node to traverse cannot be null!
at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:63)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:282)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:184)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:277)
at com.isomorphic.jpa.JPADataSource.createQuery(JPADataSource.java:2062)
at com.isomorphic.jpa.JPADataSource.executeFetch(JPADataSource.java:692)
at com.isomorphic.datasource.DataSource.execute(DataSource.java:1922)
at com.isomorphic.jpa.JPADataSource.execute(JPADataSource.java:652)
at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:726)
at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658)
at com.isomorphic.application.AppBase.execute(AppBase.java:491)
at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2543)
at com.pt.aop.master.server.TestServlet2.doGet(TestServlet2.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
=== 2015-01-26 13:16:45,178 [c-19] DEBUG DSRequest - About to free up resources for request of type fetch on DataSource county
=== 2015-01-26 13:16:45,178 [c-19] DEBUG JPADataSource - Releasing entity manager.
=== 2015-01-26 13:16:45,179 [c-19] DEBUG PoolableDataSourceFactory - Cleared and passivated DataSource 6 of type 'county'
Comment