I think that there are two ( ok more than that but still . . . ) types of
samples.  One type attempts to demonstrate the muscles of the technology and
inspire a 'boy this is great, this is better than what I am currently doing'
thought process.  The other is more educational and attempts to walk the
developer through the development/deployment process while giving them a
sense of what they are accomplishing.  Both are usefull.  However, I often
feel that samples get the goals confused and wind up complicating the code
of educational sample without providing the appropiate tutorial updates.

The key for educational samples is that they should be readable, should
involve deployment and most importantly a concise accurate tutorial.   They
should not attempt to be the killer app but in the SCA land should
definately involve plugging in different service implementations etc as a
part of the tutorial.  It is also a little harder than one would think to
provide documentation etc that clearly indicate to the user which
application they should use for what goal.

I would recommend two approaches.  Providing a simple sample application
combined with a tutorial for dev, deployment, execution, service replacement
etc that does not provide an runtime environement such tomcat.  Also
providing a fatter muscle flexing sca application combined with a up and
runing environement.

On an aside I am currently working on a simple POJO Hibernate application
conversion to using SDO and then exposing services via SCA.  Kapel and I
plan to write a simple tutorial going over the migration and other aspects
of this task such as comparing a Hibernate RDB DAS to the SDO DAS, and hte
performance cost of using static SDO within our applications POJO model.

. . . thoughts ?

Robbie

On 8/18/06, Jim Marino <[EMAIL PROTECTED]> wrote:

I think there are a couple issues here which would benefit by
stepping through what we expect users to actually be doing. From a
user standpoint, I imagine most people will have the following goals:

1. Figure out how to write an SCA application
2. Figure out how to deploy the application
3. Run the application

Starting with 3 in a server environment does not really do anything.
For example, I start something up and hit a web page, but can't
really debug or step through without setting a project up in my IDE.
What I think most users want is a quick way (i.e 5 minutes) to do the
following:

1. Download a sample that has an automated way to create a dev project
2. Build the sample and deploy it to whatever host environment I
typically do my development with. For example, for web app
development, I prefer Jetty since it is light, fast, and easily
embedded. Others may prefer Resin, Websphere, WebLogic, etc. As I
mention below, however, I don't think most Tuscany development will
be done inside a web app.
3. Run the sample and debug it (either remotely or in my IDE) so I
can see what is happening
4. Make changes to the sample and goto step 2

The most time-consuming parts I have found in using new technologies
is getting my dev environment setup properly. For example, with a
binary distro, here is what I would have to go through:

1. Download the binary distro, including a pile of dependencies
probably totaling over 200MB
2. Unzip the distro, follow the readme instructions to start the thing
3. Use a browser to hit a web page that prints something out

At this point, I still can't really see what is going on much less do
things like changing bindings, adding policy, swapping implementation
types, etc. If I want to use really understand how SCA and Tuscany
work, I would have to:

4. Download the source sample, maybe it is included in 1 but maybe not
5. Setup my dev environment with a sample project
6. Build the sample and package it
7. Figure out whether I want to deal with Tomcat the version of
Tomcat my Tuscany download just came with. Probably not, since I
already have a Tomcat install or use something else.
8. Make any necessary changes to my dev environment so I can debug
the sample as it is run
9. Deploy the sample to the host I do my development with

IMO what would be much simpler for end users would be to:

1. Download a sample distro
2. Build it with maven, which can generate the IDE project for me as
well as deployment artifacts for whatever host type I choose, e.g. a
WAR file
3. Set my IDE to use the source from the sample I just downloaded
4. Decide where I want to deploy it to. If it is a WAR, I just drop
it in and either run it from within my IDE and debug or attach to a
remote process

I think it would be useful to look at projects that have been highly
successful (i.e. one of the most widely used Java projects) and see
how they do things, Spring and Hibernate. Both do not ship a pre-
configured host environment.

As a further thing to think about, I expect most SCA users will *not*
be developing with or deploying to Tomcat and will probably instead
use the standalone version. This is for a number of reasons:

