Re: Adding 2 webapp jars to binary distro

2006-11-11 Thread Simon Nash

Jim,
See comments inline.

  Simon

Jim Marino wrote:



On Nov 10, 2006, at 10:44 AM, Simon Nash wrote:


As far as I know these are the only things (apart from the core  Tuscany
runtime and application artifacts) that always need to be physically
packaged within the war.  Other things would either not always be
required, or could be downloaded as an alternative to being physically
packaged.

There will be others, such as resource host implementations, data  
source providers, etc. We would do well to create a solution that  will 
work now and in the future. I believe the approach of having an  Ant 
task will do this.



This discussion is not about whether there should be an Ant task.
We have both said that there should be.  We are debating whether having
a convenience download packaging would be helpful for some users and
some use cases.

So now for Ant users we require them to use the runtime  resolution  
mechanism? We've basically punted the problem to the  runtime. For 
me,  we need to address the problem of transitive  dependencies when  
building the archive. As an Ant user, the  latter strike me as more  
inline with that build mechanism.


As I said, we should support both build-time and runtime resolution
of extension dependencies for both maven and ant builds.  We should
not require ant users to use runtime resolution, but we should support
this as an option.  The choice of build tool should not dictate  whether
build-time or runtime resolution is used.

Good so we are on the same page. An Ant task will need to be provided  
that can download transitive extension dependencies.



Yes, we are agreed about this.

The problem is if we require everything locally, as you are   
suggesting, we are going to wind up with a kitchen sink distro.
Again, I would suggest we provide an Ant task that can  provisioning  
any required dependency from a remote repo and  assemble a runtime 
for  any host from the core distribution.  Bootstrappers would be  
provisioned when the war was created. Note  that this does not 
include  placing boostrap code related to  running in a web app into 
core,  which is inappropriate. It also  makes the two use cases you 
mentioned  below dead-simple as well  as reduces the complexity of 
the Ant script  that would be  required to build the archive.


I am not suggesting that we should require everything locally.  The
discussion is around the bootstrapping code, specifically  bootstrapping
for webapps.  I am not saying that this code is part of core, but that
it should be made available locally as part of our binary distro  for use
in common cases embodied in our samples, just as we make other non- core
code available locally via the contrib directory.

And we will have bootstrapping code for OSGi containers, potentially  a 
Geronimo GBean, IntelliJ plugin, Eclipse plugin, etc. This will  mean we 
have to bundle all of this into the core distro which really  breaks 
modularity. I wouldn't mind having separate distros for each  of these. 
Otherwise, the same Ant Task that is required above could  be repurposed 
for this.



I have not proposed bundling all of these things into a single binary
distro.  What is bundled should depend on use cases and how commonly
the various artifacts will be used.  We are currently doing a modest
amount of bundling by putting certain extensions into the contrib
directory.  So I am not suggesting a new approach here, but extending
the existing approach to include one more very common use case.


All the examples of downloadable binary distros that I looked at were
from open source projects, not commercial software.  There is value
in making something available that is in line with common open source
practice and is familiar to a large category of users, as this will
help to get a broader community engaged with Tuscany.  Some of our
users will be familiar with maven and will want to do their builds in
the manner that you describe with remote downloading of everything  from
the maven repos, while others will prefer a package that contains at
least the artifacts needed in order to build simple samples.  We  should
be willing to accommodate the preferences of both kinds of users.

I agree that's why I was proposing an Ant task. That would be dead- 
simple, avoid a bloated distro with a lot of irrelevant modules, and  
would fit into how people do Ant builds without introducing anti- 
patterns such as manually copying files from place to place.



As I said, we agree on having an ant task that supports remote
downloading.  The debate is about whether very simple cases whould
require remote downloading, which introduces complexities such as the
need for network connectivity and availability of the repositories.
Some users prefer this approach, and others prefer the simplicity of
having things available locally in locations that they can control.
In order to appeal to all types of users, we should accommodate both
styles rather than insist on one 

Re: Adding 2 webapp jars to binary distro

2006-11-10 Thread Simon Nash

Jim,
See comments inline.

  Simon

Jim Marino wrote:


I agree that Tuscany webapps will normally receive or make remote
invocations, and these will require Tuscany extensions and their
dependencies.  These extensions and dependencies can be bundled
physically within the war file, or the dependencies can be downloaded
at runtime from an external maven repo.  Currently the extensions
can't be downloaded at runtime, but this is something that we could
(and IMO should) support in the future.

The 2 webapp jars are in a different category.  They always need to be
physically packaged inside the webapp and can never be downloaded at
runtime.


There are ways around this but there is a broader issue that I  
mentioned previously, namely these are not the only things that need  to 
be provisioned for Ant users who want to have things statically  
packaged in the war.

.

As far as I know these are the only things (apart from the core Tuscany
runtime and application artifacts) that always need to be physically
packaged within the war.  Other things would either not always be
required, or could be downloaded as an alternative to being physically
packaged.




  This is why they are in a different category than extensions
and dependencies, and should be considered for different treatment
as far as packaging is concerned.

The helloworldws sample (one of those for which I provided an ant  build
script) is an example of the use case I have in mind.  It receives
remote invocations over Web services using the Axis2 binding and the
SDO data binding.  These Tuscany extensions are packaged inside the
war file, but not their dependencies (either local or transitive).
The Tuscany runtime loads these dependencies from an external maven  
repo.


So now for Ant users we require them to use the runtime resolution  
mechanism? We've basically punted the problem to the runtime. For me,  
we need to address the problem of transitive dependencies when  building 
the archive. As an Ant user, the latter strike me as more  inline with 
that build mechanism.



As I said, we should support both build-time and runtime resolution
of extension dependencies for both maven and ant builds.  We should
not require ant users to use runtime resolution, but we should support
this as an option.  The choice of build tool should not dictate whether
build-time or runtime resolution is used.


To build the helloworldws war file in this form, my ant script takes
the Tuscany runtime from the atandalone/binary distro, and the Axis2
binding and SDO data binding Tuscany extensions from the contrib
directory of the distro.  The only things it currently cannot obtain
from the locally installed distro are the 2 webapp jars.  Forcing a
remote download for these two jars, when everything else can be found
locally, makes this common use case considerably more complex for a
first-time or inexperienced user.

The problem is if we require everything locally, as you are  suggesting, 
we are going to wind up with a kitchen sink distro.   Again, I would 
suggest we provide an Ant task that can provisioning  any required 
dependency from a remote repo and assemble a runtime for  any host from 
the core distribution. Bootstrappers would be  provisioned when the war 
was created. Note that this does not include  placing boostrap code 
related to running in a web app into core,  which is inappropriate. It 
also makes the two use cases you mentioned  below dead-simple as well as 
reduces the complexity of the Ant script  that would be required to 
build the archive.



I am not suggesting that we should require everything locally.  The
discussion is around the bootstrapping code, specifically bootstrapping
for webapps.  I am not saying that this code is part of core, but that
it should be made available locally as part of our binary distro for use
in common cases embodied in our samples, just as we make other non-core
code available locally via the contrib directory.


In summary, the ant support for building war files must cover the
following cases:
 1. build war files with all required Tuscany extensions and their
dependencies packaged within the war file
 2. build war files with all required Tuscany extensions packaged
within the war file, and their dependencies downloaded at runtime
Packaging the 2 webapp jars within the downloadable distro simplifies
the logistics of case 2 for webapps using extensions that we deliver
as part of the distro, which is a common scenario.

