Re: New Spring Maintenance policy

2008-09-25 Thread Rainer Pruy
I'd doubt a petition by itself would make them change the policy.

Probably they no longer can afford time, money or other resource to support 
community version of spring.
If they are trying to make a business out of it it is quite obvious that they 
won't pop up asking for
someone to take over.

Nevertheless, It might help indicating to them that their behaviour might 
endanger any business perspective implied
so that they are more willing to keep a sufficient level of support.

I personally do think there is no need for immediate action.
But in the worst case we will be in a similar situation
as when the current team around spring had declared their retirement from 
spring project: A new team needs to take over.

So let's have a close watch at further development of the issue
Rainer

Reinhard Pötz schrieb:
 Rainer Pruy wrote:
 A clear statement along only the most current release will receive
 maintenance efforts would have been much easier and clearer (and
 would get broader acceptance by the community). That the whole thing
 was not put that way contributes to the impression that users should
 be convinced into a support contract.
 
 Thanks Rainer, that's more or less the same that I wanted to say. Maybe
 SpringSource can be convinced to change their policy into this direction.
 
 WDOT, would a petition help for that purpose?
 

-- 
Rainer Pruy
Geschäftsführer

Acrys Consult GmbH  Co. KG
Untermainkai 29-30, D-60329 Frankfurt
Tel: +49-69-244506-0 - Fax: +49-69-244506-50
Web: http://www.acrys.com -  Email: [EMAIL PROTECTED]
Handelsregister: Frankfurt am Main, HRA 31151


Re: New Spring Maintenance policy

2008-09-24 Thread Rainer Pruy
Hi,

yes, all the wording is quite confusing.
The statement cited by Peter is trying to convince readers into believing it 
will affect only old releases,
but there nowhere is a guarantee put up that there will be a new release within 
the 3month period.
And the policy puts up that 3 month period per release without referring to 
later releases.

A clear statement along only the most current release will receive maintenance 
efforts
would have been much easier and clearer (and would get broader acceptance by 
the community).
That the whole thing was not put that way contributes to the impression that 
users should be convinced into a support contract.

Rainer

Joerg Heinicke schrieb:
 On 24.09.2008 00:00, Sylvain Wallez wrote:
 
 Yeah. I read this as 3 months after release n+1 is out, release n
 becomes closed source. I'm wondering how long it will take for forks
 to appear that will provide open source bug fixes to old releases.
 
 I don't think that's n+1 but n: After a new major version of Spring is
 released, community maintenance updates will be issued for three months
 to address initial stability issues. They wouldn't talk about initial
 stability issues anymore if it were n+1.
 
 Joerg


Re: [2.1] AbstractCachingProcessingPipeline and cocoon CLI

2008-08-22 Thread Rainer Pruy
Hi,
sorry for intruding this discussion.

just from what I can take from this discussion:

Wouldn't it be easier to enclose this into a generalized Environment 
implementation
that does support Environment.getTopRequest() and is stored with ObjectModel in 
place of those different REQUEST_OBJECT instances -
all different?
That way you could also have some getCurrentRequest() or getNthRequest(int n) 
or any other operation that has to deal with request
environments and knowledge about can be kept more local.

Just my 0,02 EUR

Rainer

