On Nov 30, 2007 4:44 PM, Simon Laws <[EMAIL PROTECTED]> wrote: > > > On Nov 30, 2007 4:38 PM, ant elder <[EMAIL PROTECTED]> wrote: > > > On Nov 30, 2007 2:46 PM, Simon Laws <[EMAIL PROTECTED]> wrote: > > > > > On Nov 30, 2007 2:09 PM, ant elder < [EMAIL PROTECTED]> wrote: > > > > > > > On Nov 30, 2007 1:52 PM, Simon Laws <[EMAIL PROTECTED]> > > wrote: > > > > > > > > > We have discussed this behaviour before and I was sort of > > convinced > > > last > > > > > time but now I'm playing with the store sample I'm not so sure. > > This > > > > > features comes about because of the store composite, for example, > > > > > > > > > > <component name="Store"> > > > > > <t:implementation.widget location="uiservices/store.html"/> > > > > > <service name="Widget"> > > > > > <t:binding.http uri=" http://localhost:8101/ui"/> > > > > > </service> > > > > > <reference name="catalog" target="Catalog"> > > > > > <t:binding.jsonrpc/> > > > > > </reference> > > > > > <reference name="shoppingCart" target="ShoppingCart/Cart"> > > > > > <t: binding.atom/> > > > > > </reference> > > > > > <reference name="shoppingTotal" > > target="ShoppingCart/Total"> > > > > > <t:binding.jsonrpc /> > > > > > </reference> > > > > > </component> > > > > > > > > > > To keep the composite tidy many of the URIs are omitted and they > > rely > > > on > > > > > the > > > > > default value. However the URI for one of the bindings is provided > > so > > > > that > > > > > the node will detect this and use this as the default for all > > service > > > > > bindings (where this kind of URI is applicable). All the bindings > > must > > > > be > > > > > the same here as store.html relies on the services being > > accessible > > > from > > > > > the > > > > > same root. > > > > > > > > > > There are several places that the default port for the servlet > > host > > > > comes > > > > > from when setting up the SCA runtime. > > > > > > > > > > 1. The web app container. In this case no matter how you configure > > SCA > > > > you > > > > > will get whatever the web app container gives you > > > > > 2. Node URI. This is used to tell what endpoints SCA should use by > > > > default > > > > > and also as a unique ID for the node. When running inside a web > > app > > > this > > > > > must be the host/port you expect the web app to expose your > > services > > > on. > > > > > Otherwise SCA can't tell what values the web app container is > > going to > > > > use > > > > > and hence can't register services with the domain. In the case > > that > > > SCA > > > > > starts Tomcat/Jetty itself then the Node URI is just the default > > value > > > > > that > > > > > will be used if a URI is not provided explicitly on a binding. > > > > > 3. Binding uri attribute. If SCA is running inside a web app > > container > > > > > this > > > > > value is ignored and Node URI is used (see 2). If SCA has started > > > > > Tomcat/Jetty itself this value will be used to configure the > > endpoint > > > of > > > > > the > > > > > service. If no value is provided then the default value is used > > (see > > > 1 > > > > > and > > > > > 2). > > > > > > > > > > So what's the drawback of using > > > > > > > > > > <component name="Store"> > > > > > <t:implementation.widget location="uiservices/store.html"/> > > > > > <service name="Widget"> > > > > > <t:binding.http uri="/ui"/> > > > > > </service> > > > > > <reference name="catalog" target="Catalog"> > > > > > <t: binding.jsonrpc/> > > > > > </reference> > > > > > <reference name="shoppingCart" target="ShoppingCart/Cart"> > > > > > <t:binding.atom /> > > > > > </reference> > > > > > <reference name="shoppingTotal" > > target="ShoppingCart/Total"> > > > > > <t:binding.jsonrpc/> > > > > > </reference> > > > > > </component> > > > > > > > > > > And setting Node URI = http://localhost:8101 > > > > > > > > > > I'm uncomfortable about the current feature because I could easily > > > > include > > > > > a > > > > > component in front of the existing component, e.g. > > > > > > > > > > <component name"SomeComponent" > > > > > <implementation .../> > > > > > <service name="SomeService"> > > > > > < binding.ws url="http://localhost:8100/SomeService"/> > > > > > </service> > > > > > </component> > > > > > > > > > > > > > > > <component name="Store"> > > > > > <t:implementation.widget location="uiservices/store.html"/> > > > > > <service name="Widget"> > > > > > <t:binding.http uri="http://localhost:8101/ui"/> > > > > > </service> > > > > > <reference name="catalog" target="Catalog"> > > > > > <t:binding.jsonrpc/> > > > > > </reference> > > > > > <reference name="shoppingCart" target="ShoppingCart/Cart"> > > > > > <t: binding.atom/> > > > > > </reference> > > > > > <reference name="shoppingTotal" > > target="ShoppingCart/Total"> > > > > > <t:binding.jsonrpc /> > > > > > </reference> > > > > > </component> > > > > > > > > > > And mess it up as now the majority services in the composite are > > at > > > 8100 > > > > > and > > > > > not 8101 where store.html expects them to be. > > > > > > > > > > Regards > > > > > > > > > > Simon > > > > > > > > > > > > > I agree. We've never come up with a very consistent story about > > default > > > > URLs > > > > that works well everywhere, would be great if we could as its always > > > > causing > > > > problems with getting all the runtimes and nodes and service > > endpoints > > > > working consistently everywhere. > > > > > > > > Can we change so that the ServletHost implementation controls the > > > default > > > > base URL and have everything tries to use relative URLs with that? > > > > > > > > ...ant > > > > > > > I think we can be relatively consistent using the three sources of > > > endpoint > > > information I put in the original mail.Now I think about it there is a > > > number 4 that I didn't include so the list would be. > > > > > > 1. The web app container. In this case no matter how you configure SCA > > you > > > will get whatever the web app container gives you > > > 2. Node URI. This is used to tell what endpoints SCA should use by > > default > > > and also as a unique ID for the node. When running inside a web app > > this > > > must be the host/port you expect the web app to expose your services > > on. > > > Otherwise SCA can't tell what values the web app container is going to > > use > > > and hence can't register services with the domain. In the case that > > SCA > > > starts Tomcat/Jetty itself then the Node URI is just the default value > > > that > > > will be used if a URI is not provided explicitly on a binding. > > > 3. Binding uri attribute. If SCA is running inside a web app container > > > this > > > value is ignored and Node URI is used (see 2). If SCA has started > > > Tomcat/Jetty itself this value will be used to configure the endpoint > > of > > > the > > > service. If no value is provided then the default value is used (see > > 1 > > > and > > > 2). > > > 4. Free port. If not running inside a web app container and no Node > > URI is > > > provided then a free port is selected automatically as the default > > port > > > > > > The default is set into the servlet host when the node starts and the > > > bindings which use servlet host tend to use the servlet host interface > > to > > > calculate their endpoint. So we are pretty close to what you suggest > > but > > > we > > > need to check that it is applied everywhere. > > > > > > I tried to represent the algorithm in psuedo code ( > > > > > > > > http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Binding+URI+Construction > > > ) > > > is this correct? > > > > > > Simon > > > > > > > If (1) is made to be generic instead of webapp container specific, eg > > "the > > default from the ServletHost" then (4) could be dropped as it can be > > done by > > the ServletHost impl if it chooses as part of (1). > > > > I'm still not really clear why (2) must be an absolute URI instead of > > just a > > relative one (ie just the Node name) and be relative to the absolute URI > > from (1)? To me that seems simpler to understand and would then always > > work > > the same way no matter what the environment. I'm just trying to > > understand > > the options, I guess it doesn't make so much difference. > > > As a servlet running in a servlet container, for example, how do you get > the host and port on which you are running? > > > > > > > ...ant > >
The HttpServletRequest includes all that information i think. ...ant