What I would recommend doing to help Ant users is to create a  
utility  that can be invoked from an Ant Task, programmatically,  or 
from the  command line which downloads transitive dependencies  from 
a Maven  repository. As an implementation strategy, the first  place 
I would  look at is just wrapping Maven (or Wagon, the part  that 
actually does  the downloading).  I would also keep in mind  that 
reusing Maven will  avoid the trouble of having to write code  that 
parses and 

Re: Adding 2 webapp jars to binary distro

2006-11-10 Thread Jim Marino


On Nov 10, 2006, at 10:44 AM, Simon Nash wrote:

As far as I know these are the only things (apart from the core  
Tuscany

runtime and application artifacts) that always need to be physically
packaged within the war.  Other things would either not always be
required, or could be downloaded as an alternative to being physically
packaged.

There will be others, such as resource host implementations, data  
source providers, etc. We would do well to create a solution that  
will work now and in the future. I believe the approach of having an  
Ant task will do this.


So now for Ant users we require them to use the runtime  
resolution  mechanism? We've basically punted the problem to the  
runtime. For me,  we need to address the problem of transitive  
dependencies when  building the archive. As an Ant user, the  
latter strike me as more  inline with that build mechanism.

As I said, we should support both build-time and runtime resolution
of extension dependencies for both maven and ant builds.  We should
not require ant users to use runtime resolution, but we should support
this as an option.  The choice of build tool should not dictate  
whether

build-time or runtime resolution is used.

Good so we are on the same page. An Ant task will need to be provided  
that can download transitive extension dependencies.


The problem is if we require everything locally, as you are   
suggesting, we are going to wind up with a kitchen sink distro.
Again, I would suggest we provide an Ant task that can  
provisioning  any required dependency from a remote repo and  
assemble a runtime for  any host from the core distribution.  
Bootstrappers would be  provisioned when the war was created. Note  
that this does not include  placing boostrap code related to  
running in a web app into core,  which is inappropriate. It also  
makes the two use cases you mentioned  below dead-simple as well  
as reduces the complexity of the Ant script  that would be  
required to build the archive.

I am not suggesting that we should require everything locally.  The
discussion is around the bootstrapping code, specifically  
bootstrapping

for webapps.  I am not saying that this code is part of core, but that
it should be made available locally as part of our binary distro  
for use
in common cases embodied in our samples, just as we make other non- 
core

code available locally via the contrib directory.

And we will have bootstrapping code for OSGi containers, potentially  
a Geronimo GBean, IntelliJ plugin, Eclipse plugin, etc. This will  
mean we have to bundle all of this into the core distro which really  
breaks modularity. I wouldn't mind having separate distros for each  
of these. Otherwise, the same Ant Task that is required above could  
be repurposed for this.



All the examples of downloadable binary distros that I looked at were
from open source projects, not commercial software.  There is value
in making something available that is in line with common open source
practice and is familiar to a large category of users, as this will
help to get a broader community engaged with Tuscany.  Some of our
users will be familiar with maven and will want to do their builds in
the manner that you describe with remote downloading of everything  
from

the maven repos, while others will prefer a package that contains at
least the artifacts needed in order to build simple samples.  We  
should

be willing to accommodate the preferences of both kinds of users.

I agree that's why I was proposing an Ant task. That would be dead- 
simple, avoid a bloated distro with a lot of irrelevant modules, and  
would fit into how people do Ant builds without introducing anti- 
patterns such as manually copying files from place to place.


Jim


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Adding 2 webapp jars to binary distro

2006-11-09 Thread Jeremy Boynes

On Nov 8, 2006, at 11:01 PM, Jim Marino wrote:


What I would recommend doing to help Ant users is to create a  
utility that can be invoked from an Ant Task, programmatically, or  
from the command line which downloads transitive dependencies from  
a Maven repository. As an implementation strategy, the first place  
I would look at is just wrapping Maven (or Wagon, the part that  
actually does the downloading).  I would also keep in mind that  
reusing Maven will avoid the trouble of having to write code that  
parses and understands Maven POMs. I would also look to see what  
can be shared with the Maven War plugin we currently have to avoid  
duplicated effort and code.


I've not used it but there is an extension for Maven that supports this:
http://maven.apache.org/ant-tasks.html

YMMV
--
Jeremy


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Adding 2 webapp jars to binary distro

2006-11-09 Thread Simon Nash

Jim,
See my comments inline.

  Simon

Jim Marino wrote:



On Nov 8, 2006, at 8:40 AM, Simon Nash wrote:


Jim,
See my comments inline.

  Simon


It seems that if you go down this route you will wind up re- 
inventing  Maven. Maven seems simple enough to me.


I had not intended to reinvent maven.


Not yet, but you will (see below) ;-)


I was thinking more in terms
of something that enables ant scripts to find dependencies in maven
repos and package these in the embedded repo within the war file.
I'm looking at various options for how best to do this in a way that
is most convenient from the perspective of ant users.

In order for this to work, you are going to need to handle transitive  
dependencies in all but the simplest use case. Namely an application  
that cannot receive or make remote invocations. I don't see any way  
around this. For example, all of the web services binding extensions  
and container extensions have dependencies.  Bundling the two jar  files 
mentioned previously will only allow someone to create a web  
application that invokes a local service from a servlet or JSP. No  
services exposed over remote bindings. No references with remote  
bindings. That type of application doesn't strike me as very  compelling 
for Tuscany. In fact, I would tell people not to use  Tuscany for this 
and to use something more appropriate such as  PicoContainer. If someone 
was doing this to understand how to write  Java services, I would tell 
them to use the standalone client since  deploying to a web container 
for this sort of thing is superfluous.  What benefit would they gain 
except the rigamarole of having to  create a war (or an exploded 
directory) and wait for a server whose  capabilities they are not using 
to restart for every change they  make? Running the kernel inside an IDE 
takes milliseconds and does  not require a deployment.



I agree that Tuscany webapps will normally receive or make remote
invocations, and these will require Tuscany extensions and their
dependencies.  These extensions and dependencies can be bundled
physically within the war file, or the dependencies can be downloaded
at runtime from an external maven repo.  Currently the extensions
can't be downloaded at runtime, but this is something that we could
(and IMO should) support in the future.

The 2 webapp jars are in a different category.  They always need to be
physically packaged inside the webapp and can never be downloaded at
runtime.  This is why they are in a different category than extensions
and dependencies, and should be considered for different treatment
as far as packaging is concerned.

The helloworldws sample (one of those for which I provided an ant build
script) is an example of the use case I have in mind.  It receives
remote invocations over Web services using the Axis2 binding and the
SDO data binding.  These Tuscany extensions are packaged inside the
war file, but not their dependencies (either local or transitive).
The Tuscany runtime loads these dependencies from an external maven repo.

To build the helloworldws war file in this form, my ant script takes
the Tuscany runtime from the atandalone/binary distro, and the Axis2
binding and SDO data binding Tuscany extensions from the contrib
directory of the distro.  The only things it currently cannot obtain
from the locally installed distro are the 2 webapp jars.  Forcing a
remote download for these two jars, when everything else can be found
locally, makes this common use case considerably more complex for a
first-time or inexperienced user.

In summary, the ant support for building war files must cover the
following cases:
 1. build war files with all required Tuscany extensions and their
dependencies packaged within the war file
 2. build war files with all required Tuscany extensions packaged
within the war file, and their dependencies downloaded at runtime
Packaging the 2 webapp jars within the downloadable distro simplifies
the logistics of case 2 for webapps using extensions that we deliver
as part of the distro, which is a common scenario.

