Reposting my question, just in case.

---------- Forwarded message ----------
From: Fredrik Widengren <fredrik.wideng...@gmail.com>
Date: 2016-04-14 22:17 GMT+02:00
Subject: StoredProcedures and Cayenne
To: user@cayenne.apache.org


Hello,

I'm trying to launch a stored procedure which is returning rows with a
number of columns.

I try to follow the documentation but don't understand why I get these
errors.

As you can see, the text "After query" is not printed in the log. Which I
then assume mean that something goes wrong in the store procedure.

When running the stored procedure from myPhpAdmin I get correct result (see
attached image)


If someone have some ideas, please share them.

Many thanks,
Fredrik
------------------------------------------------------------
*data map contains the following:*




*   <procedure name="readShoplistIngredientsSortedByStore"
catalog="foodbase">        <procedure-parameter name="id_shoplist"
type="INTEGER" direction="in"/>        <procedure-parameter name="id_store"
type="INTEGER" direction="in"/>    </procedure>*

*The stored procedure looks like this:*
CREATE DEFINER=`foodbase_admin`@`localhost` PROCEDURE
`readShoplistIngredientsSortedByStore`(IN `id_shoplist` INT, IN `id_store`
INT)
    NO SQL
BEGIN

CALL StoreDepartments(id_store);

SELECT departments.Name AS Department, shoppinglist_items.Amount AS Amount,
units.Name AS Unit, groceries.Name AS Groceries
FROM shoppinglist_items
JOIN groceries ON
groceries.ID=shoppinglist_items.ID_groceries
JOIN storedepartmentsorder ON
groceries.ID_departments=storedepartmentsorder.ID_departments
JOIN units ON
units.ID=shoppinglist_items.ID_units
JOIN departments ON
departments.ID=groceries.ID_departments
WHERE shoppinglist_items.ID_shoppinglists=id_shoplist
ORDER BY storedepartmentsorder.deptorder, groceries.Name
;

END


*Java code:*

    @SuppressWarnings("unchecked")
    public String getSortedIngredients() {
        try {
            System.out.println("get sorted ingred....");
            System.out.println("Store ID.............."+storeID);

            ProcedureQuery query = new
ProcedureQuery("readShoplistIngredientsSortedByStore");

            query.addParameter("id_shoplist", activeShoppingList.getId());
            query.addParameter("id_store", storeID);

            System.out.println("before query...");

            // run query
            QueryResponse result = context.performGenericQuery(query);
            System.out.println("After query");


            for (result.reset(); result.next();) {
                 if (result.isList()) {
                     shoppinglistItems = (List<ShoppinglistItems>)
result.currentList();
                     // ...

                 }
                else {
                     int[] updateCounts = result.currentUpdateCount();
                     // ...
                 }
            }
        } catch (Exception e) {
            System.out.println("catch exception");
            e.printStackTrace();
        }

        return null;
    }


*Tomcat log:*

get sorted ingred....
Store ID..............2
before query...
apr 14, 2016 9:43:06 EM org.apache.cayenne.log.CommonsJdbcEventLogger
logConnect
INFO: Opening connection: jdbc:mariadb://127.0.0.1:3306/foodbase
    Login: foodbase_admin
    Password: *******
apr 14, 2016 9:43:06 EM org.apache.cayenne.log.CommonsJdbcEventLogger
logConnectSuccess
INFO: +++ Connecting: SUCCESS.
apr 14, 2016 9:43:06 EM org.apache.cayenne.log.CommonsJdbcEventLogger log
INFO: Detected and installed adapter:
org.apache.cayenne.dba.mysql.MySQLAdapter
apr 14, 2016 9:43:06 EM org.apache.cayenne.log.CommonsJdbcEventLogger
logBeginTransaction
INFO: --- transaction started.
apr 14, 2016 9:43:06 EM org.apache.cayenne.log.CommonsJdbcEventLogger
logQuery
INFO: {call readShoplistIngredientsSortedByStore(?, ?)} [bind: 1:1006, 2:2]
apr 14, 2016 9:43:06 EM org.apache.cayenne.log.CommonsJdbcEventLogger
logSelectCount
INFO: === returned 18 rows. - took 2 ms.
apr 14, 2016 9:43:06 EM org.apache.cayenne.log.CommonsJdbcEventLogger
logQueryError
INFO: *** error.
java.lang.NullPointerException
    at
org.apache.cayenne.dba.mysql.MySQLProcedureAction.processResultSet(MySQLProcedureAction.java:101)
    at
org.apache.cayenne.dba.mysql.MySQLProcedureAction.performAction(MySQLProcedureAction.java:74)
    at
org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:87)
    at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:280)
    at
org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:453)
    at
org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:70)
    at
org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:426)
    at
org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:877)
    at
org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:423)
    at
org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:122)
    at
org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:758)
    at
org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:1009)
    at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:748)
    at
org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:350)
    at
org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:106)
    at
org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:93)
    at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:989)
    at
org.apache.cayenne.access.DataContext.performGenericQuery(DataContext.java:948)
    at
controller.PrintController.getSortedIngredients(PrintController.java:101)
    at controller.PrintController.setLocalObject(PrintController.java:71)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
    at
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
    at
org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at
org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    at
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UIViewAction.broadcast(UIViewAction.java:559)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)

Reply via email to