CMDBuild Forum

Uso della callFunction

Buongiorno,

 

provando a utilizzare in un workflow la callFunction per invocare una procedura SQL ottengo il seguente errore:

 ERROR 2014-09-10 07:36:17 [jsonrpc ] A org.cmdbuild.workflow.CMWorkflowException occurred calling method class org.cmdbuild.servlets.json.Workflow.saveActivity: org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute

la funzione sql è invocata da workflow utilizzando la seguente sintassi:

res=cmdb.callFunction("aggiornaconsuntivo")
.with("Pref",Citta)
.with("Anno",Anno)
.with("Acc_Pref",Num)
.with("Acc_Anno",Acc_Anno)
.execute();

ed è la seguente:

-- Function: aggiornaconsuntivo(character varying, integer, integer, integer)

-- DROP FUNCTION aggiornaconsuntivo(character varying, integer, integer, integer);

CREATE OR REPLACE FUNCTION aggiornaconsuntivo("Pref" character varying, "Anno" integer, "Acc_Pref" integer, "Acc_Anno" integer)
  RETURNS void AS
$BODY$

    Update "Accreditamento"
        set "Consuntivato" =    
        (
        SELECT
            sum(("DatiMensili"."A"+"DatiMensili"."B"+"DatiMensili"."C"+  "DatiMensili"."D"+  "DatiMensili"."E"+  "DatiMensili"."F")) as somma
        FROM
            "DatiMensili"
        WHERE
            "DatiMensili"."Citta" = "Pref" and "DatiMensili"."Status"='A' and "DatiMensili"."Anno"="Anno"
        )
    Where
    (
        "Accreditamento"."Acc_Pref"="Acc_Pref" and "Accreditamento"."Status"='A' and "Accreditamento"."Acc_Anno" = "Acc_Anno"
    );

    Update "Accreditamento"
        set "Residuo"=
        (
            "Accreditamento"."Acc_Importo"-"Accreditamento"."Consuntivato"
        )
        Where
        (
            "Accreditamento"."Acc_Pref"="Acc_Pref" and "Accreditamento"."Status"='A'
        );
       

$BODY$
  LANGUAGE sql VOLATILE
  COST 100;
ALTER FUNCTION aggiornaconsuntivo(character varying, integer, integer, integer)
  OWNER TO postgres;
COMMENT ON FUNCTION aggiornaconsuntivo(character varying, integer, integer, integer) IS 'TYPE: function';

la funzione sql è stata testata e la sua esecuzione è corretta, infatti da pgAdmin se eseguo il comando

 

select aggiornaconsuntivo('Roma',390,797,2014);

i dati vengono correttamente aggiornati

Aggiungo che nel log il messaggio di errore segnalato è preceduto da