What I would recommend doing to help Ant users is to create a utility  
that can be invoked from an Ant Task, programmatically, or from the  
command line which downloads transitive dependencies from a Maven  
repository. As an implementation strategy, the first place I would  look 
at is just wrapping Maven (or Wagon, the part that actually does  the 
downloading).  I would also keep in mind that reusing Maven will  avoid 
the trouble of having to write code that parses and understands  Maven 
POMs. I would also look to see what can be shared with the  Maven War 
plugin we currently have to avoid duplicated effort and code.



Yes, I was planning to do something very much along these lines.


 There is a further issue that statically

cramming things into the distribution is not going to solve.  
Namely,  moving forward, these jars are not going to be the only  
things  required to run 

Re: Adding 2 webapp jars to binary distro

2006-11-09 Thread Simon Nash


Jim Marino wrote:


On Nov 8, 2006, at 8:38 AM, Simon Nash wrote:


Raymond Feng wrote:

1) It seems that you're looking for a collection of tuscany  
runtime/extension jars which provides you the artifacts to build  the 
web application offline using ant or manually. I don't think  it's 
appropriate to add them to the standalone distro though  because it 
serves as the runtime for standalone applications  instead of a 
traditional binary distro.


I'm not sure why you are making a strong distinction between these
two uses.  A traditional binary distro will have a bin directory
containing a command to launch its runtime and possibly other
commands as well.  Supporting dependencies that are needed to
provide core functionality are in a lib directory.  For example,
the binary distros for tomcat and ant follow this pattern.  So if
we were releasing a binary runtime distro for core Tuscany
functionality (i.e., functionality that is not part of some
extension), I think its contents would be quite similar to what we
have today in the standalone distro.

There is nothing core about the web app launcher. Many deployments  of 
Tuscany will not be to Servlet containers.



My use of that core word was a bit unfortunate :-)  What I meant
was that these files will be widely used and are not part of a Tuscany
extension.

  Simon



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Adding 2 webapp jars to binary distro

2006-11-09 Thread Jim Marino

I agree that Tuscany webapps will normally receive or make remote
invocations, and these will require Tuscany extensions and their
dependencies.  These extensions and dependencies can be bundled
physically within the war file, or the dependencies can be downloaded
at runtime from an external maven repo.  Currently the extensions
can't be downloaded at runtime, but this is something that we could
(and IMO should) support in the future.

The 2 webapp jars are in a different category.  They always need to be
physically packaged inside the webapp and can never be downloaded at
runtime.
There are ways around this but there is a broader issue that I  
mentioned previously, namely these are not the only things that need  
to be provisioned for Ant users who want to have things statically  
packaged in the war.

.

  This is why they are in a different category than extensions
and dependencies, and should be considered for different treatment
as far as packaging is concerned.

The helloworldws sample (one of those for which I provided an ant  
build

script) is an example of the use case I have in mind.  It receives
remote invocations over Web services using the Axis2 binding and the
SDO data binding.  These Tuscany extensions are packaged inside the
war file, but not their dependencies (either local or transitive).
The Tuscany runtime loads these dependencies from an external maven  
repo.


So now for Ant users we require them to use the runtime resolution  
mechanism? We've basically punted the problem to the runtime. For me,  
we need to address the problem of transitive dependencies when  
building the archive. As an Ant user, the latter strike me as more  
inline with that build mechanism.



To build the helloworldws war file in this form, my ant script takes
the Tuscany runtime from the atandalone/binary distro, and the Axis2
binding and SDO data binding Tuscany extensions from the contrib
directory of the distro.  The only things it currently cannot obtain
from the locally installed distro are the 2 webapp jars.  Forcing a
remote download for these two jars, when everything else can be found
locally, makes this common use case considerably more complex for a
first-time or inexperienced user.

The problem is if we require everything locally, as you are  
suggesting, we are going to wind up with a kitchen sink distro.   
Again, I would suggest we provide an Ant task that can provisioning  
any required dependency from a remote repo and assemble a runtime for  
any host from the core distribution. Bootstrappers would be  
provisioned when the war was created. Note that this does not include  
placing boostrap code related to running in a web app into core,  
which is inappropriate. It also makes the two use cases you mentioned  
below dead-simple as well as reduces the complexity of the Ant script  
that would be required to build the archive.



In summary, the ant support for building war files must cover the
following cases:
 1. build war files with all required Tuscany extensions and their
dependencies packaged within the war file
 2. build war files with all required Tuscany extensions packaged
within the war file, and their dependencies downloaded at runtime
Packaging the 2 webapp jars within the downloadable distro simplifies
the logistics of case 2 for webapps using extensions that we deliver
as part of the distro, which is a common scenario.

What I would recommend doing to help Ant users is to create a  
utility  that can be invoked from an Ant Task, programmatically,  
or from the  command line which downloads transitive dependencies  
from a Maven  repository. As an implementation strategy, the first  
place I would  look at is just wrapping Maven (or Wagon, the part  
that actually does  the downloading).  I would also keep in mind  
that reusing Maven will  avoid the trouble of having to write code  
that parses and understands  Maven POMs. I would also look to see  
what can be shared with the  Maven War plugin we currently have to  
avoid duplicated effort and code.

Yes, I was planning to do something very much along these lines.


Great




I'd like to make clear that I understand the value of modularity
and I strongly support it.  We need to have modularity in terms of
both architecture and implementation.  But when choosing how we
package our distros, we need to give some consideration to
convenience for our users, especially those who are accustomed
to a conventional dwonloadable binary distribution.  I'm not
arguing for the kitchen sink, but for careful consideration
of user scenarios and how our distribution can support common
cases in a convenient manner.
I agree we need to carefully consider the end-user. However, we are  
not shipping conventional binary distributions typically done in  
many commercial software releases. I actually think an Ant script  
that automates the assembly of the runtime modules as I mentioned is  
actually easier and less complex for end users 

Re: Adding 2 webapp jars to binary distro

2006-11-08 Thread Simon Nash

Raymond,
Thanks for these comments.  My responses are inline.

  Simon

Raymond Feng wrote:


Hi, Simon.

A few comments:

1) It seems that you're looking for a collection of tuscany 
runtime/extension jars which provides you the artifacts to build the web 
application offline using ant or manually. I don't think it's 
appropriate to add them to the standalone distro though because it 
serves as the runtime for standalone applications instead of a 
traditional binary distro.



I'm not sure why you are making a strong distinction between these
two uses.  A traditional binary distro will have a bin directory
containing a command to launch its runtime and possibly other
commands as well.  Supporting dependencies that are needed to
provide core functionality are in a lib directory.  For example,
the binary distros for tomcat and ant follow this pattern.  So if
we were releasing a binary runtime distro for core Tuscany
functionality (i.e., functionality that is not part of some
extension), I think its contents would be quite similar to what we
have today in the standalone distro.

Also, what we have today seems to be something of a hybrid between
a standalone distro and a binary distro.  The extensions in the
contrib directory are not needed by the standalone launcher, but
are packaged in the same bundle (binary distro) for user convenience.
By suggesting adding the 2 webapp jars, I was trying to take this
approach of user convenience just a tiny bit further.

2) There may be another scenario that a distro is desired for web 
applications. In that case, the tuscany runtime/extension jars will be 
shared by the Tomcat server level (I remember we did a similar thing 
before by leveraging common/lib and server/lib?). This configuration is 
not supported today. I'm not sure it should be considered.



I had not intended to support this scenario.   If we decide we want
to revive support for it, then we would have some work to do on both
the runtime and build time aspects.

3) I also feel a bit scary by looking at the ant script which packages 
the WAR file. A prebuilt ant script can help one sample application, but 
won't the end-users be scared as well imaging they have to write such a 
script to deal with other web applications? Can we defer it to M3 so 
that we can have a better picture instead of rushing to M2 which is very 
close to the release?



