-
1. Re: Invoke Service From ESB
burrsutter Feb 8, 2008 11:08 AM (in response to poyge394)We just made a few tests in this area based on another thread. So using SI in an action does work. Things to look at:
- does the second service run standalone, cleanly with no error?
- is there anything strange in the message like non-serializable object attachments (I've been guilty of leaving that off in some of the quickstarts)?
Burr -
2. Re: Invoke Service From ESB
bernd.koecke Feb 8, 2008 11:11 AM (in response to poyge394)Hello,
may be the attribute mep="OneWay" is missing in your definition of the DeadLetterService. You can find it in 'jbossesb.esb/META-INF/jboss-esb.xml'. There should be a part like:<service name="JBossESB-Internal" category="DeadLetterService"> <listeners> ... </listerners> <actions mep="OneWay"> ... </actions> </service>
I think there will be an endless loop, if this attribute is missing and a message should be stored in the DeadLetterQueue. But I haven't tried it, I only looked into the code, so I may be wrong.
Hope that helps,
Bernd -
3. Re: Invoke Service From ESB
poyge394 Feb 8, 2008 5:32 PM (in response to poyge394)thanks guys, i get it work, actually it was an space in the configuration for the service so when i remove that it start working,
but still is SI the recomended way to call an service from an action class ? is thair any disadvantage with that ? -
4. Re: Invoke Service From ESB
bernard.tison Feb 9, 2008 6:06 AM (in response to poyge394)The ServiceInvoker is indeed the recommended way to call another service from within an action class, because the ServiceInvoker hides all the implementation and location details for you. You just have to supply the category and name of the Service, and the ServiceInvoker transparently does the rest (service lookup in the registry, obtaining a suitable courier, handle message redelivery in case of faults, ...).
Alternatively, if the service call inside your action is just for routing purposes, you might want to consider StaticRouter or ContentBasedRouter actions shipped with the ESB
HTH
Bernard -
5. Re: Invoke Service From ESB
joe_boy12 Jul 25, 2011 2:12 PM (in response to bernard.tison)hello folks
I am trying to build an error handling service which gets called from processException method of an Action - however this is a Synch call, initiated on Http Gateway - I have a common.esb deployed on JBoss SOA5.1 which is common for all the .esb applications we have. Things work fine until the exception is raised and processException method is called, the moment I use SI to call this error handling service from Action, there is an endless loop which keeps throwing following warning.
INFO [org.jboss.soa.esb.client.ServiceInvoker] (pool-37-thread-1) Unresponsive EPR: InVMEpr xxxxxxxxxxxxxxxx
INFO [org.jboss.soa.esb.client.ServiceInvoker] (pool-37-thread-1) Service: Infrastructure:HandleErrorService not found in the registry
WARN [org.jboss.internal.soa.esb.couriers.InVMCourier] (Thread-28) InVMCourier pickup caught: org.jboss.internal.soa.esb.couriers.transport.InVMException: Could not locate service entry for epr InVMEpr [ PortReference < <wsa:Address invm://496e66726173747275637475726524242424242424242424242448616e646c654572726f7253657276696365/false?false#10000/>, <wsa:ReferenceProperties jbossesb:passByValue : false/> > ]
this is how my jboss-esb.xml looks like for common.esb
<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.2.0.xsd" parameterReloadSecs="5">
<services>
<service category="Infrastructure" name="HandleErrorService" description="" invmScope="GLOBAL">
<actions mep="RequestResponse">
<action name="PrintMe" class="org.jboss.soa.esb.actions.SystemPrintln">
<property name="message" value="HandleErrorService called" />
<property name="printfull" value="false" />
</action><action name="baseAction" class="com.nike.esb.common.action.BaseErrorHandlingAction" process="processErrors"/>
</actions>
</service>
</services>
</jbossesb>and this is how I am calling it.
@OnException
public void processException(Message message, Throwable t) throws ActionProcessingException
{
if( message != null )
{
message.getBody().add("exceptionTrace",t);
try {
Service myService = new Service("Infrastructure", "HandleErrorService");
ServiceInvoker si = new ServiceInvoker(myService);
si.deliverSync(message, 1000);
} catch (Exception e) {
e.printStackTrace();
throw new ActionProcessingException(e.getMessage(), e);
}
}
}I can see the service registered in jmx-console, the surprising thing is the http client does get the perfect custom reply telling the exact error - however on server console there is an endless warning loop. Any guesses?
-
6. Re: Invoke Service From ESB
joe_boy12 Jul 25, 2011 2:49 PM (in response to joe_boy12)By closely looking at logs looks like my business service (pool-37-thread-1) and error handling service (invoked by SI - pool-21-thread-1) run in two different threads, which pool-21-thread-1 returns the response to client - thread pool-37-thread-1 keeps on throwing warning that service not found in registry and there is one more thread (Thread-27) which keeps on throwing following warning...
InVMException: Could not locate service entry for epr
-
7. Re: Invoke Service From ESB
tcunning Jul 26, 2011 12:10 AM (in response to joe_boy12)Please post a full stack trace and a full description of what you are doing and what you are seeing.
-
8. Re: Invoke Service From ESB
h.wolffenbuttel Jul 26, 2011 3:30 AM (in response to joe_boy12)Hi,
If you have a message which is running through the pipeline of a service, it will have a 'replyto' and a 'from' EPR definition. If you want to resend the current message you will have to ajust the replyto to null, because otherwise the message invoker will assume that you have already put the right locations in.
If you have for example a service called 'testcategory','testname' and you have a request response defined, the message will contain the from EPR and the replyto EPR. If you invoke a synchronous serviceInvoker to service 'testcat2','testname2', you will have to reset the replyto EPR, because other wise the message will go to the 'testname'-replyto-EPR instead of the replyto EPR of te serviceinvoker that called 'testname2'. The serviceInvoker will timeout and an unresponsive EPR exception will be thrown.
There is a default action 'org.jboss.soa.esb.actions.SyncServiceInvoker' which does all that.
cheers,
Hans
-
9. Re: Invoke Service From ESB
sjosh3 Jul 21, 2014 9:44 AM (in response to joe_boy12)Hello Joe,
I realize this is a 3 yr old post, but were you able to get this resolved and if so, how?
sameer
-
10. Re: Invoke Service From ESB
tcunning Jul 21, 2014 1:09 PM (in response to sjosh3)Sameer,
What exactly is your issue? Have you tried the approaches that Hans suggests?