WARN  2014-09-10 07:36:16 [org.apache.cxf.phase.PhaseInterceptorChain] Application {http://proxy.sun.com/}$Proxy182Service#{http://soap.services.cmdbuild.org}getFunctionList has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault

 

Avete qualche indicazione su cosa eventualmente guardare?

 

Grazie

Donato

La definizione della funzione non sembrerebbe soddisfare i requisiti indicati nel manuale (Administrator Manual pag.54), per lo meno il secondo punto relativo alla esplicitazione dei parametri di input ("IN") e di output ("OUT").

CMDBuild Team

Previously Tecnoteca wrote:

La definizione della funzione non sembrerebbe soddisfare i requisiti indicati nel manuale (Administrator Manual pag.54), per lo meno il secondo punto relativo alla esplicitazione dei parametri di input ("IN") e di output ("OUT").

CMDBuild Team

Salve,

 

la definizione della funzione l'ho fatta come indicato sul manuale ovvero specificando IN nella definizione

 

CREATE OR REPLACE FUNCTION aggiornaconsuntivo(IN "Pref" character varying, IN "Anno" integer, IN "Acc_Pref" integer, IN "Acc_Anno" integer)

  RETURNS void AS

.....

 

ma a seguito dell'inserimento da pgAdmin il codice della funzione risulta  essere

 

CREATE OR REPLACE FUNCTION aggiornaconsuntivo("Pref" character varying, "Anno" integer, "Acc_Pref" integer, "Acc_Anno" integer)

  RETURNS void AS

 

ho provato a costruirla anche da interfaccia di pgAdmin specificando nelle variabii IN ... ma il risultato è lo stesso!

 

cosa mi consigliate di guardare (Postgres è la versione 9.2 e pgAdmin utilizzato è la 1.16.1) perchè la definizione sia coerente.

 

Grazie

Donato

 

Salve

 

Dopo una serie di tentativi sono riuscito a definire la funzione con le clausole IN e OUT ma il risultato della esecuzione è lo stesso, si verifica il medesimo errore.

Nel log di shark è presente il messaggio

 

2014-09-10 14:51:24,228: Activity[Process Id=1101_Package_test_Process_test, Id=1908_1101_Package_test_Process_test_SYS002, ba=null, ActDefId=SYS002] - Executing script [type=text/java,value=res=cmdb.callFunction("aggiornamento")

.with("Pref",Prefettura)

.with("Anno",Anno)

.with("Acc_Pref",Num)

.with("Acc_Anno",Acc_Anno)

.execute();]

2014-09-10 14:51:24,229: loading workflow api 'org.cmdbuild.workflow.api.SoapSharkWorkflowApiFactory'

2014-09-10 14:51:24,229: loading class 'org.cmdbuild.workflow.api.SoapSharkWorkflowApiFactory' that should be a 'org.cmdbuild.workflow.api.SharkWorkflowApiFactory'

2014-09-10 14:51:24,304: loading mail api 'org.cmdbuild.common.api.mail.javax.mail.JavaxMailBasedMailApiFactory'

2014-09-10 14:51:24,304: loading class 'org.cmdbuild.common.api.mail.javax.mail.JavaxMailBasedMailApiFactory' that should be a 'org.cmdbuild.common.api.mail.MailApiFactory'

2014-09-10 14:51:24,440: BshToolAgent - application res=cmdb.callFunction("aggiornamento")

.with("Pref",Prefettura)

.with("Anno",Anno)

.with("Acc_Pref",Num)

.with("Acc_Anno",Acc_Anno)

.execute(); terminated incorrectly: Sourced file: eval stream : Method Invocation execute : at Line: 6 : in file: eval stream : .execute ( )

 

Target exception: javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.

 

2014-09-10 14:51:24,440: cannot execute tool agent - application  terminated incorrectly

Sourced file: eval stream : Method Invocation execute : at Line: 6 : in file: eval stream : .execute ( )

 

Target exception: javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.

 

    at bsh.BSHPrimarySuffix.doName(Unknown Source)

    at bsh.BSHPrimarySuffix.doSuffix(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHAssignment.eval(Unknown Source)

    at bsh.Interpreter.eval(Unknown Source)

    at bsh.Interpreter.eval(Unknown Source)

    at org.enhydra.shark.toolagent.BshToolAgent.invokeApplication(Unknown Source)

    at org.cmdbuild.shark.toolagent.OverriddableDefaultToolAgent.invoke(OverriddableDefaultToolAgent.java:202)

    at org.cmdbuild.shark.toolagent.CmdbuildDefaultToolAgent.invoke(CmdbuildDefaultToolAgent.java:70)

    at org.cmdbuild.shark.toolagent.OverriddableDefaultToolAgent.invokeApplication(OverriddableDefaultToolAgent.java:87)

    at org.enhydra.shark.toolagent.StandardToolAgentManager.invokeToolAgent(Unknown Source)

    at org.enhydra.shark.StandardToolActivityHandler$ToolRunner.invokeApplication(Unknown Source)

    at org.enhydra.shark.StandardToolActivityHandler$ToolRunner.run(Unknown Source)

    at org.enhydra.shark.StandardToolActivityHandler.executeActivity(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.runTool(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.startActivity(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.activate(Unknown Source)

    at org.enhydra.shark.WfProcessImpl.startActivity(Unknown Source)

    at org.enhydra.shark.WfProcessImpl.queueNext(Unknown Source)

    at org.enhydra.shark.WfProcessImpl.run(Unknown Source)

    at org.enhydra.shark.WfProcessImpl.activity_complete(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.finish(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.complete(Unknown Source)

    at org.enhydra.shark.SharkUtilities.changeActivityState(Unknown Source)

    at org.enhydra.shark.WAPIImpl.changeActivityInstanceState(Unknown Source)

    at org.enhydra.shark.ws.WAPIWrapper.changeActivityInstanceState(Unknown Source)

    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.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)

    at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)

    at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)

    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

    at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)

    at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)

    at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)

    at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)

    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:501)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

    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:408)

    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)

    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)

    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:722)

