Hi Scott / Gurus! ,

in SOAPEventHandler  dispatcher and delegator is being got
from  HttpServletRequest  request.

However in XmlRpcHttpServer the request is being
eventually handled via a callback (handler) of class
ServiceRpcHandler . I am not sure how the HttpServletRequest
can be passed till execute function of ServiceRpcHandler

any tips ?

regds
mallah.



On Fri, Mar 16, 2018 at 7:33 PM, Rajesh Mallah <mallah.raj...@gmail.com>
wrote:

> The EventHandler objects are
>> singletons shared among all incoming requests so we don't want to store
>> request-specific objects in fields that are accessed by all requests or
>> the
>> results will get pretty unpredictable for concurrent requests across
>> multiple tenants.
>>
>
> Agreed and trying to see how the dispatcher and delegator can be got
> at per request basis. Thanks for the time/attention.
>
> regds
> mallah.
>
>
>
>
>
>
>
> On Fri, Mar 16, 2018 at 12:39 AM, Scott Gray <scott.g...@hotwaxsystems.com
> > wrote:
>
>> You're completely right Rajesh, sorry, I jumped the gun without having a
>> proper look in my reply.
>>
>> Your fix looks correct except that we need to move dispatcher/delegator to
>> local variables rather than instance fields.  The EventHandler objects are
>> singletons shared among all incoming requests so we don't want to store
>> request-specific objects in fields that are accessed by all requests or
>> the
>> results will get pretty unpredictable for concurrent requests across
>> multiple tenants.
>>
>> Regards
>> Scott
>>
>>
>> On 16 March 2018 at 07:01, Rajesh Mallah <mallah.raj...@gmail.com> wrote:
>>
>> > Hi Scott ,
>> >
>> > I could get it to work by setting dispatcher and delegator only.
>> > I referred SOAPEventHandler.java which handles tenants fine.
>> >
>> > I could not see userLogin handling tenantId as suggested by you,
>> > can you please see the below and tell if it is correct.
>> >
>> > Do we have test coverage to see if does not break anything else?
>> >
>> > $ diff  -u5 XmlRpcEventHandler.java.orig   XmlRpcEventHandler.java
>> > --- XmlRpcEventHandler.java.orig        2018-03-15 23:29:46.954352066
>> +0530
>> > +++ XmlRpcEventHandler.java     2018-03-15 23:29:51.734435105 +0530
>> > @@ -91,10 +91,12 @@
>> >      /**
>> >       * @see
>> > org.apache.ofbiz.webapp.event.EventHandler#invoke(ConfigXMLR
>> eader.Event,
>> > ConfigXMLReader.RequestMap, javax.servlet.http.HttpServletRequest,
>> > javax.servlet.http.HttpServletResponse)
>> >       */
>> >      public String invoke(Event event, RequestMap requestMap,
>> > HttpServletRequest request, HttpServletResponse response) throws
>> > EventHandlerException {
>> >          String report = request.getParameter("echo");
>> > +        dispatcher = (LocalDispatcher) request.getAttribute("
>> > dispatcher");
>> > +        delegator = (Delegator) request.getAttribute("delegator");
>> >          if (report != null) {
>> >              BufferedReader reader = null;
>> >              StringBuilder buf = new StringBuilder();
>> >              try {
>> >                  // read the inputstream buffer
>> >
>> >
>> >
>> > On Thu, Mar 15, 2018 at 9:51 PM, Scott Gray <
>> scott.g...@hotwaxsystems.com>
>> > wrote:
>> >
>> > > Hi Rajesh,
>> > >
>> > > It looks like the XmlRpcEventHandler class doesn't support this but it
>> > > could easily be modified to do so.  I'd suggest filing a ticket, and
>> > > perhaps even providing a patch :-)
>> > >
>> > > The tenantId just needs to be derived from the url and then passed
>> into
>> > the
>> > > userLogin service in the OfbizRpcAuthHandler.isAuthorized(...)
>> method.
>> > >
>> > > Regards
>> > > Scott
>> > >
>> > > On 16 March 2018 at 00:22, Rajesh Mallah <mallah.raj...@gmail.com>
>> > wrote:
>> > >
>> > > > Hello All ,
>> > > >
>> > > > Is it possible to direct the webservice call to a particular tenant
>> > using
>> > > > XMLRPC?
>> > > >
>> > > > I am referring to
>> > > >
>> > > >
>> > > > https://cwiki.apache.org/confluence/display/OFBIZ/Using+
>> XMLRPC+as+an+
>> > > > alternative+to+SOAP
>> > > >
>> > > >
>> > > > consider the snippet
>> > > >
>> > > > =======================================================
>> > > >   XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
>> > > >         config.setServerURL(new URL("
>> > > > http://127.0.0.1/webtools/control/xmlrpc";
>> > > > <http://127.0.0.1/webtools/control/xmlrpc>));
>> > > >         config.setEnabledForExceptions(true);
>> > > >         config.setEnabledForExtensions(true);
>> > > >
>> > > >         XmlRpcClient client = new XmlRpcClient();
>> > > >         client.setConfig(config);
>> > > >
>> > > >         Map paramMap = new HashMap();
>> > > >         paramMap.put("login.username", "admin");
>> > > >         paramMap.put("login.password", "ofbiz");
>> > > >         paramMap.put("idToFind", "admin");
>> > > > ============================================================
>> > ===========
>> > > > I tried setting the host part of serverUrl to domain_name of
>> > > > tenant_domain_name .
>> > > >
>> > > > I find that the requests always work on the first tenant .
>> > > > i need to work with a specific tenant .
>> > > >
>> > > > Any help is solicited.
>> > > >
>> > > > regds
>> > > > mallah.
>> > > >
>> > >
>> >
>>
>
>

Reply via email to