My hope in providing some sample scripts would be to show people what
is needed in order to build and run Tuscany applications, at a more
explicit level than just run maven.  In effect this would serve as
documentation for how they could do this themselves, using whatever
tool they find most comfortable.  I agree that the current webapp
script comes across as quite scary, which is why I asked for suggestions
to improve it.

4) As for the ant script itself, I suggest that you use the nested 
elements (such as lib, classes, webinf and metinfo) for war task 
instaed of a bunch of copy tasks as documented @ 
http://ant.apache.org/manual/CoreTasks/war.html.



Thanks for this very helpful feedback.  I will work on this today and
post an updated version of the script later.  I hope this will go some
way to addressing your previous comment.


Thanks,
Raymond

- Original Message - From: Simon Nash [EMAIL PROTECTED]
To: tuscany-dev@ws.apache.org
Sent: Tuesday, November 07, 2006 2:28 PM
Subject: Re: Adding 2 webapp jars to binary distro




Rick wrote:




Jeremy Boynes wrote:


I think this highlights one of the challenges with Ant-based build
environments. Although Ant provides the mechanisms for executing the
build scripts it does not provide a method for locating the
dependencies needed at build-time - for example, to compile or
repackage; often they are simply checked in alongside the user's
source. This was one of the key issues that the Maven project
originally set out to solve and which led to the establishment of the
repo systems.

I have not had a chance to see how your scripts address locating these
dependencies. I realize that some, like SDO, are (undesirably) located
in the standalone distro; others like spring, jaxb, json, js are not
(or at least I hope they are not). It would help (in my currently
disconnected state) if you could describe how your environment handles
these.

We will be making all the dependencies (including these) available
through the maven repository system. As I explained in an earlier
mail, the release vote would include not just the binary and other
archives but also /all/ of the artifacts we release through the repo;
this addresses Ant's concern about IPMC approval.

At a fundamental level, I would question whether using the standalone
runtime distribution as the basis of a build environment is the way to
be going. Would we be better served producing a library



Wouldn't if we added javadoc, SDOgen, Java2WSDL, WSDL2Java, War 
Plugin commandline to this be essentially a Tuscany SDK?



Yes, it would, and for M3 it would be good

Re: Adding 2 webapp jars to binary distro

2006-11-08 Thread Simon Nash

Jim,
See my comments inline.

  Simon

Jim Marino wrote:


On Nov 7, 2006, at 10:43 AM, Simon Nash wrote:


Jeremy,
Thanks for the quick response.

I am trying to be pragmatic here and deal with simple use cases.
I haven't yet worked out the best way to deal with external or
transitive dependencies from an ant build environment (though
I do have some thoughts), but having a complete story for this
is not needed to build a simple webapp.


It seems that if you go down this route you will wind up re-inventing  
Maven. Maven seems simple enough to me.



I had not intended to reinvent maven.  I was thinking more in terms
of something that enables ant scripts to find dependencies in maven
repos and package these in the embedded repo within the war file.
I'm looking at various options for how best to do this in a way that
is most convenient from the perspective of ant users.


Adding these 2 jars
would be a simple change that would make the first use encounter
with Tuscany quite a bit easier for ant users.


Both Jeremy and Raymond pointed out the issue about working from a  
standalone distribution.


Please see my comment to Raymond on this.  I'd like to explore why
it wouldn't be appropriate to have a binary distro that could be used
for both purposes.

 There is a further issue that statically
cramming things into the distribution is not going to solve. Namely,  
moving forward, these jars are not going to be the only things  required 
to run in a web app in many of the common usage scenarios.  For example, 
there will also be pure-Tuscany things like a JNDI-based  implementation 
of ResourceHost to support the @Resource tag and  service discovery. In 
addition, people may want to use other optional  extensions such as 
Celtix instead of Axis or JAXB instead of SDO. The  best way to solve 
this other than using Maven (and potentially  embedding it as part of 
the distribution) is to use the artifact  repository at runtime or, as 
you mentioned, a custom Ant task that  replicated its functionality at 
deployment time (it could even embed  Maven :-) ). The Ant task would 
download the jars and place them in  the Ant project folder as 
determined by the user.



I am not debating the extensions issue.  We need a robust and convenient
way for ant users (and users of other build tools) to obtain optional
Tuscany extensions that aren't included in the tuscany-sca binary
distro.  I'm only focusing on the small set of binary artifacts that are
basic components of Tuscany and aren't packaged as Tuscany extensions.
I don't really see any distinction between these artifacts and the
contrib Tuscany extensions that we are including in the M2 distro.
In both cases, these could be downloaded separately, but bundling them
into a downloadable distribution is a valuable convenience to users.

What would be a less than ideal solution is to adopt the kitchen  sink 
approach. Even if today it is two jars, this will quickly break  down as 
the complexity of the runtime configuration increases.  Putting this in 
as a temporary stopgap also does not seem like a good  move given the 
issues it presents moving forward and the fact that we  would have to 
remove it in the next release.



Agreed that we don't want to do something now that we would reverse later.
I don't see why this would be necessary.  Even if we had a very
sophisticated remote loading approach, there would still be a few basic
things that it would make sense to find locally.

Perhaps a custom Ant task which replicates the functionality in Maven  
is something you could look into? If you embedded Maven, I don't  think 
it would be that much work.



I'm certainly going to look into this and I think it's the right way to
locate and load optional external dependencies.  One of the approaches
I am investigating is embedding maven.  But I would draw a distinction
between solving the general problem of artifact discovery and
downloading, and how we provide basic elements of the Tuscany runtime.


Jim

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Adding 2 webapp jars to binary distro

2006-11-08 Thread Jim Marino


On Nov 8, 2006, at 8:40 AM, Simon Nash wrote:


Jim,
See my comments inline.

  Simon


It seems that if you go down this route you will wind up re- 
inventing  Maven. Maven seems simple enough to me.

I had not intended to reinvent maven.

Not yet, but you will (see below) ;-)

I was thinking more in terms
of something that enables ant scripts to find dependencies in maven
repos and package these in the embedded repo within the war file.
I'm looking at various options for how best to do this in a way that
is most convenient from the perspective of ant users.

In order for this to work, you are going to need to handle transitive  
dependencies in all but the simplest use case. Namely an application  
that cannot receive or make remote invocations. I don't see any way  
around this. For example, all of the web services binding extensions  
and container extensions have dependencies.  Bundling the two jar  
files mentioned previously will only allow someone to create a web  
application that invokes a local service from a servlet or JSP. No  
services exposed over remote bindings. No references with remote  
bindings. That type of application doesn't strike me as very  
compelling for Tuscany. In fact, I would tell people not to use  
Tuscany for this and to use something more appropriate such as  
PicoContainer. If someone was doing this to understand how to write  
Java services, I would tell them to use the standalone client since  
deploying to a web container for this sort of thing is superfluous.  
What benefit would they gain except the rigamarole of having to  
create a war (or an exploded directory) and wait for a server whose  
capabilities they are not using to restart for every change they  
make? Running the kernel inside an IDE takes milliseconds and does  
not require a deployment.


What I would recommend doing to help Ant users is to create a utility  
that can be invoked from an Ant Task, programmatically, or from the  
command line which downloads transitive dependencies from a Maven  
repository. As an implementation strategy, the first place I would  
look at is just wrapping Maven (or Wagon, the part that actually does  
the downloading).  I would also keep in mind that reusing Maven will  
avoid the trouble of having to write code that parses and understands  
Maven POMs. I would also look to see what can be shared with the  
Maven War plugin we currently have to avoid duplicated effort and code.



 There is a further issue that statically
