CMDBuild Forum

Re: cmdb.callFunction(...).execute genera ToolAgentGeneralException error

    Ciao.
   
Sto' facendo eseguire le cmdb.callFunction. Se le store procedure che scrivo contengono delle SELECT con parametri di storeProcedure solo in OUTPUT, allora le invocazioni alla callFunciotn funzionano correttamente. Se invece si fa eseguire una callFunction che esegue una UPDATE con almeno 1 parametro di INPUT come la seguente :
   
               -- Function: public."cmwf_setAssetReserved"(integer)               
               -- DROP FUNCTION public."cmwf_setAssetReserved"(integer);
               
                CREATE OR REPLACE FUNCTION public."cmwf_setAssetReserved"("AssetId" integer)
                  RETURNS void AS
                $BODY$
                BEGIN
                   update public."Asset" set "Stato"=2088  where  "Id"="AssetId";
                END
                $BODY$
                  LANGUAGE plpgsql VOLATILE
                  COST 100;
                ALTER FUNCTION public."cmwf_setAssetReserved"(integer)
                  OWNER TO postgres;
                COMMENT ON FUNCTION public."cmwf_setAssetReserved"(integer) IS 'TYPE: function';
   
allora viene prodotta l'exception error riporato qui sotto

            "org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute"
   
il dettaglio completo dell'exception e' riportato qui sotto dopo il tag     ERRORE_EXCEPTION_COMPLETA
   
In altri punti di questo forum ho visto che un problema simile e' stato riportato gia' altre volte, ma non non vedo mai la soluzione esatta al problema. In particolare sembra che per dichiarare le CallFunction che hanno parametri in INPUT si debba utilizzare una sintassi SQL particolare. Sui manuali c'e' una pagina dove vengono viualizzati degli esempi di dichiarazione che fanno uso della EXECUTE e RETRUN QUERY EXECUTE, ... ho provato ad  usarli ma non funziona   

Quindi la domanda: qual e' l'errore nella mia dichiarazione di FUNCTION qui sopra ?
        Quale e' il modo corretto di dichiarare le function con attributi in INPUT ?
        Oppure potreste fornire degli esempi funzionanti ?
       
Grazie
M.   
    ERRORE_EXCEPTION_COMPLETA

Call: services/json/workflow/saveactivity
------------------------------------------
Error: org.cmdbuild.workflow.CMWorkflowException: org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute
    at org.cmdbuild.workflow.service.AbstractSharkService.advanceActivityInstance(AbstractSharkService.java:435)
    at org.cmdbuild.workflow.service.TransactedSharkService.access$1301(TransactedSharkService.java:16)
    at org.cmdbuild.workflow.service.TransactedSharkService$13.command(TransactedSharkService.java:225)
    at org.cmdbuild.workflow.service.TransactedSharkService$13.command(TransactedSharkService.java:222)
    at org.cmdbuild.workflow.service.TransactedSharkService$TransactedExecutor.execute(TransactedSharkService.java:24)
    at org.cmdbuild.workflow.service.TransactedSharkService.advanceActivityInstance(TransactedSharkService.java:222)
    at org.cmdbuild.workflow.DefaultWorkflowEngine.advanceActivity(DefaultWorkflowEngine.java:455)
    at org.cmdbuild.logic.WorkflowLogic.updateActivity(WorkflowLogic.java:401)
    at org.cmdbuild.logic.WorkflowLogic.updateProcess(WorkflowLogic.java:371)
    at org.cmdbuild.logic.WorkflowLogic.updateProcess(WorkflowLogic.java:353)
    at org.cmdbuild.servlets.json.Workflow.saveActivity(Workflow.java:189)
    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:606)
    at org.cmdbuild.servlets.JSONDispatcher.dispatch(JSONDispatcher.java:94)
    at org.cmdbuild.servlets.JSONDispatcher.doPost(JSONDispatcher.java:54)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    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.cmdbuild.filters.AuthFilter.doFilter(AuthFilter.java:144)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.cmdbuild.filters.PatchManagerFilter.doFilter(PatchManagerFilter.java:33)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.cmdbuild.filters.ConfCheckFilter.doFilter(ConfCheckFilter.java:31)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.cmdbuild.filters.TranslationFilter.doFilter(TranslationFilter.java:39)
    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)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

Caused by: org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute
    at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
    at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
    at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
    at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at org.enhydra.shark.ejb.client.ws.WAPIEJBEndpointPortSoapBindingStub.changeActivityInstanceState(Unknown Source)
    at org.cmdbuild.workflow.service.AbstractSharkService.advanceActivityInstance(AbstractSharkService.java:431)
    ... 49 more
   

Previously Maurizio wrote:

    Ciao.
   