org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute

    at org.enhydra.shark.toolagent.BshToolAgent.invokeApplication(Unknown Source)

    at org.cmdbuild.shark.toolagent.OverriddableDefaultToolAgent.invoke(OverriddableDefaultToolAgent.java:202)

    at org.cmdbuild.shark.toolagent.CmdbuildDefaultToolAgent.invoke(CmdbuildDefaultToolAgent.java:70)

    at org.cmdbuild.shark.toolagent.OverriddableDefaultToolAgent.invokeApplication(OverriddableDefaultToolAgent.java:87)

    at org.enhydra.shark.toolagent.StandardToolAgentManager.invokeToolAgent(Unknown Source)

    at org.enhydra.shark.StandardToolActivityHandler$ToolRunner.invokeApplication(Unknown Source)

    at org.enhydra.shark.StandardToolActivityHandler$ToolRunner.run(Unknown Source)

    at org.enhydra.shark.StandardToolActivityHandler.executeActivity(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.runTool(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.startActivity(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.activate(Unknown Source)

    at org.enhydra.shark.WfProcessImpl.startActivity(Unknown Source)

    at org.enhydra.shark.WfProcessImpl.queueNext(Unknown Source)

    at org.enhydra.shark.WfProcessImpl.run(Unknown Source)

    at org.enhydra.shark.WfProcessImpl.activity_complete(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.finish(Unknown Source)

    at org.enhydra.shark.WfActivityImpl.complete(Unknown Source)

    at org.enhydra.shark.SharkUtilities.changeActivityState(Unknown Source)

    at org.enhydra.shark.WAPIImpl.changeActivityInstanceState(Unknown Source)

    at org.enhydra.shark.ws.WAPIWrapper.changeActivityInstanceState(Unknown Source)

    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.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)

    at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)

    at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)

    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

    at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)

    at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)

    at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)

    at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)

    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:501)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

    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:408)

    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)

    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)

    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2442)

    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2431)

    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:722)

Caused by: Sourced file: eval stream : Method Invocation execute : at Line: 6 : in file: eval stream : .execute ( )

 