cramming things into the distribution is not going to solve.  
Namely,  moving forward, these jars are not going to be the only  
things  required to run in a web app in many of the common usage  
scenarios.  For example, there will also be pure-Tuscany things  
like a JNDI-based  implementation of ResourceHost to support the  
@Resource tag and  service discovery. In addition, people may want  
to use other optional  extensions such as Celtix instead of Axis  
or JAXB instead of SDO. The  best way to solve this other than  
using Maven (and potentially  embedding it as part of the  
distribution) is to use the artifact  repository at runtime or, as  
you mentioned, a custom Ant task that  replicated its  
functionality at deployment time (it could even embed   
Maven :-) ). The Ant task would download the jars and place them  
in  the Ant project folder as determined by the user.
I am not debating the extensions issue.  We need a robust and  
convenient

way for ant users (and users of other build tools) to obtain optional
Tuscany extensions that aren't included in the tuscany-sca binary
distro.  I'm only focusing on the small set of binary artifacts  
that are

basic components of Tuscany and aren't packaged as Tuscany extensions.
I don't really see any distinction between these artifacts and the
contrib Tuscany extensions that we are including in the M2 distro.
In both cases, these could be downloaded separately, but bundling them
into a downloadable distribution is a valuable convenience to users.

What capabilities would this distribution have (please see my  
comments above)? I think not much.


What would be a less than ideal solution is to adopt the kitchen   
sink approach. Even if today it is two jars, this will quickly  
break  down as the complexity of the runtime configuration  
increases.  Putting this in as a temporary stopgap also does not  
seem like a good  move given the issues it presents moving forward  
and the fact that we  would have to remove it in the next release.
Agreed that we don't want to do something now that we would reverse  
later.

I don't see why this would be necessary.  Even if we had a very
sophisticated remote loading approach, there would still be a few  
basic

things that it would make sense to find locally.

I just don't get this. If I have to remotely download extensions  
anyway, why would we complicate things by cramming web app-related  
libraries into a standalone distribution?


Perhaps a custom 

Re: Adding 2 webapp jars to binary distro

2006-11-08 Thread Jim Marino


On Nov 8, 2006, at 8:38 AM, Simon Nash wrote:


Raymond Feng wrote:

1) It seems that you're looking for a collection of tuscany  
runtime/extension jars which provides you the artifacts to build  
the web application offline using ant or manually. I don't think  
it's appropriate to add them to the standalone distro though  
because it serves as the runtime for standalone applications  
instead of a traditional binary distro.

I'm not sure why you are making a strong distinction between these
two uses.  A traditional binary distro will have a bin directory
containing a command to launch its runtime and possibly other
commands as well.  Supporting dependencies that are needed to
provide core functionality are in a lib directory.  For example,
the binary distros for tomcat and ant follow this pattern.  So if
we were releasing a binary runtime distro for core Tuscany
functionality (i.e., functionality that is not part of some
extension), I think its contents would be quite similar to what we
have today in the standalone distro.

There is nothing core about the web app launcher. Many deployments  
of Tuscany will not be to Servlet containers.


Jim

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread ant elder

On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

  webapp-1.0-incubator-M2-SNAPSHOT.jar

   webapp-host-1.0-incubator-M2-SNAPSHOT.jar
are not present in the standalone launcher (the rest are).  In order
to avoid the need for ant users to download these jars from a maven
repo, I'd like to propose adding them to the binary distro.  For
example, they could go in a new webapp directory.  They are not large
and they would not impact use of the binary distro as a standalone
Tuscany launcher.



I think the issue here is what is our binary distro in M2, is it just the
standalone distro or something more? Some previous discussion have been
sounding like the binary distro is just the standalone distro, i'm not
convinced thats true or a good idea.  The current name is ...-bin not
...-standalone and it already includes the servlet jar and things like SDO.

If we don't include the two tuscany webapp jars in the bin distro we release
then how do we get them released officially with an ipmc vote?

Being pragmatic the easiest way to fix this particular problem probably is
to just also include the two tuscany webapp jars as well. And if we're going
down that route why not also add the javadoc and prebuilt samples as well so
we have a really easy to use binary M2 release :)

  ...ant

PS. Whats going to happen when trying to build bigbank with ant and the DAS
jars are required?


Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread Jim Marino


On Nov 7, 2006, at 6:13 AM, ant elder wrote:


On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

  webapp-1.0-incubator-M2-SNAPSHOT.jar

   webapp-host-1.0-incubator-M2-SNAPSHOT.jar
are not present in the standalone launcher (the rest are).  In order
to avoid the need for ant users to download these jars from a maven
repo, I'd like to propose adding them to the binary distro.  For
example, they could go in a new webapp directory.  They are not large
and they would not impact use of the binary distro as a standalone
Tuscany launcher.



I think the issue here is what is our binary distro in M2, is it  
just the
standalone distro or something more? Some previous discussion have  
been

sounding like the binary distro is just the standalone distro, i'm not
convinced thats true or a good idea.  The current name is ...-bin not
...-standalone and it already includes the servlet jar and things  
like SDO.


They contain SDO because of a hack and should not, specifically the  
jars need to be crammed on the system classpath because we have not  
yet implemented multi-parent classloading. Once this is in place,  
they can be removed.


As for servlet jar, that is required by the Kernel for ServletHost.  
We could factor that out as well moving forward.


If we don't include the two tuscany webapp jars in the bin distro  
we release

then how do we get them released officially with an ipmc vote?

Being pragmatic the easiest way to fix this particular problem  
probably is
to just also include the two tuscany webapp jars as well. And if  
we're going
down that route why not also add the javadoc and prebuilt samples  
as well so

we have a really easy to use binary M2 release :)

And then the problem we have is we wind up with the monolith we tried  
to avoid based on all of the modularity discussions. As you mentioned  
below, when we include BigBank, we drag in DAS. In the future, when  
we have additional samples such as a BigBank that uses JPA, we will  
need to included those as well. Multiply that with JAXB, other web  
services stacks, JMS, etc. The kitchen sink approach ultimately is  
not going to work with the type of extensible runtime that we have.   
Instead of creating a monolith, this can be solved (better IMO) by  
having the runtime dynamically provision extensions based on the  
Maven Artifact repository service that Meeraj and Jeremy worked on.


Jeremy had very strong opinions on how this should be done; as our  
release manager for M2, before making any significant changes to the  
branch we should clear it with him. He mentioned he will be back  
online Thursday.


Jim


  ...ant

PS. Whats going to happen when trying to build bigbank with ant and  
the DAS

jars are required?



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread ant elder

I understand why the jars are there Jim, actually the servlet one is due to
the current design of the axis binding not the kernel ServletHost, and I
think we all understand that ultimately a kitchen sink distro isn't going to
work, but thats _ultimately_, right now today in M2 we don't have JAXB and
JPA and JMS and all the other things you mention, and we also don't have the
things to help that you mention completed yet such as the maven artifact
repository stuff or multi-parent classloader support. Given that, for this
M2 release it may be easiest to just include the webapp jars as we have
already done with the other ones. What is an alternative solution that
you're suggesting?

  ...ant

On 11/7/06, Jim Marino [EMAIL PROTECTED] wrote:



On Nov 7, 2006, at 6:13 AM, ant elder wrote:

 On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

   webapp-1.0-incubator-M2-SNAPSHOT.jar
 webapp-host-1.0-incubator-M2-SNAPSHOT.jar
 are not present in the standalone launcher (the rest are).  In order
 to avoid the need for ant users to download these jars from a maven
 repo, I'd like to propose adding them to the binary distro.  For
 example, they could go in a new webapp directory.  They are not large
 and they would not impact use of the binary distro as a standalone
 Tuscany launcher.


 I think the issue here is what is our binary distro in M2, is it
 just the
 standalone distro or something more? Some previous discussion have
 been
 sounding like the binary distro is just the standalone distro, i'm not
 convinced thats true or a good idea.  The current name is ...-bin not
 ...-standalone and it already includes the servlet jar and things
 like SDO.