1. The J2EE deployment model restricts some of the most important
features implicit in SCA
2. Related to #1, most of the capabilities people really to want to
see involve things like transactions and policy, dynamic re-wiring,
etc. which are not directly supported in Tomcat. This will mean
either having to configure Tomcat with a transaction manager or
bundling one in the web application. Standalone can handle this
dynamically. Consequently, I suspect the user experience will be more
difficult on Tomcat. I also don't think most are going to be
interested in "helloworld" variants as that can be done more easily
with existing technologies.
3. With dependency injection,  there is no need to develop within a
container - just use mocks. When I build apps, I typically don't get
them running in a host environment until integration testing.

Jim



On Aug 18, 2006, at 7:26 AM, Rick wrote:

> +1 for both .. does that make 2? :-)
> I like the idea of having the bar a low as possible for someone to
> just start playing with samples to learn building SCA applications.
> But I also see Jim's point.  There are other set of users (IT
> types) that may not even care about Tomcat and we definitely need
> to please them too.
> I think the trick here is to for the site documentation about what
> download to to satisfy your particular interests  is very important
> and we make perfectly clear that Tuscany is not just a Tomcat/
> webserver extension.
> Luciano Resende wrote:
>> +1 for what Jervis, Ant and Simon are saying... I really liked the
>> pre-configured Tomcat  installations available for the samples in
>> M1, made
>> my life much easier to get started in Tuscany. I have also
>> recently created
>> that for DAS samples and it's available today at samples/das/
>> testing/tomcat
>>
>> - Luciano
>>
>> On 8/18/06, Simon Laws <[EMAIL PROTECTED]> wrote:
>>>
>>> On 8/18/06, ant elder <[EMAIL PROTECTED]> wrote:
>>> >
>>> > There are quite a few old threads where we've discussed
>>> samples, here's
>>> > just
>>> > one of them:
>>> >
>>> >
>>> http://mail-archives.apache.org/mod_mbox/ws-tuscany-dev/
>>> 200604.mbox/%
>>> [EMAIL PROTECTED]
>>> >
>>> > If we're moving towards multiple Tuscany distributions targeted at
>>> > different
>>> > areas then i think its fine (and even desirable) for one of those
>>> > distributions to contain an entire host environment. One of the
>>> good
>>> > things
>>> > about the M1 release was that it really did make it easy for
>>> new users
>>> to
>>> > get started, just "unzip and click on startup".
>>> >
>>> >    ...ant
>>> >
>>> > On 8/18/06, Jim Marino <[EMAIL PROTECTED]> wrote:
>>> > >
>>> > >
>>> > > On Aug 17, 2006, at 11:21 PM, ant elder wrote:
>>> > >
>>> > > > I agree with Jervis, things just running out-of-box is much
>>> nicer
>>> > > > for first
>>> > > > time users than having to fiddle about editing config files.
>>> > > >
>>> > > > Would an alternative be to change the structure of the
>>> samples and
>>> > > > move
>>> > > > these technology specific samples into the extension that
>>> they use.
>>> > > > For
>>> > > > example, something like having a javascript folder that
>>> contained
>>> > > > separate
>>> > > > projects for the JavaScript container and each JavaScript
>>> sample.
>>> > > > There
>>> > > > would still be lots of helloworld samples, but not all in
>>> the one
>>> > > > top level
>>> > > > samples folder so wouldn't be quite so in your face.
>>> > > I like the idea of moving the samples into the extensions
>>> (except
>>> > > maybe the samples that use multiple extensions) and actually
>>> think it
>>> > > could correspond to Jeremy's proposal. This would allow us to
>>> > > compartmentalize things more which I think is going to be
>>> fundamental
>>> > > to scaling the project. I have several caveats for this though:
>>> > >
>>> > > - there is a clear distinction in the tree between the
>>> samples and
>>> > > runtime extension code. In other words, each sample project
>>> should
>>> > > not be a sibling to the project containing extension code but
>>> should
>>> > > go under a samples folder in separate projects
>>> > > - the extensions are individually built from the core
>>> projects and
>>> > > fairly autonomous per my previous email
>>> > > - samples are not built with the check-in build for
>>> extensions and
>>> > > are separately distributable
>>> > >
>>> > > In terms of end-user experience, I think things are going to
>>> vary
>>> > > greatly depending on the host environment. For example, in our
>>> > > standalone environment, things can be automated fairly easily:
>>> > >
>>> > > 1. User downloads core distribution
>>> > > 2. User downloads and drops in sample distribution and starts
>>> the
>>> > > standalone core
>>> > > 3. Core reads the dependencies from the sample SCDL and pulls
>>> down
>>> > > the required extensions via the ArtifactFactory from a Maven
>>> > > repository. This would resolve the transitive closure of all
>>> > > extension dependencies. This would allow us to track
>>> dependencies for
>>> > > extension libraries such as Spring for "free" since most
>>> projects
>>> > > publish POMs to a Maven repo.
>>> > > 4. If user chooses, they could avoid step 4 and just download
>>> the
>>> > > extension and plug it in
>>> > >
>>> > > Something similar to the above could be done for OSGi except
>>> the end
>>> > > user would just deploy a core bundle into an existing OSGi
>>> host such
>>> > > as Equinox they had installed.
>>> > >
>>> > > If we are deploying to a servlet container, things will
>>> likely be
>>> > > more complex but not too much:
>>> > >
>>> > > 1. User downloads sample application and builds it using
>>> Maven, which
>>> > > retrieves the core as a dependency and bundles everything
>>> into a war.
>>> > > 2 User deploys the sample war
>>> > >
>>> > > If we "prepackaged" every sample distribution so it could
>>> just be
>>> > > dropped in, I think we will wind up with a ton of packaging
>>> problems
>>> > > as core will need to be included in every one.
>>> > >
>>> > > I'm pretty firmly against distributions containing an entire
>>> host
>>> > > environment, such as Tomcat. I'd prefer we follow projects like
>>> > > Spring, Struts, WebWork, Hibernate (take your pick) and provide
>>> > > distributions which are simple to deploy into containers
>>> using some
>>> > > minimal configuration steps. My reason for this is partly
>>> practical.
>>> > > First, we should support deploying on a variety of host
>>> environments
>>> > > and having to rev versions would be a nightmare. Second, in
>>> most data
>>> > > centers I have come across, there is a standard image
>>> technologies
>>> > > must accommodate and they will not accept an "bundle of stuff".
>>> > >
>>> > >
>>> > > Jim
>>> > >
>>> > > >
>>> > > >   ...ant
>>> > > >
>>> > > > On 8/17/06, Liu, Jervis <[EMAIL PROTECTED]> wrote:
>>> > > >>
>>> > > >> One thing concerns me would be the out-of-box user
>>> experience. For
>>> > > >> a first
>>> > > >> time Tuscany user, don't you think it is more user
>>> friendly if
>>> > > >> users only
>>> > > >> need to follow the readme, go to a directory, run a
>>> common, then
>>> > > >> everything
>>> > > >> works out-of-box? Speaking in my experience, it does
>>> encourage me
>>> > > >> to explore
>>> > > >> a new product further if I can set up and run a typical
>>> helloworld
>>> > > >> sample
>>> > > >> successfully in 5 minutes without any coding. Well, maybe
>>> just me
>>> > > >> being too
>>> > > >> lazy... ;-)
>>> > > >>
>>> > > >> Cheers,
>>> > > >> Jervis
>>> > > >>
>>> > > >> > -----Original Message-----
>>> > > >> > From: Jeremy Boynes [mailto:[EMAIL PROTECTED]
>>> > > >> > Sent: Thursday, August 17, 2006 6:54 AM
>>> > > >> > To: tuscany-dev@ws.apache.org
>>> > > >> > Subject: Sample framework
>>> > > >> >
>>> > > >> >
>>> > > >> > We have had a rapid increase in the number of samples
>>> recently
>>> many
>>> > > >> > of which do essentially the same thing. Some feedback
>>> from M1
>>> also
>>> > > >> > said that we seemed to have invented the greatest number of
>>> > > >> > varieties
>>> > > >> > of HelloWorld but that it was hard to tell if SCA could do
>>> anything
>>> > > >> > else. I'd like to propose a change in how we structure the
>>> > > >> > samples so
>>> > > >> > that we make it clearer to illustrate the technology to
>>> users.
>>> > > >> >
>>> > > >> > Rather than having separate projects for each technology
>>> > > >> > variant, I'd
>>> > > >> > like to suggest we have just a couple of projects that
>>> provide a
>>> > > >> > framework and then have instructions in the
>>> documentation for
>>> each
>>> > > >> > technology that clearly show how to apply it.
>>> > > >> >
>>> > > >> > For example, I can see two framework environments:
>>> > > >> > a) a client environment with a simple command line
>>> client wires
>>> > > >> > together a couple of local components
>>> > > >> > b) a webapp environment with a simple JSP client that
>>> also wires
>>> > > >> > together a couple of local components
>>> > > >> >
>>> > > >> > Then, for example, the JavaScript extension could say:
>>> > > >> >    To illustrate the use of JavaScript as a component,
>>> take the
>>> > > >> > client a) and
>>> > > >> >    1) replace <implementation.java class="Foo"/> with
>>> > > >> > <implementation.javascript script=" foo.js"/>
>>> > > >> >    2) Install javascript extension
>>> > > >> >    2) rebuild/run sample
>>> > > >> >
>>> > > >> > Or, to illustrate the WebService binding:
>>> > > >> > Server
>>> > > >> >    1) Take webapp and add <service>< binding.ws ...>
>>> > > >> >    2) Install Axis binding extension
>>> > > >> >    3) Deploy server app to Tomcat
>>> > > >> > Client
>>> > > >> >    1) Take client application and replace <component
>>> > > >> name="foo" ...>
>>> > > >> > with <reference><binding.ws ...>
>>> > > >> >    2) Install Axis binding extension
>>> > > >> >    3) Run client
>>> > > >> >
>>> > > >> > The basic idea being, have a common framework and the
>>> > > >> > instructions on
>>> > > >> > how to use the particular extension.
>>> > > >> > --
>>> > > >> > Jeremy
>>> > > >> >
>>> > > >> >
>>> > > >>
>>> --------------------------------------------------------------------
>>> -
>>> > > >> > To unsubscribe, e-mail: tuscany-dev-
>>> [EMAIL PROTECTED]
>>> > > >> > For additional commands, e-mail: tuscany-dev-
>>> [EMAIL PROTECTED]
>>> > > >> >
>>> > > >> >
>>> > > >>
>>> > > >>
>>> --------------------------------------------------------------------
>>> -
>>> > > >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> > > >> For additional commands, e-mail: tuscany-dev-
>>> [EMAIL PROTECTED]
>>> > > >>
>>> > > >>
>>> > >
>>> > >
>>> > >
>>> --------------------------------------------------------------------
>>> -
>>> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> > > For additional commands, e-mail: [EMAIL PROTECTED]
>>> > >
>>> > >
>>>
>>>
>>>
>>> I agree with Ant. As primarily a user (in the sense that I wanted to
>>> understand it and try the samples) of the Java M1 release the
>>> presence of
>>> the pre-configured Tomcat installation was really handy for quickly
>>> running
>>> through the samples and getting a feel for what it was all about.
>>> As you
>>> are
>>> constructing a build and distribution system/approach that allows
>>> you to
>>> cut
>>> different distros to suit different requirements for hosting or
>>> embedding
>>> can you make a standalone samples distro for the interested
>>> newbie. No
>>> suggestion that this distro would get deployed into production or
>>> used
>>> other
>>> than to get familiar with the technology or bootstrap a development
>>> environment? This doesn't suit the hardcore techy who just wants the
>>> latest
>>> release of the components they are going to refresh into their hand
>>> crafted
>>> development/test/deployment environment but then they would go
>>> and get one
>>> of the other distros.
>>>
>>> Regards
>>>
>>> Simon
>>>
>>>
>>
>>
>
>
> ---------------------------------------------------------------------
> 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]




--
* * * Charlie * * *
Check out some pics of little Charlie at
http://www.flickr.com/photos/[EMAIL PROTECTED]/sets/

* * * Addresss * * *
1914 Overland Drive
Chapel Hill
NC 27517

* * * Number * * *
919-225-1553

Reply via email to