>
> 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(ConfigXMLReader.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