They contain SDO because of a hack and should not, specifically the
jars need to be crammed on the system classpath because we have not
yet implemented multi-parent classloading. Once this is in place,
they can be removed.

As for servlet jar, that is required by the Kernel for ServletHost.
We could factor that out as well moving forward.

 If we don't include the two tuscany webapp jars in the bin distro
 we release
 then how do we get them released officially with an ipmc vote?

 Being pragmatic the easiest way to fix this particular problem
 probably is
 to just also include the two tuscany webapp jars as well. And if
 we're going
 down that route why not also add the javadoc and prebuilt samples
 as well so
 we have a really easy to use binary M2 release :)

And then the problem we have is we wind up with the monolith we tried
to avoid based on all of the modularity discussions. As you mentioned
below, when we include BigBank, we drag in DAS. In the future, when
we have additional samples such as a BigBank that uses JPA, we will
need to included those as well. Multiply that with JAXB, other web
services stacks, JMS, etc. The kitchen sink approach ultimately is
not going to work with the type of extensible runtime that we have.
Instead of creating a monolith, this can be solved (better IMO) by
having the runtime dynamically provision extensions based on the
Maven Artifact repository service that Meeraj and Jeremy worked on.

Jeremy had very strong opinions on how this should be done; as our
release manager for M2, before making any significant changes to the
branch we should clear it with him. He mentioned he will be back
online Thursday.

Jim

   ...ant

 PS. Whats going to happen when trying to build bigbank with ant and
 the DAS
 jars are required?


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread Jim Marino


On Nov 7, 2006, at 8:03 AM, ant elder wrote:

I understand why the jars are there Jim, actually the servlet one  
is due to

the current design of the axis binding not the kernel ServletHost,
ServletHost is also referenced by other extensions as it is assumed  
to be part of the host spi so it's not just Axis.

and I
think we all understand that ultimately a kitchen sink distro isn't  
going to
work, but thats _ultimately_, right now today in M2 we don't have  
JAXB and
JPA and JMS and all the other things you mention, and we also don't  
have the
things to help that you mention completed yet such as the maven  
artifact

repository stuff or multi-parent classloader support.
That's not the point. One of the primary goals of this release was  
modularity. This breaks that.

Given that, for this
M2 release it may be easiest to just include the webapp jars as we  
have

already done with the other ones. What is an alternative solution that
you're suggesting?

Use Maven or the artifact repository Meraaj and Jeremy worked on.

Jim



  ...ant

On 11/7/06, Jim Marino [EMAIL PROTECTED] wrote:



On Nov 7, 2006, at 6:13 AM, ant elder wrote:

 On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

   webapp-1.0-incubator-M2-SNAPSHOT.jar
 webapp-host-1.0-incubator-M2-SNAPSHOT.jar
 are not present in the standalone launcher (the rest are).  In  
order
 to avoid the need for ant users to download these jars from a  
maven

 repo, I'd like to propose adding them to the binary distro.  For
 example, they could go in a new webapp directory.  They are not  
large

 and they would not impact use of the binary distro as a standalone
 Tuscany launcher.


 I think the issue here is what is our binary distro in M2, is it
 just the
 standalone distro or something more? Some previous discussion have
 been
 sounding like the binary distro is just the standalone distro,  
i'm not
 convinced thats true or a good idea.  The current name is ...- 
bin not

 ...-standalone and it already includes the servlet jar and things
 like SDO.

They contain SDO because of a hack and should not, specifically the
jars need to be crammed on the system classpath because we have not
yet implemented multi-parent classloading. Once this is in place,
they can be removed.

As for servlet jar, that is required by the Kernel for ServletHost.
We could factor that out as well moving forward.

 If we don't include the two tuscany webapp jars in the bin distro
 we release
 then how do we get them released officially with an ipmc vote?

 Being pragmatic the easiest way to fix this particular problem
 probably is
 to just also include the two tuscany webapp jars as well. And if
 we're going
 down that route why not also add the javadoc and prebuilt samples
 as well so
 we have a really easy to use binary M2 release :)

And then the problem we have is we wind up with the monolith we tried
to avoid based on all of the modularity discussions. As you mentioned
below, when we include BigBank, we drag in DAS. In the future, when
we have additional samples such as a BigBank that uses JPA, we will
need to included those as well. Multiply that with JAXB, other web
services stacks, JMS, etc. The kitchen sink approach ultimately is
not going to work with the type of extensible runtime that we have.
Instead of creating a monolith, this can be solved (better IMO) by
having the runtime dynamically provision extensions based on the
Maven Artifact repository service that Meeraj and Jeremy worked on.

Jeremy had very strong opinions on how this should be done; as our
release manager for M2, before making any significant changes to the
branch we should clear it with him. He mentioned he will be back
online Thursday.

Jim

   ...ant

 PS. Whats going to happen when trying to build bigbank with ant and
 the DAS
 jars are required?


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread Simon Nash

I was not suggesting a kitchen sink approach, only the inclusion
in the binary distro of 2 small extra runtime jar files that all
our users who create webapps will need.

I understand that our strategy for loading extension dependencies
is to use the runtime support for accessing a remote or embedded
Maven artifact repository that Meeraj and Jeremy worked on.  I'm not
proposing that we change this strategy.

The challenge I'm facing in adding some support for building Tuscany
applications with ant is not a runtime issue but a build-time one.
For simple Tuscany webapps, I am very close to being able to build
these webapps from the binary distro and a simple ant script using only
built-in tasks.  It is only the lack of these 2 webapp jar files in
the binary distro that is preventing this, since without them in the
binary distro, the ant script would need to download them from a remote
maven repo.  This requires the use of a custom Ant task as well as the
need for live internet connectivity.  This makes the ant build process
and the user's getting started experience a lot more complex.  By adding
these 2 jars to the binary distro, we enable ant users to build simple
Tuscany webapps without needing to deal with custom Ant tasks,
dependency management, or remote maven repos.

For more complex webapps with external dependencies that we are not
delivering in our binary distro, we also need a way to build these
using ant.  When I have completed the simple case without dependencies,
I will start work on this case.  I have begun to investigate possible
options, which will necessarily be more complex than the simple case
where there are no dependencies.  I'd like to give our users a simple
experience for doing simple things, and reserve the more complex
experience for doing more complex things.

I hope this explains why it would be very helpful from a user
perspective to have these 2 jars in the binary distro.  This is a
separate issue from adding the other things that Ant mentioned.

  Simon

Jim Marino wrote:



On Nov 7, 2006, at 6:13 AM, ant elder wrote:


On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

  webapp-1.0-incubator-M2-SNAPSHOT.jar


   webapp-host-1.0-incubator-M2-SNAPSHOT.jar
are not present in the standalone launcher (the rest are).  In order
to avoid the need for ant users to download these jars from a maven
repo, I'd like to propose adding them to the binary distro.  For
example, they could go in a new webapp directory.  They are not large
and they would not impact use of the binary distro as a standalone
Tuscany launcher.




I think the issue here is what is our binary distro in M2, is it  just 
the

standalone distro or something more? Some previous discussion have  been
sounding like the binary distro is just the standalone distro, i'm not
convinced thats true or a good idea.  The current name is ...-bin not
...-standalone and it already includes the servlet jar and things  
like SDO.


