Reputation: 215
Im able to log some message but how to change it to access a database and send those messages and store there?
i know the database part is disconected from the pattern but tried somethings and nothing worked so far..
code:
<scripting:transformer name="noopLoggingTransformer">
<scripting:script engine="groovy">
log.info "insert into inbound_messages (payload, timestamp, agent, ip_from, endpoint, soap_operation) values ('',now(), ${message.getInboundProperty('user-agent')}, ${message.getInboundProperty('MULE_REMOTE_CLIENT_ADDRESS')}, ${message.getInboundProperty('http.request')}, '');"
message
</scripting:script>
</scripting:transformer>
<pattern:web-service-proxy name="service" transformer-refs="noopLoggingTransformer" inboundAddress="${serverName}/services/Logradouros/LogradouroServico" outboundAddress="${targetServer}/servicos/v2/LogradouroServico.svc" wsdlFile="LogradouroServicos.wsdl">
</pattern:web-service-proxy>
<jdbc-ee:postgresql-data-source name="dbconection" user="${database.user}" password="${database.pass}" url="${database.url}" transactionIsolation="UNSPECIFIED" doc:name="PostgreSQL Data Source">
</jdbc-ee:postgresql-data-source>
<jdbc-ee:connector name="jdbcConnector" dataSource-ref="dbconection" validateConnections="false" transactionPerMessage="true" queryTimeout="10" pollingFrequency="10000" doc:name="JDBC">
<jdbc-ee:query key="querymsg" value="insert into inbound_messages (payload, timestamp, agent, ip_from, endpoint, soap_operation) values ('', now(), '','','')"></jdbc-ee:query>
</jdbc-ee:connector>
What i did after was try a different aproach:
<flow name="logradouros-autenticacao" doc:name="logradouros-autenticacao">
<servlet:inbound-endpoint path="${webservice.logradouros.in.autenticacao.path}" responseTimeout="10000" doc:name="HTTP"></servlet:inbound-endpoint>
<async doc:name="Async">
<flow-ref name="log-request" doc:name="Flow Reference"></flow-ref>
</async>
<outbound-endpoint exchange-pattern="request-response" address="${webservice.logradouros.out.protocol}://${webservice.logradouros.out.host}/${webservice.logradouros.out.autenticacao.path}" doc:name="Generic"></outbound-endpoint>
</flow>
<flow name="log-request" doc:name="log-request">
<logger message="1-> #[groovy:payload.getClass()]" level="INFO" doc:name="Logger"></logger>
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="insertMsg" responseTimeout="10000" queryTimeout="-1" connector-ref="jdbcConnector" doc:name="Persist raw message"></jdbc-ee:outbound-endpoint>
<logger message="#[header:INBOUND:Host] #[header:INBOUND:http.method] #[message.inboundProperties.entrySet().toString()] #[groovy:payload.toString()] #[groovy: return message.getInboundPropertyNames().toString()] #[groovy: return message.getInboundProperty('request.parameters').toString()]" level="INFO" category="mule.http.accesslog" doc:name="Logger"></logger>
<logger message="#[message.outboundProperties.entrySet().toString()]" level="INFO" category="mule.http.accesslog" doc:name="Logger"></logger>
</flow>
its not 100% but it may workout, the approach through pattern wasnt working...
Upvotes: 0
Views: 827
Reputation: 33413
In your transformer, use muleContext.client
to dispatch messages to VM queue consumed by another flow, which will take care of insert data in the DB.
So in your case, something similar to the following should work:
<scripting:transformer name="noopLoggingTransformer">
<scripting:script engine="groovy">
muleContext.client.dispatch('vm://log-request.in', message)
message
</scripting:script>
</scripting:transformer>
<pattern:web-service-proxy name="service" transformer-refs="noopLoggingTransformer" inboundAddress="${serverName}/services/Logradouros/LogradouroServico" outboundAddress="${targetServer}/servicos/v2/LogradouroServico.svc" wsdlFile="LogradouroServicos.wsdl" />
<flow name="log-request" doc:name="log-request">
<vm:inbound-endpoint path="log-request.in" />
<logger message="1-> #[groovy:payload.getClass()]" level="INFO" doc:name="Logger" />
<jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="insertMsg" responseTimeout="10000" queryTimeout="-1" connector-ref="jdbcConnector" doc:name="Persist raw message" />
<!-- TODO use MEL, not these old style expressions -->
<logger message="#[header:INBOUND:Host] #[header:INBOUND:http.method] #[message.inboundProperties.entrySet().toString()] #[groovy:payload.toString()] #[groovy: return message.getInboundPropertyNames().toString()] #[groovy: return message.getInboundProperty('request.parameters').toString()]" level="INFO" category="mule.http.accesslog" doc:name="Logger" />
<logger message="#[message.outboundProperties.entrySet().toString()]" level="INFO" category="mule.http.accesslog" doc:name="Logger" />
</flow>
Upvotes: 1