On 14/12/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:

Pete Robbins wrote:
> On 14/12/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
>>
>> Pete Robbins wrote:
>> > On 12/12/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
>> >>
>> >> Jean-Sebastien Delfino wrote:
>> >> > Jean-Sebastien Delfino wrote:
>> >> >> Pete Robbins wrote:
>> >> >>> On 07/12/06, Andrew Borley <[EMAIL PROTECTED]> wrote:
>> >> >>>>
>> >> >>>> On 12/7/06, Andrew Borley <[EMAIL PROTECTED]> wrote:
>> >> >>>> > On 11/20/06, Jean-Sebastien Delfino <[EMAIL PROTECTED]>
>> wrote:
>> >> >>>> > > I checked in the initial structure of a REST extension
under
>> >> >>>> > > cpp/sca/runtime/extensions/rest, revision r477110.
>> >> >>>> > >
>> >> >>>> > > The idea is to add support for <interface.rest> and
>> >> >>>> <binding.rest> on
>> >> >>>> > > services and references and implement a RESTFul pattern
>> (using
>> >> the
>> >> >>>> HTTP
>> >> >>>> > > Post/Get/Put/Delete verbs to implement
>> >> >>>> Create/Retrieve/Update/Delete
>> >> >>>> > > operations on resources) as well as a simple service
>> invocation
>> >> >>>> > > mechanism using HTTP Get and Post.
>> >> >>>> > >
>> >> >>>> > > I have updated the Linux build files, added a configure
>> >> >>>> > > --enable-restbinding option and the necessary Makefile.am
>> >> files.
>> >> >>>> > >
>> >> >>>> > > The reference binding requires Libcurl (I tried 7.15.5) and
>> >> >>>> CURL_LIB
>> >> >>>> and
>> >> >>>> > > CURL_INCLUDE environment variables pointing to its lib and
>> >> include
>> >> >>>> > > directories.
>> >> >>>> > > The service binding requires Apache httpd (2.2.x) and
>> HTTPD_LIB
>> >> >>>> and
>> >> >>>> > > HTTPD_INCLUDE environment variables.
>> >> >>>> > >
>> >> >>>> > > The SCDL model classes should be roughly Ok but the
>> >> >>>> ServiceProxy and
>> >> >>>> > > ServiceWrapper classes are under construction and only
>> >> useful to
>> >> >>>> verify
>> >> >>>> > > that the extension can be built.
>> >> >>>> > >
>> >> >>>> >
>> >> >>>> > I just committed the build files & a few minor changes to get
>> the
>> >> >>>> > extension building on Windows - you will need to set the
>> >> environment
>> >> >>>> > variables LIBCURL_HOME and HTTPD_HOME to point to the
>> appropriate
>> >> >>>> > places (guess!)
>> >> >>>> >
>> >> >>>> > Haven't yet got the sample going - that's the next job.
>> >> >>>> >
>> >> >>>> > Cheers
>> >> >>>> > Andy
>> >> >>>> >
>> >> >>>>
>> >> >>>> I spent most of today trying to get the RestCalculator sample
up
>> >> and
>> >> >>>> running on Windows. I hit a few issues:
>> >> >>>>
>> >> >>>> Libcurl - this was the major one. The extension built fine but
>> died
>> >> on
>> >> >>>> the restclient side of the sample when it tried to initialise
>> >> libcurl
>> >> >>>> (via the curl_global_init() call). I tried all the different
>> >> kinds of
>> >> >>>> libcurl for Windows that are available at [1] but I got the
same
>> >> >>>> result with all of them. Eventually I built my own from source,
>> and
>> >> >>>> that died too until I built it via VS Express rather than the
>> >> >>>> command-line build! At this point it all started working and I
>> >> began
>> >> >>>> to see messages appearing on the server.
>> >> >>>>
>> >> >>>> To have to download the src and build it would be a huge hassle
>> for
>> >> >>>> users that we *really* want to avoid. It may just be that I was
>> >> doing
>> >> >>>> something wrong with my libcurl stuff but I couldn't see
>> what  - I
>> >> was
>> >> >>>> just getting the windows "it's died" message that you
>> normally get
>> >> >>>> when libraries don't like each other. If anyone else could try
>> >> it out
>> >> >>>> and see what happens for them with the windows libcurl binary
>> >> distros
>> >> >>>> it would be appreciated!
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> I wonder if our building with vc8 is causing the
incomaptibility.
>> We
>> >> >>> have
>> >> >>> had issue before with dll's being built against different
>> versions
>> >> >>> of the
>> >> >>> msvc runtime dlls.
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> REST service - after all the shenanigans with libcurl, I hit an
>> >> issue
>> >> >>>> with tuscany_sca_mod_rest.dll that I didn't have time to get
>> >> past. In
>> >> >>>> ModREST.cpp the request->path_info is coming out as
>> >> >>>>
>> >>
>>
/htdocs/rest/sample.calculator.CalculatorComponent/CalculatorService/div,
>>
>> >>
>> >> >>>>
>> >> >>>> but it looks like the code expects it to be something like
>> >> >>>> /sample.calculator.CalculatorComponent/CalculatorService/div -
>> this
>> >> >>>> meant that the runtime was looking for a component named htdocs
>> >> and a
>> >> >>>> service named rest! I assume you get the path without the
>> >> /htdocs/rest
>> >> >>>> part on Linux, although it's a bit odd that the data is
>> >> different on
>> >> >>>> Windows.. I'm on Apache HTTPD 2.2.3 - is that the same version
>> >> you're
>> >> >>>> using?
>> >> >>>>
>> >> >>>> Anyway, I'm doing a presentation on Tuscany at the Javapolis
>> >> >>>> conference in Belgium next week, so I'll be preparing
>> for/going to
>> >> >>>> that over the next few days, and won't have much time to
>> progress
>> >> this
>> >> >>>> or the HttpdBigBank sample. I've put the windows deploy/run
>> scripts
>> >> >>>> for RestCalculator on svn, so if anyone does fancy trying it
out
>> >> I'll
>> >> >>>> be interested in your results!
>> >> >>>>
>> >> >>>> Cheers
>> >> >>>>
>> >> >>>> Andy
>> >> >>>>
>> >> >>>> [1] http://curl.haxx.se/download.html
>> >> >>>>
>> >> >>>>
>> >>
---------------------------------------------------------------------
>> >> >>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >> >>>> For additional commands, e-mail: [EMAIL PROTECTED]
>> >> >>>>
>> >> >>>>
>> >> >>
>> >> >> I finished setting up a complete Windows environment with Curl
and
>> >> >> Httpd yesterday evening. I noticed that there are many Curl
>> >> >> distributions available, so I picked an "MSVC development
>> >> >> distribution" and will give it a try today.
>> >> >>
>> >> >
>> >> > Andy,
>> >> >
>> >> > The RestCalculator sample now works on Windows, with the following
>> >> > configuration:
>> >> > - an MSVC based Libcurl distribution (at
>> >> > http://curl.haxx.se/download.html, the one before the last one
>> at the
>> >> > bottom of the page, more precisely
>> >> > libcurl-7.15.1-msvc-win32-ssl-0.9.8a-zlib-1.2.3.zip from Chris
>> Drake).
>> >> > - an update to the VSExpress project to link with the import lib
>> from
>> >> > that Libcurl distro
>> >> > - an update to the HTTPD conf to specify a DocumentRoot (and
>> load the
>> >> > Mime and Dir HTTPD modules into the server), I added the gen of
>> this
>> >> > conf to the startserver.bat script.
>> >> >
>> >> > So if you download the Libcurl distribution above and update
>> from the
>> >> > SVN head, it should work now.
>> >> >
>> >> > I started to update the scripts and conf in the RestCustomer
sample
>> as
>> >> > well but it doesn't work yet, I'll continue to work on it later
>> this
>> >> > evening.
>> >> >
>> >>
>> >> After fixing the deploy.bat script in the REST Customer sample (it
>> was
>> >> missing a copy of the required Customer.xsd to the deploy
directory),
>> >> this sample now works as well.
>> >
>> >
>> > I hit a couple of issues running the REST samples. I think the
>> > startserver.bat and runrestclient.bat need to add libcurl to the
PATH.
>> > The
>> > client script adds %LIBCURL_HOME%\bin to the path but this needs to
be
>> > %LIBCURL_HOME% for the version of libcurl you mention above.
>> startserver
>> > does not add libcurl to the path.
>> >
>> > Should we change these scripts to check for LIBCURL_HOME being set
and
>> > then
>> > ad both %LIBCURL_HOME%\bin and %LIBCURL_HOME% to the PATH?
>> >
>> > Cheers,
>> >
>>
>> I think this is a very good question!
>>
>> I've been going back and forth on this, between:
>> a) let the user configure the PATH (and LD_LIBRARY_PATH on Windows)
once
>> for all to include our dependencies
>> b) leverage the XYZ_HOME that people need to configure to build and
>> configure the PATH in the sample scripts
>>
>> Here are few things to consider:
>> - I would expect users to do (a) anyway when they install the various
>> dependencies (and this is done for you by some of the Ruby and Python
>> installers for example).
>> - People who build from source will have the XYZ_HOME variables defined
>> so (b) will work well for them, but people who use the binary distros
>> will probably not have these variables, and asking them to define these
>> variables will complicate their setup.
>> - Setting the path in each script is not something I would recommend to
>> a user if he has many Tuscany programs. Ideally he should be able to
run
>> things without writing a script to launch each program.
>> - On the other hand, configuring the path in our sample scripts shows
>> people how to do it, and allows them to replicate this by simple
>> copy/paste.
>>
>> After writing this email, I'm now starting to think that we should not
>> tweak the path to our dependencies in our scripts and instead provide
>> the configuration snippets in a README, and ask people to configure
>> their environment once for all when they install Tuscany.
>>
>> Like I said, I've been going back and forth on this, so I could also be
>> convinced otherwise... What do you think?
>>
>> --
>> Jean-Sebastien
>
>
> I think I've been through exactly the same thoughts! Maybe we should
> document like "ensure the licurl libraries are on the PATH" and also
> ship a
> tuscanyenv.bat, for users to edit, which contains the set of variables
we
> expect e.g.
>
> #set TUSCANY_SCACPP=...
> #set LIBCURL_HOME=<path to libcurl>
> #set PATH=%TUSCANY_SCACPP%\bin;%PATH%
>
> Maybe we could make our runxxx.bat scripts call this tuscanyenv..bat??

Yes, it makes a lot of sense!

>
> What is a pain though is trying to debug WHY the
> tuscany_sca_rest_reference.dll will not load!! It took a while to find
> that
> the libcurl.dll was in LIBURL_HOME and not LIBCURL_HOME\bin
>
>

I think we need better error reporting for this. I can take a look at
how to provide better Library load error info in the exceptions and
logs, using errno on Linux and GetLastErrorInfo() on Win32.

--
Jean-Sebastien


I'm not sure you get more information back but good luck ;-)

At least on linux you can use ldd which shows what it is trying to load.





--
Pete

Reply via email to