They contain SDO because of a hack and should not, specifically the  
jars need to be crammed on the system classpath because we have not  yet 
implemented multi-parent classloading. Once this is in place,  they can 
be removed.


As for servlet jar, that is required by the Kernel for ServletHost.  We 
could factor that out as well moving forward.


If we don't include the two tuscany webapp jars in the bin distro  we 
release

then how do we get them released officially with an ipmc vote?

Being pragmatic the easiest way to fix this particular problem  
probably is
to just also include the two tuscany webapp jars as well. And if  
we're going
down that route why not also add the javadoc and prebuilt samples  as 
well so

we have a really easy to use binary M2 release :)

And then the problem we have is we wind up with the monolith we tried  
to avoid based on all of the modularity discussions. As you mentioned  
below, when we include BigBank, we drag in DAS. In the future, when  we 
have additional samples such as a BigBank that uses JPA, we will  need 
to included those as well. Multiply that with JAXB, other web  services 
stacks, JMS, etc. The kitchen sink approach ultimately is  not going 
to work with the type of extensible runtime that we have.   Instead of 
creating a monolith, this can be solved (better IMO) by  having the 
runtime dynamically provision extensions based on the  Maven Artifact 
repository service that Meeraj and Jeremy worked on.


Jeremy had very strong opinions on how this should be done; as our  
release manager for M2, before making any significant changes to the  
branch we should clear it with him. He mentioned he will be back  online 
Thursday.


Jim


  ...ant

PS. Whats going to happen when trying to build bigbank with ant and  
the DAS

jars are required?




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--
Simon C Nash   IBM Distinguished Engineer

Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread Jeremy Boynes

I think this highlights one of the challenges with Ant-based build
environments. Although Ant provides the mechanisms for executing the
build scripts it does not provide a method for locating the
dependencies needed at build-time - for example, to compile or
repackage; often they are simply checked in alongside the user's
source. This was one of the key issues that the Maven project
originally set out to solve and which led to the establishment of the
repo systems.

I have not had a chance to see how your scripts address locating these
dependencies. I realize that some, like SDO, are (undesirably) located
in the standalone distro; others like spring, jaxb, json, js are not
(or at least I hope they are not). It would help (in my currently
disconnected state) if you could describe how your environment handles
these.

We will be making all the dependencies (including these) available
through the maven repository system. As I explained in an earlier
mail, the release vote would include not just the binary and other
archives but also /all/ of the artifacts we release through the repo;
this addresses Ant's concern about IPMC approval.

At a fundamental level, I would question whether using the standalone
runtime distribution as the basis of a build environment is the way to
be going. Would we be better served producing a library
distribution, and if so, should it include /alll/ the transitive
dependencies or not? Perhaps we should take this further and produce
distributions pre-packaged for consumption in IDE environments (an
IDEA or Eclipse distribution for example)?

After all, if I'm building a WAR file, why would I need the standalone
distro at all? Or perhaps using Ant is actually more complex perhaps
we should just ship Maven builds.

--
Jeremy

On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

I was not suggesting a kitchen sink approach, only the inclusion
in the binary distro of 2 small extra runtime jar files that all
our users who create webapps will need.

I understand that our strategy for loading extension dependencies
is to use the runtime support for accessing a remote or embedded
Maven artifact repository that Meeraj and Jeremy worked on.  I'm not
proposing that we change this strategy.

The challenge I'm facing in adding some support for building Tuscany
applications with ant is not a runtime issue but a build-time one.
For simple Tuscany webapps, I am very close to being able to build
these webapps from the binary distro and a simple ant script using only
built-in tasks.  It is only the lack of these 2 webapp jar files in
the binary distro that is preventing this, since without them in the
binary distro, the ant script would need to download them from a remote
maven repo.  This requires the use of a custom Ant task as well as the
need for live internet connectivity.  This makes the ant build process
and the user's getting started experience a lot more complex.  By adding
these 2 jars to the binary distro, we enable ant users to build simple
Tuscany webapps without needing to deal with custom Ant tasks,
dependency management, or remote maven repos.

For more complex webapps with external dependencies that we are not
delivering in our binary distro, we also need a way to build these
using ant.  When I have completed the simple case without dependencies,
I will start work on this case.  I have begun to investigate possible
options, which will necessarily be more complex than the simple case
where there are no dependencies.  I'd like to give our users a simple
experience for doing simple things, and reserve the more complex
experience for doing more complex things.

I hope this explains why it would be very helpful from a user
perspective to have these 2 jars in the binary distro.  This is a
separate issue from adding the other things that Ant mentioned.

  Simon

Jim Marino wrote:


 On Nov 7, 2006, at 6:13 AM, ant elder wrote:

 On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

   webapp-1.0-incubator-M2-SNAPSHOT.jar

webapp-host-1.0-incubator-M2-SNAPSHOT.jar
 are not present in the standalone launcher (the rest are).  In order
 to avoid the need for ant users to download these jars from a maven
 repo, I'd like to propose adding them to the binary distro.  For
 example, they could go in a new webapp directory.  They are not large
 and they would not impact use of the binary distro as a standalone
 Tuscany launcher.



 I think the issue here is what is our binary distro in M2, is it  just
 the
 standalone distro or something more? Some previous discussion have  been
 sounding like the binary distro is just the standalone distro, i'm not
 convinced thats true or a good idea.  The current name is ...-bin not
 ...-standalone and it already includes the servlet jar and things
 like SDO.

 They contain SDO because of a hack and should not, specifically the
 jars need to be crammed on the system classpath because we have not  yet
 implemented multi-parent classloading. Once this is in place,  they 

Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread Rick



Jeremy Boynes wrote:

I think this highlights one of the challenges with Ant-based build
environments. Although Ant provides the mechanisms for executing the
build scripts it does not provide a method for locating the
dependencies needed at build-time - for example, to compile or
repackage; often they are simply checked in alongside the user's
source. This was one of the key issues that the Maven project
originally set out to solve and which led to the establishment of the
repo systems.

I have not had a chance to see how your scripts address locating these
dependencies. I realize that some, like SDO, are (undesirably) located
in the standalone distro; others like spring, jaxb, json, js are not
(or at least I hope they are not). It would help (in my currently
disconnected state) if you could describe how your environment handles
these.

We will be making all the dependencies (including these) available
through the maven repository system. As I explained in an earlier
mail, the release vote would include not just the binary and other
archives but also /all/ of the artifacts we release through the repo;
this addresses Ant's concern about IPMC approval.

At a fundamental level, I would question whether using the standalone
runtime distribution as the basis of a build environment is the way to
be going. Would we be better served producing a library
Wouldn't if we added javadoc, SDOgen, Java2WSDL, WSDL2Java, War Plugin 
commandline to this be essentially a Tuscany SDK?



distribution, and if so, should it include /alll/ the transitive
dependencies or not? Perhaps we should take this further and produce
distributions pre-packaged for consumption in IDE environments (an
IDEA or Eclipse distribution for example)?

After all, if I'm building a WAR file, why would I need the standalone
distro at all? Or perhaps using Ant is actually more complex perhaps
we should just ship Maven builds.

--
Jeremy

On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

I was not suggesting a kitchen sink approach, only the inclusion
in the binary distro of 2 small extra runtime jar files that all
our users who create webapps will need.

I understand that our strategy for loading extension dependencies
is to use the runtime support for accessing a remote or embedded
Maven artifact repository that Meeraj and Jeremy worked on.  I'm not
proposing that we change this strategy.

