On Nov 16, 2007 11:52 AM, Simon Laws <[EMAIL PROTECTED]> wrote: > > > On Nov 16, 2007 11:41 AM, Simon Laws <[EMAIL PROTECTED]> wrote: > > > > > > > On Nov 16, 2007 11:25 AM, Simon Laws <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > On Nov 16, 2007 10:58 AM, ant elder <[EMAIL PROTECTED]> wrote: > > > > > > > On Nov 13, 2007 4:25 PM, Simon Laws <[EMAIL PROTECTED]> > > > > wrote: > > > > > > > > > On Nov 13, 2007 4:06 PM, ant elder < [EMAIL PROTECTED]> wrote: > > > > > > > > > > > Trying to run a domain manager node within a webapp and it fails > > > > as > > > > > right > > > > > > now you can only use a domain manager url without a path, eg > > > > > > http://localhost:8080 not > > > > http://localhost:8080/tuscany/domainManager. > > > > > I'd > > > > > > like to try to fix this so a path if supported if no one has any > > > > > > > > > > objections, > > > > > > also if there are any pointers to where in the node and domain > > > > code this > > > > > > > > > > > is > > > > > > handled that would be great too! > > > > > > > > > > > > ...ant > > > > > > > > > > > No objections from me. It's dealt with in three places.. > > > > > > > > > > SCADomainImpl.init() - sets up the domain runtime > > > > > SCANodeImpl.init() - sets up the node runtime > > > > > SCADomainProxy.start() - sets up a local runtime if no node is > > > > provided > > > > > > > > > > The code you are looking for is something like... > > > > > > > > > > // Configure the default server port > > > > > int port = URI.create(domainModel.getDomainURI > > > > ()).getPort(); > > > > > if (port != -1) { > > > > > ServletHostExtensionPoint servletHosts = > > > > > domainManagementRuntime.getExtensionPointRegistry().getExtensionPoint( > > > > > ServletHostExtensionPoint.class); > > > > > for (ServletHost servletHost: > > > > servletHosts.getServletHosts > > > > > ()) > > > > > { > > > > > servletHost.setDefaultPort(port); > > > > > } > > > > > } > > > > > > > > > > This is stripping the port out of the provided URL and putting it > > > > into the > > > > > servlet host. I think we would need to change this interface to > > > > allow the > > > > > whole base URL to be set on the servlet host. > > > > > > > > > > External web app container - The web app container controls the > > > > actual > > > > > endpoint and the NodeURL simply tells the tuscany runtime what > > > > endpoints > > > > > to > > > > > register. It's seems awkward that we have to provide the URL here > > > > but > > > > > there > > > > > doesn't appear to be an easy way round it. > > > > > Embedded web app container - The NodeURL should instruct the > > > > embedded > > > > > container what base URL to use for services. > > > > > > > > > > For the Node URL you must either provide a valid URL or nothing. > > > > If > > > > > nothing > > > > > then one will be chosen for you. > > > > > For Domain URL (at the node) you must either provide the URL of > > > > the domain > > > > > or nothing.If nothing then the node will run standalone. > > > > > > > > > > Regards > > > > > > > > > > Simon > > > > > > > > > > > > > This is working now for the standalone strawman testcase with both > > > > the > > > > domain and node running at a url including a path. There's a problem > > > > though > > > > with running it within the same webapp or same Tomcat container (and > > > > > > > > probably the Tuscany Geronimo integration) in that the nodes try to > > > > talk to > > > > the domain when they're started but the domain doesn't accept > > > > connections > > > > until after the container is completely up and started, so the node > > > > sends > > > > the register request to the domain and hangs waiting for the domain > > > > to > > > > answer. Not sure whats the best way to get around this, anyone have > > > > any good > > > > ideas? > > > > > > > > ...ant > > > > > > > In trying to understand the problem here I see two scenarios. > > > > > > - I want to run my webapp as a standalone SCA application in which > > > case I don't specify a domain URL and the node doesn't try to connect to > > > the > > > domain. > > > - I want to run my webapp as part of an SCA domain. The SCADomain > > > could include many nodes using different runtimes in different hosting > > > environments so I think we should expect that it is already available when > > > the webapp is started. > > > > > > I accept that it's possible to start the domain manager within the > > > same webapp but I'm not sure why you would want to. I'm a little more > > > convinced by wanting to start the domain manager in the same Tomcat > > > container. Currently the domain and node SCA applications assume remote > > > connections between each other, hence the problem you are seeing. There > > > are > > > some solutions of increasing complexity... > > > > > > - Advise users not to do it. It's very easy to start the domain using > > > the inbuilt HTTP server. In reality you are likely to want to deploy it > > > as a > > > Web App to some clustered app server so you need to be careful how this is > > > done w.r.t the nodes that are started. > > > - Change the binding used to wire nodes to the domain to be something > > > other than binding.ws that relies on HTTP > > > - Enhance the way that nodes register such that they try again when > > > other API operations are called if they were unsuccessful the first time. > > > Would fail altogether if it can't connect when you start() the node. > > > - Change the domain model to be decentralized so that nodes only > > > contact other nodes. This may still show the problem when more than one > > > node > > > is in the same container. > > > > > > Regards > > > > > > Simon > > > > > > Hi Ant > > > > Am just trying the changes to the node implementation and I seem to be > > getting a problem with jetty.. > > > > org.apache.tuscany.sca.node.NodeException: > > org.apache.tuscany.sca.domain.DomainException : > > org.apache.tuscany.sca.host.http.ServletMappingException: > > java.lang.IllegalArgumentException: ends with / > > > > It's happening at line 188 in JettyServer.java where it does... > > > > contextHandler.setContextPath (contextPath); > > > > Where contextPath in my case is "/nodeA/". > > > > I notice that the node puts "/" on the end of the node URL if the user > > have proved a URI without one. I expect it's doing this so that the service > > URLs appear correctly with a "/" between context name and service name. Do > > you know Jetty well enough to know why it's complaining. The obvious > > solution is to remove it in the specific jetty case which I'll try now to > > see if that causes other problems. > > > > Regards > > > > Simon > > > Quick update. If I strip off the "/" as the context is saved in the jetty > server then the code > > registers servlets at > http://L3AW203:8100/nodeANodeManagerComponent/NodeManagerService > tells the domain they are at > http://L3AW203:8100/nodeA//NodeManagerComponent/NodeManagerService > > > Both of which are wrong. > > Simon > We crossed posts there. My experiment suggest you are correct. I'll go look at where the URLs are build up.
Simon