Target exception: javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.

 

    at bsh.BSHPrimarySuffix.doName(Unknown Source)

    at bsh.BSHPrimarySuffix.doSuffix(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHPrimaryExpression.eval(Unknown Source)

    at bsh.BSHAssignment.eval(Unknown Source)

    at bsh.Interpreter.eval(Unknown Source)

    at bsh.Interpreter.eval(Unknown Source)

    ... 57 more

 

Salve,
purtroppo a quanto sembra il sistema non è a conoscenza della presenza della funzione, o comunque non riesce ad eseguirla.
E' stata svuotata la cache di CMDBuild o, meglio ancora, riavviato CMDBuild intero?
C'è un unica funzione con quel nome e quel commento? L'overloading delle stored procedure, con medesimo commento, non è attualmente supportato in CMDBuild.
 
Grazie.
 
CMDBuild Team

Salve,

 

oltre a svuotare la cache il sistema è stato anche riavviato.

In merito alla duplicazioni di nomi la funzione non ha duplicati, essendo la prima sviluppata, funzione definita in postgres.

 

Vi chiedo se è possibile in qualche modo aumentare il livello di log dei moduli al fine di verificare informazioni di maggior dettaglio.

 

Ho inoltre fatto ulteriori prove definendo una nuova funzione con le corrette definizioni dei parametri IN e OUT ma il risultato è stato lo stesso.

 

grazie

 

Donato

 

 

Ciao Donato,
ho il tuo stesso problema nella esecuzione di una stored da workflow. Ho visto che non hai ricevuto alcuna risposta, ma sei comunque riuscito a superare questo problema?
 
Grazie.
Silvio.
---------------------------------------
 
Previously Donato wrote:

Buongiorno,

 

provando a utilizzare in un workflow la callFunction per invocare una procedura SQL ottengo il seguente errore:

 ERROR 2014-09-10 07:36:17 [jsonrpc ] A org.cmdbuild.workflow.CMWorkflowException occurred calling method class org.cmdbuild.servlets.json.Workflow.saveActivity: org.enhydra.shark.api.internal.toolagent.ToolAgentGeneralException: Sourced file: eval stream : Method Invocation execute

la funzione sql è invocata da workflow utilizzando la seguente sintassi:

res=cmdb.callFunction("aggiornaconsuntivo")
.with("Pref",Citta)
.with("Anno",Anno)
.with("Acc_Pref",Num)
.with("Acc_Anno",Acc_Anno)
.execute();

ed è la seguente:

-- Function: aggiornaconsuntivo(character varying, integer, integer, integer)

-- DROP FUNCTION aggiornaconsuntivo(character varying, integer, integer, integer);

CREATE OR REPLACE FUNCTION aggiornaconsuntivo("Pref" character varying, "Anno" integer, "Acc_Pref" integer, "Acc_Anno" integer)
  RETURNS void AS
$BODY$

    Update "Accreditamento"
        set "Consuntivato" =    
        (
        SELECT
            sum(("DatiMensili"."A"+"DatiMensili"."B"+"DatiMensili"."C"+  "DatiMensili"."D"+  "DatiMensili"."E"+  "DatiMensili"."F")) as somma
        FROM
            "DatiMensili"
        WHERE
            "DatiMensili"."Citta" = "Pref" and "DatiMensili"."Status"='A' and "DatiMensili"."Anno"="Anno"
        )
    Where
    (
        "Accreditamento"."Acc_Pref"="Acc_Pref" and "Accreditamento"."Status"='A' and "Accreditamento"."Acc_Anno" = "Acc_Anno"
    );

    Update "Accreditamento"
        set "Residuo"=
        (
            "Accreditamento"."Acc_Importo"-"Accreditamento"."Consuntivato"
        )
        Where
        (
            "Accreditamento"."Acc_Pref"="Acc_Pref" and "Accreditamento"."Status"='A'
        );
       

$BODY$
  LANGUAGE sql VOLATILE
  COST 100;
ALTER FUNCTION aggiornaconsuntivo(character varying, integer, integer, integer)
  OWNER TO postgres;
COMMENT ON FUNCTION aggiornaconsuntivo(character varying, integer, integer, integer) IS 'TYPE: function';

la funzione sql è stata testata e la sua esecuzione è corretta, infatti da pgAdmin se eseguo il comando

 

select aggiornaconsuntivo('Roma',390,797,2014);

i dati vengono correttamente aggiornati

Aggiungo che nel log il messaggio di errore segnalato è preceduto da

WARN  2014-09-10 07:36:16 [org.apache.cxf.phase.PhaseInterceptorChain] Application {http://proxy.sun.com/}$Proxy182Service#{http://soap.services.cmdbuild.org}getFunctionList has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault

 

Avete qualche indicazione su cosa eventualmente guardare?

 

Grazie

Donato