The challenge I'm facing in adding some support for building Tuscany
applications with ant is not a runtime issue but a build-time one.
For simple Tuscany webapps, I am very close to being able to build
these webapps from the binary distro and a simple ant script using only
built-in tasks.  It is only the lack of these 2 webapp jar files in
the binary distro that is preventing this, since without them in the
binary distro, the ant script would need to download them from a remote
maven repo.  This requires the use of a custom Ant task as well as the
need for live internet connectivity.  This makes the ant build process
and the user's getting started experience a lot more complex.  By adding
these 2 jars to the binary distro, we enable ant users to build simple
Tuscany webapps without needing to deal with custom Ant tasks,
dependency management, or remote maven repos.

For more complex webapps with external dependencies that we are not
delivering in our binary distro, we also need a way to build these
using ant.  When I have completed the simple case without dependencies,
I will start work on this case.  I have begun to investigate possible
options, which will necessarily be more complex than the simple case
where there are no dependencies.  I'd like to give our users a simple
experience for doing simple things, and reserve the more complex
experience for doing more complex things.

I hope this explains why it would be very helpful from a user
perspective to have these 2 jars in the binary distro.  This is a
separate issue from adding the other things that Ant mentioned.

  Simon

Jim Marino wrote:


 On Nov 7, 2006, at 6:13 AM, ant elder wrote:

 On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:

   webapp-1.0-incubator-M2-SNAPSHOT.jar

webapp-host-1.0-incubator-M2-SNAPSHOT.jar
 are not present in the standalone launcher (the rest are).  In order
 to avoid the need for ant users to download these jars from a maven
 repo, I'd like to propose adding them to the binary distro.  For
 example, they could go in a new webapp directory.  They are not large
 and they would not impact use of the binary distro as a standalone
 Tuscany launcher.



 I think the issue here is what is our binary distro in M2, is it  just
 the
 standalone distro or something more? Some previous discussion have  
been

 sounding like the binary distro is just the standalone distro, i'm not
 convinced thats true or a good idea.  The current name is ...-bin not
 ...-standalone and it already includes the servlet jar and things
 like SDO.

 They contain SDO because of a hack and should not, 

Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread Simon Nash

Jeremy,
Thanks for the quick response.

I am trying to be pragmatic here and deal with simple use cases.
I haven't yet worked out the best way to deal with external or
transitive dependencies from an ant build environment (though
I do have some thoughts), but having a complete story for this
is not needed to build a simple webapp.  Adding these 2 jars
would be a simple change that would make the first use encounter
with Tuscany quite a bit easier for ant users.

I am not proposing a library with extension dependencies like the
ones you mentioned (either direct or transitive).  I think there
are a lot of issues with this, mainly because these dependencies
are not part of Tuscany but are part of other projects.
The 2 webapp jars are part of Tuscany and would be included in
the Tuscany binary distro as a convenience to Tuscany users.

IDE-specific packages are something we might get to in the future.
I am not trying to be anything like that ambitious at the moment.

Yes, we could insist that all Tuscany application developers build
with maven.  I don't think that would be a wise approach if we
want to build a broad-based community.  At least there should be
some level of support for other build environments, or enough
indication of what is going on under the maven covers that people
can create other build setups themselves if they want to.
Simple ant scripts can serve as this kind of documentation.

You're right that a war doesn't need the standalone distribution
to be present in order to run.  Having a way to use our binary
distribution in library mode, at least for the Tuscany artifacts
that it contains, seems attractive to me if the cost is only
adding 2 small jars.

I'm quite a newbie with ant so I don't think my war building script
in its current form provides the slickest possible approach.
I'd be happy to make it available so that people can look at it
and perhaps suggest improvements.  It currently takes quite a
literal approach to recreating the exact same directory and file
structure as the maven build produces.  I'll create a JIRA and
attach the 2 scripts I have created so far (standalone and war).

  Simon

Jeremy Boynes wrote:


I think this highlights one of the challenges with Ant-based build
environments. Although Ant provides the mechanisms for executing the
build scripts it does not provide a method for locating the
dependencies needed at build-time - for example, to compile or
repackage; often they are simply checked in alongside the user's
source. This was one of the key issues that the Maven project
originally set out to solve and which led to the establishment of the
repo systems.

I have not had a chance to see how your scripts address locating these
dependencies. I realize that some, like SDO, are (undesirably) located
in the standalone distro; others like spring, jaxb, json, js are not
(or at least I hope they are not). It would help (in my currently
disconnected state) if you could describe how your environment handles
these.

We will be making all the dependencies (including these) available
through the maven repository system. As I explained in an earlier
mail, the release vote would include not just the binary and other
archives but also /all/ of the artifacts we release through the repo;
this addresses Ant's concern about IPMC approval.

At a fundamental level, I would question whether using the standalone
runtime distribution as the basis of a build environment is the way to
be going. Would we be better served producing a library
distribution, and if so, should it include /alll/ the transitive
dependencies or not? Perhaps we should take this further and produce
distributions pre-packaged for consumption in IDE environments (an
IDEA or Eclipse distribution for example)?

After all, if I'm building a WAR file, why would I need the standalone
distro at all? Or perhaps using Ant is actually more complex perhaps
we should just ship Maven builds.

--
Jeremy

On 11/7/06, Simon Nash [EMAIL PROTECTED] wrote:


I was not suggesting a kitchen sink approach, only the inclusion
in the binary distro of 2 small extra runtime jar files that all
our users who create webapps will need.

I understand that our strategy for loading extension dependencies
is to use the runtime support for accessing a remote or embedded
Maven artifact repository that Meeraj and Jeremy worked on.  I'm not
proposing that we change this strategy.

The challenge I'm facing in adding some support for building Tuscany
applications with ant is not a runtime issue but a build-time one.
For simple Tuscany webapps, I am very close to being able to build
these webapps from the binary distro and a simple ant script using only
built-in tasks.  It is only the lack of these 2 webapp jar files in
the binary distro that is preventing this, since without them in the
binary distro, the ant script would need to download them from a remote
maven repo.  This requires the use of a custom Ant task as well as the
need for live internet 

Re: Adding 2 webapp jars to binary distro

2006-11-07 Thread Simon Nash


Rick wrote:




Jeremy Boynes wrote:


I think this highlights one of the challenges with Ant-based build
environments. Although Ant provides the mechanisms for executing the
build scripts it does not provide a method for locating the
dependencies needed at build-time - for example, to compile or
repackage; often they are simply checked in alongside the user's
source. This was one of the key issues that the Maven project
originally set out to solve and which led to the establishment of the
repo systems.

I have not had a chance to see how your scripts address locating these
dependencies. I realize that some, like SDO, are (undesirably) located
in the standalone distro; others like spring, jaxb, json, js are not
(or at least I hope they are not). It would help (in my currently
disconnected state) if you could describe how your environment handles
these.

We will be making all the dependencies (including these) available
through the maven repository system. As I explained in an earlier
mail, the release vote would include not just the binary and other
archives but also /all/ of the artifacts we release through the repo;
this addresses Ant's concern about IPMC approval.

At a fundamental level, I would question whether using the standalone
runtime distribution as the basis of a build environment is the way to
be going. Would we be better served producing a library


Wouldn't if we added javadoc, SDOgen, Java2WSDL, WSDL2Java, War Plugin 
commandline to this be essentially a Tuscany SDK?



Yes, it would, and for M3 it would be good to talk about whether
this is a useful thing to provide.  At the moment I am focused on
the minimum needed to solve the specific problem of building simple
webapps using ant scripts that don't require custom tasks.

I have attached the 2 ant scripts that I have completed so far to
TUSCANY-906.  I'd appreciate suggestions for improvement, especially
to the webapp one.  In their current state, they can't handle extension
dependencies.  I'm going to look into creating a custom ant task that
will support this in a similar manner to the Tuscany maven war plugin.

  Simon


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]