Vadim Gritsenko schrieb:
 On Aug 22, 2008, at 8:57 AM, Thorsten Scherler wrote:
 
 On Fri, 2008-08-22 at 08:18 -0400, Vadim Gritsenko wrote:
 On Aug 22, 2008, at 3:35 AM, Thorsten Scherler wrote:

 How about:
} else {
 -Object lock =
 env.getObjectModel().get(HttpEnvironment.HTTP_REQUEST_OBJECT);
 +Object lock =
 env.getObjectModel().get(ObjectModelHelper.REQUEST_OBJECT);
try {
transientStore.store(lockKey, lock);
} catch (IOException e) {

 This way we always lock the same object.

 Exactly this thing I was trying to explain - it will not work because
 instead of using top level request you are suggesting to use current
 sub-request.

 Sorry I am not really following. As understand you we cannot use
 ObjectModelHelper.REQUEST_OBJECT since we cannot be sure that is not a
 sub-request (a request for the exact same resource in a concurrent
 situation).
 
 Exactly.
 
 
 If the lock is null for a HttpEnvironment.HTTP_REQUEST_OBJECT then we
 are in CLI mode.
 
 (patch quoted above does not have lock == null comparison anymore,
 that's why it is dangerous for HTTP env)
 
 
 In CLI ASAIK there is no concurrent situation meaning
 the problem cannot occur. However since the issue is talking about
 includes that may occur.
 
 Yes. You can still use IncludeTransformer in CLI. So deadlock can happen.
 
 
 Having a typical call from the cli gives for the env.getObjectModel():

 HashMap values:
 [null,
 [EMAIL PROTECTED],
 link-collection=[],
 [EMAIL PROTECTED],
 null, null, null, null,
 [EMAIL PROTECTED],
 null, null,
 [EMAIL PROTECTED],
 [EMAIL PROTECTED],
 null, null, null]

 So which object you would suggest to lock?

 You wrote Suitable  alternative would be to lock against top most
 command line request.

 To what you are referring with top most command line request?
 
 That would be CommandLineRequest. Following HTTP environment analogy,
 that would be CommandLineEnvironment.CLI_REQUEST_OBJECT.
 
 
 Vadim
 
 
 salu2


 Take a look at EnvironmentWrapper (which is used e.g. in SitemapSource):

 // create new object model and replace the request object
 Map oldObjectModel = env.getObjectModel();
 if (oldObjectModel instanceof HashMap) {
 this.objectModel = (Map)((HashMap)oldObjectModel).clone();
 } else {
 this.objectModel = new HashMap(oldObjectModel.size()*2);
 Iterator entries = oldObjectModel.entrySet().iterator();
 Map.Entry entry;
 while (entries.hasNext()) {
 entry = (Map.Entry)entries.next();
 this.objectModel.put(entry.getKey(), entry.getValue());
 }
 }
 this.request = new
 RequestWrapper(ObjectModelHelper.getRequest(oldObjectModel),
   requestURI,
   queryString,
   this,
   rawMode);
 this.objectModel.put(ObjectModelHelper.REQUEST_OBJECT,
 this.request);


 Vadim
 -- 
 Thorsten Scherler thorsten.at.apache.org
 Open Source Java  consulting, training and solutions

 


Re: Renaming Corona to Cocoon 3.0 and infrastructure

2008-08-18 Thread Rainer Pruy
Just another 0.01€ in the same direction:

most developing users (esp. the ones developing cocoon itself) would qualify 
as hackers.
Those are used to associate special meanings with groups of version numbers
as a number of other projects follow similar rules (e.g. Linux for long used 
that even/odd numbering scheme).

However, as Cocoon will (and should) attract non hacker users,
on a first view, what will indicate to them, that version 3.1.2 is not 
superior to 3.0.9?
(superior aka later or more mature)

While I personally am quite fine with any versioning scheme,
I do think, it is absolutely necessary to have a policy document explaining it
to accidental users. And this nearly at the same time they will detect 
something like cocoon does exist at all.

Rainer

Sylvain Wallez schrieb:
 Reinhard Pötz wrote:
 
 Versioning
 ---
 For Cocoon 2 there have been proposals that all odd versions are
 development/alpha versions and all even versions are stable releases.

 I like this idea and propose that we follow this versioning schema in
 Cocoon 3: All 3.0.x releases are marked as development versions and we
 clearly explain this on the website and the READMEs of all artifacts.

 When we believe that the community and the technology are stable, we do
 a 3.1.0 release.

 I think this is less confusing than appending alpha, beta or milestone
 postfixes.
   
 
 I would say the contrary. Let's not forget that most of our users aren't
 hard-core developers (they love Cocoon because they can do complex stuff
 without programming) and they aren't used to this odd/even versioning
 scheme that comes from the Linux kernel.
 
 Rather than that, it seems to me that most of the normal (i.e. non
 hard-core hacker) people consider a version without any beta,
 milestone or other suffix as an official stable release. A well-known
 example is Firefox that goes through a series of milestones, beta and RC
 version before releasing a stable version with the same number. Eclipse
 does the same.
 
 Also, I haven't voted for the renaming Corona to Cocoon 3.0 as I was on
 vacation, but I really think this is too early. Cocoon 2.2 is just out
 and we announce a 3.0. This will most probably lead people to consider
 2.2 as a transition to 3.0 and just not use it, and thus just look
 elsewhere. Stated clearly, I have fears that just as Maven almost killed
 the developer community for 2.2, announcing a 3.0 now will kill the user
 community.
 
 My 0.02 euros.
 
 Sylvain
 



Re: Find a new name for Corona

2008-07-30 Thread Rainer Pruy
Just my 0,02 cents...

I always considered Cocoon to mean more than pipelines, sitemap and alike
Thus I don't think using Cocoon 3.0 being an apropriate name.

What about

Cocoon Pipe  (ok, not exaktly)

or

Cocoon Bones

Rainer

Reinhard Pötz schrieb:
 Bertrand Delacretaz wrote:
 On Wed, Jul 30, 2008 at 5:28 PM, Reinhard Pötz [EMAIL PROTECTED]
 wrote:
 :-( that's bad. Any other suggestions?

 I still think that Cocoon 3.0 could be the name, if people are going
 to invest a significant effort in what's Corona today. For Sling we'd
 like to use the pipelines implementation, so some of us Sling folks
 are planning to contribute and help maintain that. I am not interested
 in the other parts at the moment.

 We already have 2.1 and 2.2 which are fairly different products,
 Cocoon 3.0 would be a lightweight embeddable thing that captures the
 essence of Cocoon in a way that's better suited to many of today's
 environments. Clearly an evolution, even though some parts will be
 missing, as those new environments provide them.
 
 I'm still not convinced that we should name it Cocoon 3.0 _now_ (quoting
 myself from a few days ago):
 
 [...] Before we make the decision if Corona should become Cocoon 3.0 we
 should learn more what other people think about it. (Currently it's only
 3 people who use it!) IMO the best way to find this out is by shipping
 alpha releases under a codename. This gives us the freedom to decide
 later without spoiling version numbers. [...]
 
 When Corona is able to attract a stable community proves itself useable
 to a wider audience, we can start to ship it as Cocoon 3.0.
 
 Or is it only me who needs to be convinced of shipping Corona as Cocoon
 3.0?
 


Re: Layered software designs

2008-03-28 Thread Rainer Pruy


Reinhard Poetz schrieb:
 Carsten Ziegeler wrote:
 The question is now if we need support for caching in the low level
 apis or if it is possible to have a layered approach - which would
 make the entry barrier much easier.
 
 Yes, this layered approach is what I'm aiming for. All the reactions in
 this thread make me think that everybody, who has commented on this
 mailing list so far (except Carsten), believes that we want to throw
 away good things that have profed to be useful in many situations.
 Rest assured, that's not the case. Carsten and I only want to break up
 this all-or-nothing situation that we (still) have now.
 
 What I want to see is a concise pipeline API that comes with only little
 overhead in terms of its learning curve and its dependencies on
 third-party software. Usually this means that we stick with standard
 APIs as much as possible - and I think this rule applies for our
 situation too.
 
 This means that the user of the API only needs to learn as little as
 possible. When he wants more, we offer additional modules that help him.
 Since he has a concrete need, the motiviation to learn something new is
 much higher than when he has to learn everything right from the beginning.
 
 If you want to learn how this whole concept *might* apply for a next
 generation Cocoon, have a look at Steven's and my Exploring Corona
 mail from last week
 (http://marc.info/?l=xml-cocoon-devm=120611990603725w=2).
 
 The idea of Corona is having a concise core that doesn't have any
 dependencies on a particular component container (Spring, OSGi, etc.),
 source resolving mechanisms or environment (http, java  only, etc.) or
 even the type of the components (XML-SAX event stream, XML-Stax event
 stream, binary streams, etc.) that are linked together in a pipeline.
 
 A simple scenario could be:
 
   Pipeline API  +  java.net.URL   +  XML-SAX components
 
 
 A more advanced scenario could consist of
 
   Pipeline API  +  Sourceresolve  +  XML-SAX components  +  Sitemap Engine
 
 
 or maybe you need the full stack that corresponds to Cocoon Core 2.2 -
 here you are:
 
   Pipeline API  +  Sourceresolve  +  HTTP-enabled  +  Sitemap Engine  + 
 Spring
XML-SAX
  componnents
 
 
 This layered approach makes Cocoon easily embeddable in any Java
 application and Cocoon's learning curve becomes more gradual.
 
 Is such a situation only appealing to Carsten, Steven and me?
 

It's appealing to me also.

However, I'm not sure I did get the layers correctly.

I did see:

Pipeline API: responsible for composing different components, introduces the 
notion of Producer/Consumer and first and last component

Sitemap API: responsible for executing pipelines

Spring:  responsible for setting up layers and identifying implementations to 
wildcard functionality
(not really a layer for itself?)

URI API (had no better term at hand):  responsible for interpreting protocol 
strings for resource access.
Currently two implementations in dicussion: URL and SourceResolver

Pipeline Components? really a layer or just implementations of Pipeline API


Can we line out the intended or existing layers?
I do feel this would help focussing the discussion.

We then can have a track reflecting actual layers, a track exploring 
interaction among layers (e.g caching, configuration...), and a
track pondering implementation aspects.

Rainer


Re: Layered software designs

2008-03-28 Thread Rainer Pruy


Reinhard Poetz schrieb:
 Dev at weitling wrote:
 But (maybe I have missed some mails) how do you want to make this
 Pipeline API?
 E.g. a SAX-based pipeline is something different than image data
 running through several filters. How do you want to prevent the use of
 a SAX-events generating component together with an image data
 transformer? What about something like it's used in clipboards: each
 component offers a list of importable and exportable formats?
 
 See http://marc.info/?l=xml-cocoon-devm=120611990603725w=2
 Do the explanations that this mail answer your question?
 

They answer a number of questions.

Nevertheless, the question of connection type is still open.

Ok, the answer given is it is up to the components to ensure compatibility.

However, what does this mean practically?
Will there be different Interfaces for different type of data to e processed.
(SAX events will use SAX interfaces, image data will use others)

Or will there be some tagging where a component be asked for a list of 
types it will be able to process?
(An image resizer will state PNG JPEG and GIF as being acceptable inputs 
for consumer side and PNG the type being produced, or
something along?) And compatibility will be assumed if a linked pair of 
producer and consumer share a common tag string?

Thus answering the type question might effect back to the API definitions...


Rainer


Re: Exploring Corona

2008-03-28 Thread Rainer Pruy
It is essential to keep the different layers straight here.

The example is somewhere at the level of the pipeline api or probably sitemap 
api implementation..
Here caching is a question of the implementation of the components.
It actually will depend on different implementations of generators, 
transformers or serializers (cache-enabled or not).

URL cache support is an issue for implementing the cache support within a 
component.
e.g. the FileGenerator might use .getLastModified() or alike methods for 
determining cache control info for its own cacheability...
Also the transformer might use such information for determining whether the 
script used is still valid.

Thus, it is not really surprising that the example will not really benefit from 
cache parameter info methods provided from URL
implementations - it's a different layer.

However, e.g. when trying to decide whether the cached result of the 
FileGenerator() *component* is still valid, it will come handy
to have information on whether the file did change in between.

Rainer

Ralph Goers schrieb:
 Consider this:
 
 URL baseUrl = new URL(file:///C:/temp/);
 Pipeline pipeline = new NonCachingPipeline();
 pipeline.addComponent(new FileGenerator(new URL(baseUrl, xyz.xml));
 pipeline.addComponent(new XSLTTransformer(new URL(baseUrl, xyz.xslt));
 pipeline.addComponent(new XMLSerializer());
 pipeline.invoke(new InvocationImpl(System.out));
 
 This simple pipeline has these potentially cacheable components;
 xyz.xml, xyz.xslt, the result of the XSLT transformation, and the final
 result of the pipeline. As it relates to the pipeline I don't see how
 the URL.getLastModified() really helps as it could apply to any of these
 items, two of which aren't even URLs.
 
 Ralph
 
 Steven Dolg wrote:


 Carsten Ziegeler schrieb:
 Steven Dolg wrote:
 How about:

 URL url = new URL(some url);
 UrlConnection connection = url.openConnection();
 connection.getLastModified();

 Not sure it this really works in all cases, but appears to be quite
 suitable and easily extensible.

 Yes, this works for many cases, but not for cases like where you have
 an expiry date etc. What do you mean by easily extensible?
 url.openConnection() actually returns a subclass of URLConnection
 depending on the protocol of the URL.
 So own protocol implementations can return own subclasses that
 implement this (and other methods) accordingly.
 And - at least theoretically - provide additional methods for handling
 specific stuff, e.g. expiration dates.

 Carsten




Re: PipelineEvents eat children

2008-02-21 Thread Rainer Pruy
I must state, I never really thought of matchers and selectors as applicable to 
non-primary components.
I think, I can imagine tons of reasons causing such extension of current 
functionality to grow into a nightmare of semantic changes
and incompatibilities.

However, this request and the discussion show that is is important with cocoon 
documentation to distinguish clearly
what is a (sitemap) component and what are sub-elements that provide to using 
/ configuring / etc. such components. As a consequence
this will lead to adding an error message to processing sitemap definitions for 
flagging whenever a top level element within a
decisional element is not a (sitemap) component.
(Reading the docs always does lead your thought in such direction, but it 
probably will help explicitly stating the difference somewhere.)

I do not see a binding reason to provide support for configuration variability 
by means of decisional sitemap elements.
However, I doubt, adding an input module will easily provide same level of 
reuse as would be available with decision semantics of
matchers/selectors. Or is there an input module that provides some generally 
available if-the-else or even switch semantics, or
actually valuation of expressions on some other input module values? (xpath or 
jexl expressions? is it in 2.2? admittedly, I never tried)

So, while I do see (and agree) with the structural cleanness of the input 
module approach,
that causes immediate need for more powerful input modules.

Rainer

Joerg Heinicke schrieb:
 On 19.02.2008 21:17, [EMAIL PROTECTED] wrote:
 
 Compare these examples:
 map:select
map:when test=first
   map:transform
  map:parameter name=choice value=first/
   /map:transform
/map:when
map:otherwise
   map:transform
  map:parameter name=choice value=other/
   /map:transform
/map:otherwise
 /map:select

 And:
 map:transform
map:select
   map:when test=first
  map:parameter name=choice value=first/
   /map:when
   map:otherwise
  map:parameter name=choice value=other/
   /map:otherwise
/map:select
 /map:transform
 
 Differentiating the elements may make sense to Cocoon devs, but is not
 obvious to Cocoon users.  The second example is obviously better code:
 shorter with decision-making closer to the effect. The differentiation
 only exists due to Cocoon storing the PipelineEvents for the second
 phase of processing.
 
 Solprovider and I already discussed this on the users mailing list [1] -
 though it seems he does not agree to my reasoning. My main point against
 this functionality is a conceptional difference: Example 1 is about
 selecting pipeline components while example 2 is about configuration.
 IMO it should not be possible to conditionally inject different sets of
 parameters.
 
 The original requirement Solprovider had was to inject a different
 parameter *value* based on the outcome of the resource exists
 selector. My argument was that the correct approach of dynamically
 evaluating a parameter value is an input module - even though he can't
 reuse the existing resource exists selector in that case. Using an
 input module would be without any repeating code in the sitemap:
 
 map:transform
   map:parameter name=choice value={exists:whatever}/
 /map:transform
 
 Additionally the input module would be reusable while the code in the
 sitemap would be that bloated whenever this functionality is needed. So
 even for maintenance reasons this approach seems to be preferable.
 
 Also compared with Spring we are consistent. Spring does not provide any
 conditionals in their configuration files. Instead they provide dynamic
 evaluation of property placeholders though - just like our input modules.
 
 That's why I'm strongly against adding this functionality to the
 sitemap.
 
 (I have held back this mail (for nearly 24 hours) so that others could
 form their own view. But it seems not too many people are interested ...)
 
 Joerg
 
 [1] http://marc.info/?t=12030050381r=1w=4
 

-- 
Rainer Pruy
Managing Director

Acrys Consult GmbH  Co. KG
Untermainkai 29-30, D-60329 Frankfurt, Germany
Phone: +49-69-244506-0 - Fax: +49-69-244506-50
Web: http://www.acrys.com -  Email: [EMAIL PROTECTED]
Registered: Frankfurt am Main, HRA 31151


Re: Rename cocoon:rcl to cocoon:wrap-block

2008-02-20 Thread Rainer Pruy
Then

cocoon:prepare

or (more verbose)

cocoon:prepare-run

does sound appropriate

Jason Johnston schrieb:
 Reinhard Poetz wrote:
 Felix Knecht wrote:
 Reinhard Poetz schrieb:

 After having seen quite a few people wonder what 'cocoon:rcl' means,
 I propose to change it to some better name.

 The general idea is that this Maven goal creates a web application
 which wraps the block and makes it runable as a 'normal' web
 application in a web container. Additionally it enables the usage of
 the reloading classloader (commons-jci) which made me name it
 'cocoon:rcl'.

 I propose to use 'cocoon:wrap-block' instead. Though it's longer I
 think it's closer to the actual meaning and hence less confusing. If
 we want to keep the name short, we could even add a shortcut
 'cocoon:wb'.

 WDOT? Other proposals?

 cocoon:run

 Actually it doesn't run the block but only creates the environment
 (i.e. a web application that wraps a block) for it.

 
 cocoon:package
 cocoon:assemble
 
 (Though package has a specific connotation in the Maven world of
 creating a jar/war/etc. ... does this goal do that as well?)


Re: New expressions' syntax

2007-08-20 Thread Rainer Pruy
Grzegorz Kossakowski schrieb:
 Rainer Pruy pisze:
 Daniel Fagerstrom schrieb:
 Grzegorz Kossakowski skrev:
 Daniel Fagerstrom pisze:
 ...

 Simply choosing {} is not a solution because there will be no smooth
 migration path for two reasons:
   a) some JX may break as proved above
   b) it's all or nothing situation, if someone (or we) decides to
 switch to new expressions their existing applications simply break

 Such radical step has its own benefits but I'm not sure if it's
 exactly what you would agree with.
 We are not forcing anyone to use the new unified ELs, we just offer
 people to do that if they feel like it. It is just a configuration
 setting.

 /Daniel

 Hmm, leaving me wonder, whether such configuration can be decided upon
 on a per block basis.
 Otherwise, if I'd choose using new EL I would be prevented from using
 blocks that stick to old world and vice-versa?
 
 I'm not sure if we have mechanism for per block configuration but I fear
 you may be right. AFAIK, main merit of Cocoon's (future) OSGi
 integration is blocks isolation.
 
 That's why I had this intuitive to enable people mix old and new syntax.
 Any thoughts?
 

Yes, OSGi might simplyfy per block configuration and thus reducing on
the problem.

OTH, I just read in the Default Expression Language thread, it might
be necessary for supporting sevaral languages in parallel.
With this, indicating the language used with a certain syntactic scope
is no longer responsibility of a (per block) configuration only.

While at xml element level, an EL can be indicated using a special
attribute, this does not help with mixed content or attributes of such
elements.

From my point of view, this does require a special syntax for
expressions/string templates. Leading to a setup where a given syntax
({}, ${},%{},etc.) can be bound to an EL by the configuration, providing
a means for compatibility with old syntax bindings.
For the future I'd prefer a syntax that allows for indicting an EL by
expression/string template. A simplified syntax could be used for a
default EL also set with the (block level) configuration.

Not having thought it to the end, I currently imagine a syntax of say
%tag{...} where tag is a (prebound) indicator of an EL and {...} can
be used for default EL. This would also provide for a trivial escaping
if there is a verbatim EL that uses the expession/template as verbatim
value. (Ok, granted, it only will work for cases where balanced {}
will occur, other cases will need a per character escape means or a way
of specifying that a complete string or expression is to be used verbatim).

Just a view stray thoughts...

Rainer Pruy


Re: New expressions' syntax

2007-08-19 Thread Rainer Pruy
Daniel Fagerstrom schrieb:
 Grzegorz Kossakowski skrev:
 Daniel Fagerstrom pisze:
 ...
 
 Simply choosing {} is not a solution because there will be no smooth
 migration path for two reasons:
   a) some JX may break as proved above
   b) it's all or nothing situation, if someone (or we) decides to
 switch to new expressions their existing applications simply break

 Such radical step has its own benefits but I'm not sure if it's
 exactly what you would agree with.
 
 We are not forcing anyone to use the new unified ELs, we just offer
 people to do that if they feel like it. It is just a configuration setting.
 
 /Daniel

Hmm, leaving me wonder, whether such configuration can be decided upon
on a per block basis.
Otherwise, if I'd choose using new EL I would be prevented from using
blocks that stick to old world and vice-versa?

Rainer Pruy