Sto' facendo eseguire le cmdb.callFunction. Se le store procedure che scrivo contengono delle SELECT con parametri di storeProcedure solo in OUTPUT, allora le invocazioni alla callFunciotn funzionano correttamente. Se invece si fa eseguire una callFunction che esegue una UPDATE con almeno 1 parametro di INPUT come la seguente :
   
               -- Function: public."cmwf_setAssetReserved"(integer)               
               -- DROP FUNCTION public."cmwf_setAssetReserved"(integer);
               
                CREATE OR REPLACE FUNCTION public."cmwf_setAssetReserved"("AssetId" integer)
                  RETURNS void AS
                $BODY$
                BEGIN
                   update public."Asset" set "Stato"=2088  where  "Id"="AssetId";
                END
                $BODY$
                  LANGUAGE plpgsql VOLATILE
                  COST 100;
                ALTER FUNCTION public."cmwf_setAssetReserved"(integer)
                  OWNER TO postgres;
                COMMENT ON FUNCTION public."cmwf_setAssetReserved"(integer) IS 'TYPE: function';
   
allora viene prodotta l'exception error riporato qui sotto

            "org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute"
   
il dettaglio completo dell'exception e' riportato qui sotto dopo il tag     ERRORE_EXCEPTION_COMPLETA
   
In altri punti di questo forum ho visto che un problema simile e' stato riportato gia' altre volte, ma non non vedo mai la soluzione esatta al problema. In particolare sembra che per dichiarare le CallFunction che hanno parametri in INPUT si debba utilizzare una sintassi SQL particolare. Sui manuali c'e' una pagina dove vengono viualizzati degli esempi di dichiarazione che fanno uso della EXECUTE e RETRUN QUERY EXECUTE, ... ho provato ad  usarli ma non funziona   

Quindi la domanda: qual e' l'errore nella mia dichiarazione di FUNCTION qui sopra ?
        Quale e' il modo corretto di dichiarare le function con attributi in INPUT ?
        Oppure potreste fornire degli esempi funzionanti ?
       
Grazie
M.   
    ERRORE_EXCEPTION_COMPLETA

Call: services/json/workflow/saveactivity
------------------------------------------
Error: org.cmdbuild.workflow.CMWorkflowException: org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute
    at org.cmdbuild.workflow.service.AbstractSharkService.advanceActivityInstance(AbstractSharkService.java:435)
    at org.cmdbuild.workflow.service.TransactedSharkService.access$1301(TransactedSharkService.java:16)
    at org.cmdbuild.workflow.service.TransactedSharkService$13.command(TransactedSharkService.java:225)
    at org.cmdbuild.workflow.service.TransactedSharkService$13.command(TransactedSharkService.java:222)
    at org.cmdbuild.workflow.service.TransactedSharkService$TransactedExecutor.execute(TransactedSharkService.java:24)
    at org.cmdbuild.workflow.service.TransactedSharkService.advanceActivityInstance(TransactedSharkService.java:222)
    at org.cmdbuild.workflow.DefaultWorkflowEngine.advanceActivity(DefaultWorkflowEngine.java:455)
    at org.cmdbuild.logic.WorkflowLogic.updateActivity(WorkflowLogic.java:401)
    at org.cmdbuild.logic.WorkflowLogic.updateProcess(WorkflowLogic.java:371)
    at org.cmdbuild.logic.WorkflowLogic.updateProcess(WorkflowLogic.java:353)
    at org.cmdbuild.servlets.json.Workflow.saveActivity(Workflow.java:189)
    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:606)
    at org.cmdbuild.servlets.JSONDispatcher.dispatch(JSONDispatcher.java:94)
    at org.cmdbuild.servlets.JSONDispatcher.doPost(JSONDispatcher.java:54)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    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.cmdbuild.filters.AuthFilter.doFilter(AuthFilter.java:144)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.cmdbuild.filters.PatchManagerFilter.doFilter(PatchManagerFilter.java:33)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.cmdbuild.filters.ConfCheckFilter.doFilter(ConfCheckFilter.java:31)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.cmdbuild.filters.TranslationFilter.doFilter(TranslationFilter.java:39)
    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)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

Caused by: org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute
    at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
    at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
    at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
    at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
    at org.enhydra.shark.ejb.client.ws.WAPIEJBEndpointPortSoapBindingStub.changeActivityInstanceState(Unknown Source)
    at org.cmdbuild.workflow.service.AbstractSharkService.advanceActivityInstance(AbstractSharkService.java:431)
    ... 49 more
   

Ciao , anche io sto riscontrando lo stesso problema, la funzione che ho creato per la vista è molto semplice:

CREATE OR REPLACE FUNCTION public.prova_email(IN seriale text, OUT mail text)

 RETURNS text

 LANGUAGE plpgsql

AS $function$BEGIN

EXECUTE 'SELECT "Supplier"."email"

FROM "Asset", "Supplier"

 WHERE "Asset"."Supplier"="Supplier"."Id"

 and "Asset"."Serial"='||quote_literal(seriale) INTO mail;

 END

 $function$

Ma non è chiaro come passare alla vista   il valore di INPUT. 
   
Tu hai risolto? Ho cercato qualche esempio / documentazione in merito ma non ho trovato nulla . Grazie

Al momento le viste di CMDBuild non prevedono la possibilità di definire dei parametri.

CMDBuild Team