You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Daniel Fagerstrom <da...@nada.kth.se> on 2005/04/11 10:35:33 UTC
Re: svn commit: r160667 - in cocoon/whiteboard/block-deployer: src/api/org/apache/cocoon/blockdeployer/block/
src/api/org/apache/cocoon/blockdeployer/repository/ src/impl/org/apache/cocoon/blockdeployer/block/
src/impl/org/apache/cocoon/blockdeployer/repository/ test/junit/org/apache/cocoon/blockdeployer/
test/junit/org/apache/cocoon/blockdeployer/repository/ test/sample-repositories/rep1/mycompany.com/webmail/1.3.43/
test/sample-repositories/single-block-repository/
reinhard@apache.org wrote:
>Author: reinhard
>Date: Sat Apr 9 01:31:30 2005
>New Revision: 160667
>
>URL: http://svn.apache.org/viewcvs?view=rev&rev=160667
>Log:
>support for SingleBlockLocator (--> development deployment); improve exception handling; more renaming RemoteBlock --> Block; unit tests
>
>Added:
> cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/LocatorFactoryTest.java
> cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/SingleBlockLocator.java
>
>
The SingleBlockLocator should be in src/impl/ rather test/junit I assume. Now it is not found during compilation.
/Daniel
Re: Directory structure of blocks
Posted by Antonio Gallardo <ag...@agssa.net>.
On Mar, 12 de Abril de 2005, 7:17, Geoff Howard dijo:
> On Apr 12, 2005 2:33 AM, Reinhard Poetz <re...@apache.org> wrote:
>> Antonio Gallardo wrote:
>>
>> > Is posible to change the name from:
>> > block.xml -> cob.xml
>>
>> ATM everything is possible ;-)
>>
>> >
>> > I see the analogy to WEB-INF/ --> web.xml.
>> > IMHO this is to keep the same name and avoid confusions. ;-)
>> > WDYT?
>>
>> fine for me too, so we have
>>
>> --------------------------------------------------------------
>> [cocoon block] [DIR]
>> +-- COB-INF [DIR]
>> +-- cob.xml
>> +-- classes [DIR]
>> +-- lib [DIR]
>> --------------------------------------------------------------
>>
>> WDOT?
>
> I don't think the inconsistency (COB-INF -> block.xml) is a big deal.
> There is also a META-INF and it does not have a meta.xml in it.
>
> In fact, it would have the added benefit of helping people guess what
> the heck a "COB" is if they are just browsing around the FS. I think
> this argument was made before.
Well, the same apply for COB-INF name. ;-)
META-INF --> MANIFEST.MF are inside jars and it exists before the WEB-INF
--> web.xml relationship. To me, this means Sun did a mistake in java and
fixed it in servlets.
Best Regards,
Antonio Gallardo
Re: Directory structure of blocks
Posted by Stefano Mazzocchi <st...@apache.org>.
Geoff Howard wrote:
> On Apr 12, 2005 2:33 AM, Reinhard Poetz <re...@apache.org> wrote:
>
>>Antonio Gallardo wrote:
>>
>>
>>>Is posible to change the name from:
>>>block.xml -> cob.xml
>>
>>ATM everything is possible ;-)
>>
>>
>>>I see the analogy to WEB-INF/ --> web.xml.
>>>IMHO this is to keep the same name and avoid confusions. ;-)
>>>WDYT?
>>
>>fine for me too, so we have
>>
>>--------------------------------------------------------------
>>[cocoon block] [DIR]
>> +-- COB-INF [DIR]
>> +-- cob.xml
>> +-- classes [DIR]
>> +-- lib [DIR]
>>--------------------------------------------------------------
>>
>>WDOT?
>
>
> I don't think the inconsistency (COB-INF -> block.xml) is a big deal.
> There is also a META-INF and it does not have a meta.xml in it.
>
> In fact, it would have the added benefit of helping people guess what
> the heck a "COB" is if they are just browsing around the FS. I think
> this argument was made before.
agreed. I like block.xml better.
--
Stefano.
Re: Directory structure of blocks
Posted by Geoff Howard <ge...@gmail.com>.
On Apr 12, 2005 2:33 AM, Reinhard Poetz <re...@apache.org> wrote:
> Antonio Gallardo wrote:
>
> > Is posible to change the name from:
> > block.xml -> cob.xml
>
> ATM everything is possible ;-)
>
> >
> > I see the analogy to WEB-INF/ --> web.xml.
> > IMHO this is to keep the same name and avoid confusions. ;-)
> > WDYT?
>
> fine for me too, so we have
>
> --------------------------------------------------------------
> [cocoon block] [DIR]
> +-- COB-INF [DIR]
> +-- cob.xml
> +-- classes [DIR]
> +-- lib [DIR]
> --------------------------------------------------------------
>
> WDOT?
I don't think the inconsistency (COB-INF -> block.xml) is a big deal.
There is also a META-INF and it does not have a meta.xml in it.
In fact, it would have the added benefit of helping people guess what
the heck a "COB" is if they are just browsing around the FS. I think
this argument was made before.
Geoff
Re: Directory structure of blocks
Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 12 avr. 05, à 08:33, Reinhard Poetz a écrit :
> ...
> --------------------------------------------------------------
> [cocoon block] [DIR]
> +-- COB-INF [DIR]
> +-- cob.xml
> +-- classes [DIR]
> +-- lib [DIR]
> --------------------------------------------------------------
+1, sounds logical to have cob.xml if it's COB-INF.
-Bertrand
Re: Directory structure of blocks
Posted by Reinhard Poetz <re...@apache.org>.
Antonio Gallardo wrote:
> Is posible to change the name from:
>
> block.xml -> cob.xml
ATM everything is possible ;-)
>
> I see the analogy to WEB-INF/ --> web.xml.
>
> IMHO this is to keep the same name and avoid confusions. ;-)
>
> WDYT?
fine for me too, so we have
--------------------------------------------------------------
[cocoon block] [DIR]
+-- COB-INF [DIR]
+-- cob.xml
+-- classes [DIR]
+-- lib [DIR]
--------------------------------------------------------------
WDOT?
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Directory structure of blocks
Posted by Antonio Gallardo <ag...@agssa.net>.
On Mar, 12 de Abril de 2005, 0:59, Reinhard Poetz dijo:
> Geoff Howard wrote:
>> On Apr 11, 2005 4:57 PM, Vadim Gritsenko <va...@reverycodes.com> wrote:
>>
>>>Reinhard Poetz wrote:
>>>
>>>>I don't know why we named it "COB-INF" but there was (still is?) a good
>>>>reason for this because I remember some long discussion.
>>>
>>>IIRC, reason was to avoid conflict with avalon/phoenix/somesuch
>>>BLOCK-INF/block.xml, hence COB (Cocoon Block).
>>
>>
>> Yes. See [1] and [2] (first post got "orphaned" from the rest of the
>> thread in the archive)
>>
>> Also, I assume you've seen [3]?
>>
>> - Geoff
>>
>> 1 http://marc.theaimsgroup.com/?t=106510643100003&r=1&w=2
>> 2 http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=106510548208709&w=2
>> 3 http://wiki.apache.org/cocoon/BlocksFSLayout
>>
>
> Thanks Geoff and Vadim
>
> as we already had a vote, we should respect the result and have following
> intra-block file-system structure:
>
> --------------------------------------------------------------
> [cocoon block] [DIR]
> |
> +-- COB-INF [DIR]
> +-- block.xml
> +-- classes [DIR]
> +-- lib [DIR]
> --------------------------------------------------------------
Is posible to change the name from:
block.xml -> cob.xml
I see the analogy to WEB-INF/ --> web.xml.
IMHO this is to keep the same name and avoid confusions. ;-)
WDYT?
Best Regards,
Antonio Gallardo
Re: Directory structure of blocks
Posted by Ralph Goers <Ra...@dslextreme.com>.
Reinhard Poetz wrote:
> Ralph Goers wrote:
>
>> Reinhard Poetz wrote:
>>
>>>
>>> Thanks Geoff and Vadim
>>>
>>> as we already had a vote, we should respect the result and have
>>> following intra-block file-system structure:
>>>
>>> --------------------------------------------------------------
>>> [cocoon block] [DIR]
>>> |
>>> +-- COB-INF [DIR]
>>> +-- block.xml
>>> +-- classes [DIR]
>>> +-- lib [DIR]
>>> --------------------------------------------------------------
>>
>>
>>
>> Question. What else is in a block that requires that COB-INF exist
>> at all? Why can't it just be:
>> [cocoon block] [DIR]
>> +--block.xml
>> +--classes [DIR]
>> +--lib [DIR]
>>
>> Ralph
>>
>
> IMO its as usefull/useless as WEB-INF for web archives.
>
So why have it?
Re: Directory structure of blocks
Posted by Upayavira <uv...@upaya.co.uk>.
Reinhard Poetz wrote:
> Ralph Goers wrote:
>> Question. What else is in a block that requires that COB-INF exist at
>> all? Why can't it just be:
>> [cocoon block] [DIR]
>> +--block.xml
>> +--classes [DIR]
>> +--lib [DIR]
>>
>> Ralph
>>
>
> IMO its as usefull/useless as WEB-INF for web archives.
Presumably the case for putting such stuff in COB-INF is that it will
not be accessible via a sitemap, and thus increases security a bit? That
presumably is the argument behind WEB-INF.
Regards, Upayavira
Re: Directory structure of blocks
Posted by Reinhard Poetz <re...@apache.org>.
Ralph Goers wrote:
> Reinhard Poetz wrote:
>
>>
>> Thanks Geoff and Vadim
>>
>> as we already had a vote, we should respect the result and have
>> following intra-block file-system structure:
>>
>> --------------------------------------------------------------
>> [cocoon block] [DIR]
>> |
>> +-- COB-INF [DIR]
>> +-- block.xml
>> +-- classes [DIR]
>> +-- lib [DIR]
>> --------------------------------------------------------------
>
>
> Question. What else is in a block that requires that COB-INF exist at
> all? Why can't it just be:
> [cocoon block] [DIR]
> +--block.xml
> +--classes [DIR]
> +--lib [DIR]
>
> Ralph
>
IMO its as usefull/useless as WEB-INF for web archives.
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Directory structure of blocks
Posted by Stefano Mazzocchi <st...@apache.org>.
Ralph Goers wrote:
> Reinhard Poetz wrote:
>
>>
>> Thanks Geoff and Vadim
>>
>> as we already had a vote, we should respect the result and have
>> following intra-block file-system structure:
>>
>> --------------------------------------------------------------
>> [cocoon block] [DIR]
>> |
>> +-- COB-INF [DIR]
>> +-- block.xml
>> +-- classes [DIR]
>> +-- lib [DIR]
>> --------------------------------------------------------------
>
>
> Question. What else is in a block that requires that COB-INF exist at
> all? Why can't it just be:
> [cocoon block] [DIR]
> +--block.xml
> +--classes [DIR]
> +--lib [DIR]
security and folder namespacing. just like for webapps, those folders
contain potentially sensitive information (the executable code), it's
easier to state that any path that contains "COB-INF" being read only,
so, even if you had weird bugs, you could prevent people to inject their
malicious code in there.
True, the sitemap is already a big step in preventing this, but having a
rurther isolation doesn't hurt and also is a recognized thing for
webapps and people will feel at ease with the separation between "stuff"
and "code".
--
Stefano.
Re: Directory structure of blocks
Posted by Ralph Goers <Ra...@dslextreme.com>.
Reinhard Poetz wrote:
>
> Thanks Geoff and Vadim
>
> as we already had a vote, we should respect the result and have
> following intra-block file-system structure:
>
> --------------------------------------------------------------
> [cocoon block] [DIR]
> |
> +-- COB-INF [DIR]
> +-- block.xml
> +-- classes [DIR]
> +-- lib [DIR]
> --------------------------------------------------------------
Question. What else is in a block that requires that COB-INF exist at
all? Why can't it just be:
[cocoon block] [DIR]
+--block.xml
+--classes [DIR]
+--lib [DIR]
Ralph
Re: Directory structure of blocks
Posted by Reinhard Poetz <re...@apache.org>.
Geoff Howard wrote:
> On Apr 11, 2005 4:57 PM, Vadim Gritsenko <va...@reverycodes.com> wrote:
>
>>Reinhard Poetz wrote:
>>
>>>I don't know why we named it "COB-INF" but there was (still is?) a good
>>>reason for this because I remember some long discussion.
>>
>>IIRC, reason was to avoid conflict with avalon/phoenix/somesuch
>>BLOCK-INF/block.xml, hence COB (Cocoon Block).
>
>
> Yes. See [1] and [2] (first post got "orphaned" from the rest of the
> thread in the archive)
>
> Also, I assume you've seen [3]?
>
> - Geoff
>
> 1 http://marc.theaimsgroup.com/?t=106510643100003&r=1&w=2
> 2 http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=106510548208709&w=2
> 3 http://wiki.apache.org/cocoon/BlocksFSLayout
>
Thanks Geoff and Vadim
as we already had a vote, we should respect the result and have following
intra-block file-system structure:
--------------------------------------------------------------
[cocoon block] [DIR]
|
+-- COB-INF [DIR]
+-- block.xml
+-- classes [DIR]
+-- lib [DIR]
--------------------------------------------------------------
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Directory structure of blocks
Posted by Geoff Howard <ge...@gmail.com>.
On Apr 11, 2005 4:57 PM, Vadim Gritsenko <va...@reverycodes.com> wrote:
> Reinhard Poetz wrote:
> >
> > I don't know why we named it "COB-INF" but there was (still is?) a good
> > reason for this because I remember some long discussion.
>
> IIRC, reason was to avoid conflict with avalon/phoenix/somesuch
> BLOCK-INF/block.xml, hence COB (Cocoon Block).
Yes. See [1] and [2] (first post got "orphaned" from the rest of the
thread in the archive)
Also, I assume you've seen [3]?
- Geoff
1 http://marc.theaimsgroup.com/?t=106510643100003&r=1&w=2
2 http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=106510548208709&w=2
3 http://wiki.apache.org/cocoon/BlocksFSLayout
Re: Directory structure of blocks
Posted by Vadim Gritsenko <va...@reverycodes.com>.
Reinhard Poetz wrote:
>
> I don't know why we named it "COB-INF" but there was (still is?) a good
> reason for this because I remember some long discussion.
IIRC, reason was to avoid conflict with avalon/phoenix/somesuch
BLOCK-INF/block.xml, hence COB (Cocoon Block).
Vadim
Re: Directory structure of blocks
Posted by Reinhard Poetz <re...@apache.org>.
Pier Fumagalli wrote:
>> --------------------------------------------------------------
>> [cocoon block] [DIR]
>> |
>> +-- BLOCK-INF [DIR]
>> +-- block.xml
>> +-- classes [DIR]
>> +-- lib [DIR]
>> --------------------------------------------------------------
>>
>> WDYT?
>
>
> Again, to sound stupid, but why in the world a cocoon block would
> contain classes and libraries? Those should be external "components"
> _required_ by the block, right???
???
<quote wiki="http://wiki.apache.org/cocoon/BlocksDefinition">
[...]
Accessing components
The block.xml descriptor includes the list of components which are exposed and
made available by the block.
Blocks that depend on this block use the component role (as they normally did
with block-less cocoon) and the component manager will load the appropriate
component. Everything is done by the component manager and the block manager
thru block.xml and wiring information.
[...]
</quote>
In the meantime it's not the block descriptor anymore, that has the list of
Avalon components which are exposed, but the block's root sitemap. (Here we need
some more work what we do with alternative IoC implementations like Spring but
this is one of the topics that should be discussed after we have a working
implementation.)
So a (maybe stupid) answer to your question: In order to provide components (in
Java) we need Java binaries that contain them, either classes or libraries ...
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Directory structure of blocks
Posted by Ralph Goers <Ra...@dslextreme.com>.
Pier Fumagalli wrote:
> Absolutely we do, but not in the very first phase of blocks. Blocks,
> in my view, addess separate concerns from the classes they require for
> the implementation of the virtual sitemap components that they expose
> to other blocks.
>
> At the beginning, and that's what we agreed a couple of months ago, we
> completely disregard all those classloading issues by implementing the
> block paradigms without touching those, as those concerns will have to
> be addressed by the component manager underlying the whole systems.
>
> But re-adding libraries and classes into the pictures, tells us that
> we do _now_ have to think about the class-loading issues, and multiple
> versions of same interfaces, multiple versions of classes and so on...
>
> Making the whole process a load more complicated from the outset, and
> when (IMVHO) class-loading and cocoon block deployments are two
> completely separate concerns...
>
> Pier
I'm having trouble understanding what you are proposing. If I
understand you, you don't want components in the block. So where do the
components reside? In the cocoon core?
Can you explain this in relation to the portal block? From what you are
saying I'm not sure there would even be a portal block.
Re: Directory structure of blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 13 Apr 2005, at 14:14, Carsten Ziegeler wrote:
> Pier Fumagalli wrote:
>
>>
>> <SNIP/>
>>
>> If on the other hand we separate entirely components and java code
>> from
>> blocks, the implementation becomes _much_ more easy...
>>
>> My idea would be that a block (for example, our ForrestSkin
>> implementation) _requires_ a component (not a block) that performs
>> XSLT
>> transformations.
>>
>> Requiring this, it will expose (for example) a "Virtual Transformer"
>> called "document2html" which will be implemented as XSLT Transformer +
>> document2html.xslt.
>>
>> Another skin for forrest could (at the same time), implement the same
>> interface and provide the same "document2html" transformer by
>> requiring
>> the STX transformer and "joining it up" with "document2html.stx".
>>
>> From outside, the two blocks _both_ provide a transformer, which does
>> exactly the same job, but rely on the component manager underneath to
>> solve the class loading problem of providing a component with a given
>> role, add their value to it (the XSLT, STX, ... stylesheet) and expose
>> it to the users of the implemented interface.
>>
>> And this frees up the blocks implementation from the underlying
>> component management, java, class loaders and so on... I feel this a
>> lot more cleaner in terms of separating the concerns of cocoon and
>> blocks versus the concerns of the Java platform and its classloading
>> cumbersomeness...
>>
> Where do the components life and where are they defined?
>
> I'm not sure if I totally understood everything discusses so far, but
> imho we need some versioning: we recently had the following problem. In
> a cocoon application we used Hibernate that requires the version 1.4.x
> of the asm jar file. With Cocoon 2.1.7 we ship version 1.5.x which
> causes some method not found exceptions inside hibernate :( Ok, now we
> could lean back and blame the developers of asm creating incompatible
> versions, but I think this is a general issue. What if one component
> requires version 2.x of a third party lib while another one requires a
> 1.x version. Etc.
> Fortunately, we could solve this problem in our solution by just using
> asm 1.4.x as we don't need the BSF block.
>
> Ok, long story, short question: do we plan to support such scenaries
> with real blocks? I really hope so :)
Absolutely we do, but not in the very first phase of blocks. Blocks, in
my view, addess separate concerns from the classes they require for the
implementation of the virtual sitemap components that they expose to
other blocks.
At the beginning, and that's what we agreed a couple of months ago, we
completely disregard all those classloading issues by implementing the
block paradigms without touching those, as those concerns will have to
be addressed by the component manager underlying the whole systems.
But re-adding libraries and classes into the pictures, tells us that we
do _now_ have to think about the class-loading issues, and multiple
versions of same interfaces, multiple versions of classes and so on...
Making the whole process a load more complicated from the outset, and
when (IMVHO) class-loading and cocoon block deployments are two
completely separate concerns...
Pier
Re: Directory structure of blocks
Posted by Carsten Ziegeler <cz...@apache.org>.
Reinhard Poetz wrote:
>
> Have you tried integrating Hibernate with 2.2 using the new sitemap classloader?
>
Hmm, no as we are using 2.1.7 we didn't try it. But yes, that should
have solved the problem as well - at least in theory.
Carsten
--
Carsten Ziegeler - Open Source Group, S&N AG
http://www.s-und-n.de
http://www.osoco.org/weblogs/rael/
Re: Directory structure of blocks
Posted by Reinhard Poetz <re...@apache.org>.
Carsten Ziegeler wrote:
> Pier Fumagalli wrote:
>
>
>><SNIP/>
>>
>>If on the other hand we separate entirely components and java code from
>>blocks, the implementation becomes _much_ more easy...
>>
>>My idea would be that a block (for example, our ForrestSkin
>>implementation) _requires_ a component (not a block) that performs XSLT
>>transformations.
>>
>>Requiring this, it will expose (for example) a "Virtual Transformer"
>>called "document2html" which will be implemented as XSLT Transformer +
>>document2html.xslt.
>>
>>Another skin for forrest could (at the same time), implement the same
>>interface and provide the same "document2html" transformer by requiring
>>the STX transformer and "joining it up" with "document2html.stx".
>>
>> From outside, the two blocks _both_ provide a transformer, which does
>>exactly the same job, but rely on the component manager underneath to
>>solve the class loading problem of providing a component with a given
>>role, add their value to it (the XSLT, STX, ... stylesheet) and expose
>>it to the users of the implemented interface.
>>
>>And this frees up the blocks implementation from the underlying
>>component management, java, class loaders and so on... I feel this a
>>lot more cleaner in terms of separating the concerns of cocoon and
>>blocks versus the concerns of the Java platform and its classloading
>>cumbersomeness...
>>
>
> Where do the components life and where are they defined?
>
> I'm not sure if I totally understood everything discusses so far, but
> imho we need some versioning: we recently had the following problem. In
> a cocoon application we used Hibernate that requires the version 1.4.x
> of the asm jar file. With Cocoon 2.1.7 we ship version 1.5.x which
> causes some method not found exceptions inside hibernate :( Ok, now we
> could lean back and blame the developers of asm creating incompatible
> versions, but I think this is a general issue. What if one component
> requires version 2.x of a third party lib while another one requires a
> 1.x version. Etc.
> Fortunately, we could solve this problem in our solution by just using
> asm 1.4.x as we don't need the BSF block.
>
> Ok, long story, short question: do we plan to support such scenaries
> with real blocks? I really hope so :)
Have you tried integrating Hibernate with 2.2 using the new sitemap classloader?
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Directory structure of blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 13 Apr 2005, at 15:07, Vadim Gritsenko wrote:
> Carsten Ziegeler wrote:
>> Pier Fumagalli wrote:
>>> classloading cumbersomeness...
>
> (probably you meant flexibility here? ;-P)
>
> <snip/>
>
>> Ok, long story, short question: do we plan to support such scenaries
>> with real blocks? I really hope so :)
>
> As Pier outlined in snipped parts above, it's achievable goal. We
> would have to build blocks hierarchy, and corresponding classloader
> hierarchy. Interface blocks are going to be loaded by parent
> classloader, while implementation block(s) and consumer block(s) will
> have own child classloaders.
>
> This gives level of isolation necessary to run different version of
> hybernate (or what have you) within same Cocoon core.
>
> Just a thought... If we allow consumer block's classloader to have
> multiple parents, which are classloaders of all interface blocks, then
> this will free us up from building block hierarchies.
Correct, but if right now you take out components, classes and
libraries out of the blocks, and start thinking about blocks as
providers of VIRTUAL components (Xalan library + XSLT, I18N Library +
catalog.xml), where the java components are required by the block, and
exposed as a virtual component to other blocks, we simplify the whole
lot.
And separating the two concerns of loading up the libraries in an order
that makes sense (and is usable), versus loading blocks and deploying
them simplifies the whole trick.
Let's assume that we have two interfaces: the ForrestSkin interface. It
"provides" to its users a "Document2HTML" transformer.
In ForrestSkin version 1 requires something that transforms DocumentV1
to HTML, and ForrestSkin version 2 requires something that transforms
DocumentV2 to HTML, we can have right now, without thinking about
classes, two blocks, both requiring the XSLT component (Java, but it's
the same instance, no versioning issues), one associating it with
document2htmlv1.xsl and one associating it with document2htmlv2.xsl.
And we live the much more cumbersome work of loading the XSLT
Java-based transformer to ECM+++/Kernel/Spring/Pico/YouNameIt, once we
start seeing what are the JAva requirements that the block deployment
forces on to the underlying machinery.
Pier
Re: Directory structure of blocks
Posted by Vadim Gritsenko <va...@reverycodes.com>.
Carsten Ziegeler wrote:
> Pier Fumagalli wrote:
>
>>classloading cumbersomeness...
(probably you meant flexibility here? ;-P)
<snip/>
> Ok, long story, short question: do we plan to support such scenaries
> with real blocks? I really hope so :)
As Pier outlined in snipped parts above, it's achievable goal. We would have to
build blocks hierarchy, and corresponding classloader hierarchy. Interface
blocks are going to be loaded by parent classloader, while implementation
block(s) and consumer block(s) will have own child classloaders.
This gives level of isolation necessary to run different version of hybernate
(or what have you) within same Cocoon core.
Just a thought... If we allow consumer block's classloader to have multiple
parents, which are classloaders of all interface blocks, then this will free us
up from building block hierarchies.
Vadim
Re: Directory structure of blocks
Posted by Carsten Ziegeler <cz...@apache.org>.
Pier Fumagalli wrote:
>
> <SNIP/>
>
> If on the other hand we separate entirely components and java code from
> blocks, the implementation becomes _much_ more easy...
>
> My idea would be that a block (for example, our ForrestSkin
> implementation) _requires_ a component (not a block) that performs XSLT
> transformations.
>
> Requiring this, it will expose (for example) a "Virtual Transformer"
> called "document2html" which will be implemented as XSLT Transformer +
> document2html.xslt.
>
> Another skin for forrest could (at the same time), implement the same
> interface and provide the same "document2html" transformer by requiring
> the STX transformer and "joining it up" with "document2html.stx".
>
> From outside, the two blocks _both_ provide a transformer, which does
> exactly the same job, but rely on the component manager underneath to
> solve the class loading problem of providing a component with a given
> role, add their value to it (the XSLT, STX, ... stylesheet) and expose
> it to the users of the implemented interface.
>
> And this frees up the blocks implementation from the underlying
> component management, java, class loaders and so on... I feel this a
> lot more cleaner in terms of separating the concerns of cocoon and
> blocks versus the concerns of the Java platform and its classloading
> cumbersomeness...
>
Where do the components life and where are they defined?
I'm not sure if I totally understood everything discusses so far, but
imho we need some versioning: we recently had the following problem. In
a cocoon application we used Hibernate that requires the version 1.4.x
of the asm jar file. With Cocoon 2.1.7 we ship version 1.5.x which
causes some method not found exceptions inside hibernate :( Ok, now we
could lean back and blame the developers of asm creating incompatible
versions, but I think this is a general issue. What if one component
requires version 2.x of a third party lib while another one requires a
1.x version. Etc.
Fortunately, we could solve this problem in our solution by just using
asm 1.4.x as we don't need the BSF block.
Ok, long story, short question: do we plan to support such scenaries
with real blocks? I really hope so :)
Carsten
--
Carsten Ziegeler - Open Source Group, S&N AG
http://www.s-und-n.de
http://www.osoco.org/weblogs/rael/
Re: Java components in blocks
Posted by Ralph Goers <Ra...@dslextreme.com>.
Stefano Mazzocchi wrote:
>
> I had the same reaction at first, and then it accurred to me that if
> we went down the path of having optional code and optional sitemap in
> blocks, not only people are likely to keep them separate (ending up
> with 'sitemap blocks' and 'code blocks') but that would force us to
> reinvent the maven wheel for code blocks.
>
> I'm not actually 100% of how this separation is going to work in real
> life, but I'm willing to sit back and watch how far along we can go
> while keeping things separate, because making them unified I fear was
> one of the reasons why blocks have been so hard of a problem to attack.
>
> At the end, we might end up understanding that we need to reinvent the
> maven wheel, but I really hope not.
>
> So, I suggest you to follow me in being a little more hopeful about
> it, sit back and watch the show and just trust the community in its
> collective wisdom.
What do you mean by "reinvent the maven wheel"? If my boss ever lets me
have some time to work on Cocoon, one of the first things I'd like to do
is to try to introduce maven into the Cocoon build. IMO, this has
needed to happen for quite a while regardless of what happens with
blocks. We've been "reinventing" maven for far too long.
I'm not trying to get in the way. It is just that my company will be
using the Cocoon Portal to manage the layout of all our products. I
really like the block concept, but if I can't apply it to the portal I
just don't see the value of it. The Portal block is primarily a bunch
of components - many of which are not sitemap components. They would
actually need to be provided, or packaged in, the Portal block, but
configured by the block that implements the application. In addition, it
would make sense to have individual portlets packaged in their own
blocks. These could be JSR-168 portlets, which can contain JSPs and/or
Java code, or they could be Cocoon Portlets - which are primarily sitemaps.
In short, "real blocks" could be a huge win for dealing with the Cocoon
Portal, if they have the needed support.
Ralph
Re: Java components in blocks
Posted by Stefano Mazzocchi <st...@apache.org>.
Ralph Goers wrote:
> Daniel Fagerstrom wrote:
>
>>
>> For the portal block, which I still don't know that much about, I
>> would assume that it would become a number of components with some
>> kind of dependency description for each and a block with sitemap
>> functionality and a list on what components it depend on.
>>
>> Hopefully Pier can tell more about his ideas about component handling.
>> My main interest is the sitemap part of the equation.
>>
>> /Daniel
>
>
> Hmmm. If blocks go down the path of only supporting sitemaps then I
> guess I'm not too interested, since none of the stuff I care about fits
> into that.
I had the same reaction at first, and then it accurred to me that if we
went down the path of having optional code and optional sitemap in
blocks, not only people are likely to keep them separate (ending up with
'sitemap blocks' and 'code blocks') but that would force us to reinvent
the maven wheel for code blocks.
I'm not actually 100% of how this separation is going to work in real
life, but I'm willing to sit back and watch how far along we can go
while keeping things separate, because making them unified I fear was
one of the reasons why blocks have been so hard of a problem to attack.
At the end, we might end up understanding that we need to reinvent the
maven wheel, but I really hope not.
So, I suggest you to follow me in being a little more hopeful about it,
sit back and watch the show and just trust the community in its
collective wisdom.
--
Stefano.
Re: Java components in blocks
Posted by Ralph Goers <Ra...@dslextreme.com>.
Daniel Fagerstrom wrote:
>
> For the portal block, which I still don't know that much about, I
> would assume that it would become a number of components with some
> kind of dependency description for each and a block with sitemap
> functionality and a list on what components it depend on.
>
> Hopefully Pier can tell more about his ideas about component handling.
> My main interest is the sitemap part of the equation.
>
> /Daniel
Hmmm. If blocks go down the path of only supporting sitemaps then I
guess I'm not too interested, since none of the stuff I care about fits
into that.
Ralph
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Ralph Goers wrote:
> Stefano Mazzocchi wrote:
>
>> Pier Fumagalli wrote:
>>
>>>> IMO, we should start simple and add functionality when needed.
>>>> Remove things is much harder. Also even if we chose to go for
>>>> alternative 4. an important message from Pier that we should take
>>>> into account is that component exposure adds complexity. So if we
>>>> go that way, we should have mechanisms that so that we can have
>>>> detailed control over what components and classes a block exposes.
>>>> A block that exposes much will be much more likely to create
>>>> conflicts with other blocks.
>>>
>>> Glad that we have agreement on this! :-D
>>
>> Ok, you changed my mind. Let's keep the concerns separate and see
>> what happens.
>
>
> Frankly, I'd love to see how this will even work. If someone could
> explain how the cron block can be a block without exposing components
> then maybe I could understand.
The cron block seem to consist of a number of components and no sitemap
functionality so it would, at least in the first step not be a block at
all. Pier's idea IIUC is to have a possibly Maven driven automatic
instalation and dependency resolution of components. A block, which at a
start is mainly about sitemap functionallity, would declare what
components it depend on.
A big advantage with this approach is that we can start working on
better component handling, (class loader isolation, automatic download
and automatic dependency resolution), independently from the blocks and
hopefully reuse some proven external technology for components.
At a later stage when we have got some experience from the more advanced
component handling and the block system we *might* want to integrate
them according to the original plan. But then we will know much more
about the concequnces.
> I really want to understand how this could apply to the portal
> block, but the cron block is a lot simpler.
For the portal block, which I still don't know that much about, I would
assume that it would become a number of components with some kind of
dependency description for each and a block with sitemap functionality
and a list on what components it depend on.
Hopefully Pier can tell more about his ideas about component handling.
My main interest is the sitemap part of the equation.
/Daniel
Re: Java components in blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 16 Apr 2005, at 12:43, Torsten Curdt wrote:
>> Reading these discussions after the fact, having Blocks provide only
>> sitemap components seems to make a lot of sense
>
> ...not to me - sorry. But maybe I just missed something.
>
> Pier is totally right: we have two different concerns.
> One is the pipeline services interface and one is the
> component interface of a block.
>
> But reducing a block just to it's pipeline services basically
> gives us virtual sitemap components on steroids. What about
> its dependencies? Well, IIUC one argument in this discussion
> was that the dependency will be satisfied through a pipeline
> service - not through a component.
>
>
> Block A:
> provides: a pipeline service to transform xml
> requires: a pipeline service to transform xml with a STX stylesheet
>
> Block B:
> provides: a pipeline service to transform xml with a STX stylesheet
Hmm... As far as I can see, intra-block dependancy is "available" only
through interface blocks, right?
So, the "Forrest" block, requires the "ForrestSkin" interface, and this
is injected into it by creating a new "instance" of the "CocoonSkin" (a
block which implements ForrestSkin).
So, now we end up with a problem: if to provide the pipeline service to
transform XML, my "CocoonSkin" uses an XSLT, this block will depend on
the "XSLTTransformer", if it uses STX it will depend on the
"STXTransformer", if it uses XSLT2.0 and XQUERY I might want to use
"SaxonTransformer" version 8.0 or greater...
You see that if a block needs to specify its COMPONENT requirements
(not BLOCK requirements) only through interface, we'll end up having
one interface block probably per each implementation block...
Mess...
If we separate blocks and components, at this point, we can carve into
stone that block requirements _must_ go through interfaces, components,
actually are a completely different beast. A block exposing a PDF
serializer for "BOOK.DTD" documents might require specifically a
version of FOP, because its stylesheet works around some bugs into that
particular implementation...
Pier
Re: Java components in blocks
Posted by Glen Ezkovich <gl...@hard-bop.com>.
On Apr 22, 2005, at 8:34 AM, Daniel Fagerstrom wrote:
>
> Pier allready have problems with this, that is one reason for his
> interest in this area. I have also have had problems with it from time
> to time.
I have as well.
>
> So, I don't want to left it as a desicion to the blocks developers as
> it just don't scale. What Pier and I have suggested might be somewhat
> less powerfull, (but that is left to see), but it does scale. I don't
> want us to start with a contract with blocks developers that we have
> to restrict later, it is better to do it the other way around.
I basically agree. On the other hand, I'm not sure this is a
preventable problem. Once you have two or more apps depending on a
single jar, you have a choice of either to deploy multiple copies or to
put the jar in a central location.
>>
>> How so? What is the alternative? Have blocks that have no component
>> dependencies? If a block depends on a component it depends on a
>> component. If a sitemap uses a component it uses a component.
>
> Of course a block should be allowed to depend on and contain
> components, no one have said anything else. The discussion is about if
> a block should be able to expose any type of component to other
> blocks.
>
Maybe, I didn't express myself well. This is what I think is a
non-issue. I think it is a mistake to make it the block manager's
responsibility to do this simply because of the way Java works.
> I understand that you want two deployment levels. I don't want a
> global unshielded level as I'm certain that it doesn't scale.
You're right it doesn't. Personally,I would prefer just a single level,
but I get enough complaints about multiple copies of jars that I think
some alternative is necessary. The multiple dependencies of blocks
gives us few if any alternatives.
>
>> Initially, to have the choice of deploying Cocoon wide or sitemap
>> wide solves some basic issues. The ultimate solution is much more
>> difficult because of the multiple dependencies a block may have. It
>> may be that it is impossible to solve all possible scenarios. I don't
>> know.
>
> I think it would be possible to solve, but personally I don't find it
> worthwhile right now.
OK. Your point is well taken, If I can find the time I will see what I
can do. Lets just see what happens. I'm sure in the end all will be
fine.
Glen Ezkovich
HardBop Consulting
glen at hard-bop.com
A Proverb for Paranoids:
"If they can get you asking the wrong questions, they don't have to
worry about answers."
- Thomas Pynchon Gravity's Rainbow
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Glen Ezkovich wrote:
> On Apr 18, 2005, at 12:07 PM, Daniel Fagerstrom wrote:
>
>> Glen Ezkovich wrote:
>>
>>> On Apr 18, 2005, at 7:05 AM, Daniel Fagerstrom wrote:
>>
<snip/>
>>> The issue here is one of deployment, where to locate the class and
>>> which ClassLoader will load the class. It seems to me that if we
>>> have two component deployment levels, global and sitemap, we can
>>> pretty much accomplish the same thing as exposing or not exposing
>>> components.
>>
>>
>> If all jars from all blocks are put in a global sitemap it just don't
>> scale. It is hard enough to keep jars in different blocks in synch
>> whithin the Cocoon SVN. When external developers start to develop and
>> distribute their own blocks it will stop working.
>
>
> Agreed. Certain jars should be available cocoon wide and others not.
> Unfortunately, this must be left up to the blocks developer to decide
> how a particular jar gets deployed. Just as it is now.
One of the points with real blocks is to scale the community by make it
possible for people to develop Cocoon blocks independent of ASF and the
current set of committers and without central control. If these external
block developers can put jars in an common unshielded area in Cocoon we
will get the situation where they put different vesrions of the same jar
in this common area. Sy that you have a system that depends on block A
and block B developed by different external organizations. When you
update Cocoon or block A or block B you suddenly realized that the last
version have started to export a jar that it didn't exported before and
that allready was exported from one of the other blocks in another version.
Pier allready have problems with this, that is one reason for his
interest in this area. I have also have had problems with it from time
to time.
So, I don't want to left it as a desicion to the blocks developers as it
just don't scale. What Pier and I have suggested might be somewhat less
powerfull, (but that is left to see), but it does scale. I don't want us
to start with a contract with blocks developers that we have to restrict
later, it is better to do it the other way around.
>> Because of that classloader isolation is needed so that a block only
>> is exposed to the classes it actually depend on from its parent
>> classloader. And that is complicated stuff, if you don't think so you
>> can take a look at kernel in whiteboard.
>
> I know so. I didn't say it would be easy.
And I have no personal interest in solving that problem right now. If
someone else has, just go ahead, as long as you don't introduce concepts
that we allready know that they doesn't scale.
>> Things get more complicated and creates IMO unnecessary dependencies
>> between blocks when you combine it with sitemap functionallity.
>
>
> How so? What is the alternative? Have blocks that have no component
> dependencies? If a block depends on a component it depends on a
> component. If a sitemap uses a component it uses a component.
Of course a block should be allowed to depend on and contain components,
no one have said anything else. The discussion is about if a block
should be able to expose any type of component to other blocks.
>> Because of that complexity Pier and I prefer to separate the problems.
>
>
> If you separate the problems thats fine with me, but to consider this
> a complete solution to the total problem which is to have real blocks
> is a mistake. When I deploy an app, I usually have a custom component
> or two and a bunch of POJOs. If I want to package an app as a block I
> would need to package the sitemap and associated files as a block and
> package the jars as a bundle. A block at the very least should include
> the bundle. As an app developer I want to have a single deployment
> solution. As a sys admin, I want to ensure that I don't have 30
> copies of identical jars hanging around.
Packaging is a separate concern. Of course we want it as convenient as
possible. Large units has the benefit that you get everything at once
and the drawback that different complete packages might overlap and be
redundant. But if we have automatic deployment it is probably more
practicalt to have fine grained packaging. As long as the block you
happen to be intersted in has a list of it dependencies the block
deployer will take care of the work anyway.
> I understand that this is a complex problem and breaking it up into
> smaller pieces is a wise thing to do. My basic points are that to have
> real blocks you need a single deployment and that there are two levels
> to deploy Java components, global and sitemap, parent sitemaps included.
I understand that you want two deployment levels. I don't want a global
unshielded level as I'm certain that it doesn't scale.
> Initially, to have the choice of deploying Cocoon wide or sitemap wide
> solves some basic issues. The ultimate solution is much more difficult
> because of the multiple dependencies a block may have. It may be that
> it is impossible to solve all possible scenarios. I don't know.
I think it would be possible to solve, but personally I don't find it
worthwhile right now.
/Daniel
Re: Java components in blocks
Posted by Glen Ezkovich <gl...@hard-bop.com>.
On Apr 18, 2005, at 12:07 PM, Daniel Fagerstrom wrote:
> Glen Ezkovich wrote:
>
>>
>> On Apr 18, 2005, at 7:05 AM, Daniel Fagerstrom wrote:
>>
>>>>
>>>> The portal definition files define how individual portlets are
>>>> invoked and rendered. As I stated before, ideally these would be
>>>> separate blocks. However, since many will contain java code, it
>>>> sounds like many portlets would have to be a block with a matching
>>>> bundle.
>>>
>>>
>>> A block can contain code. It is just (at least in the first step)
>>> not allowed to expose components. So if the portlet components need
>>> to be accessible from other parts of the system you need both a
>>> bundle and a block. But if the components only are needed internally
>>> and the portlet can expose all its functionality as pipeline
>>> functionality, it is enough with a block.
>>
>>
>> Sorry to be late to the party, but I was unsure where this discussion
>> was headed and choose to keep my mouth shut. I'm glad to see to that
>> blocks can have code again.;-) I think the issue of exposing
>> components is a non issue.
>
> Did you read
> http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=111339143403364&w=2 ?
Yes
>
>> We are after all talking about java byte code, if some one wants to
>> use the jar/class file it just needs to be on the classpath.
>
> Sure, but what if two blocks contain different versions of a jar?
I admit that this is a problem. The way I see this, is that if a block
developer is using a jar that may have multiple versions deployed in
the cocoon environment they should make sure to deploy that jar local
to a sitemap.
>
>> The issue here is one of deployment, where to locate the class and
>> which ClassLoader will load the class. It seems to me that if we have
>> two component deployment levels, global and sitemap, we can pretty
>> much accomplish the same thing as exposing or not exposing
>> components.
>
> If all jars from all blocks are put in a global sitemap it just don't
> scale. It is hard enough to keep jars in different blocks in synch
> whithin the Cocoon SVN. When external developers start to develop and
> distribute their own blocks it will stop working.
Agreed. Certain jars should be available cocoon wide and others not.
Unfortunately, this must be left up to the blocks developer to decide
how a particular jar gets deployed. Just as it is now.
>
> Because of that classloader isolation is needed so that a block only
> is exposed to the classes it actually depend on from its parent
> classloader. And that is complicated stuff, if you don't think so you
> can take a look at kernel in whiteboard.
I know so. I didn't say it would be easy.
> Things get more complicated and creates IMO unnecessary dependencies
> between blocks when you combine it with sitemap functionallity.
How so? What is the alternative? Have blocks that have no component
dependencies? If a block depends on a component it depends on a
component. If a sitemap uses a component it uses a component.
> Because of that complexity Pier and I prefer to separate the problems.
If you separate the problems thats fine with me, but to consider this a
complete solution to the total problem which is to have real blocks is
a mistake. When I deploy an app, I usually have a custom component or
two and a bunch of POJOs. If I want to package an app as a block I
would need to package the sitemap and associated files as a block and
package the jars as a bundle. A block at the very least should include
the bundle. As an app developer I want to have a single deployment
solution. As a sys admin, I want to ensure that I don't have 30 copies
of identical jars hanging around.
I understand that this is a complex problem and breaking it up into
smaller pieces is a wise thing to do. My basic points are that to have
real blocks you need a single deployment and that there are two levels
to deploy Java components, global and sitemap, parent sitemaps
included. Initially, to have the choice of deploying Cocoon wide or
sitemap wide solves some basic issues. The ultimate solution is much
more difficult because of the multiple dependencies a block may have.
It may be that it is impossible to solve all possible scenarios. I
don't know.
Glen Ezkovich
HardBop Consulting
glen at hard-bop.com
A Proverb for Paranoids:
"If they can get you asking the wrong questions, they don't have to
worry about answers."
- Thomas Pynchon Gravity's Rainbow
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Glen Ezkovich wrote:
>
> On Apr 18, 2005, at 7:05 AM, Daniel Fagerstrom wrote:
>
>>>
>>> The portal definition files define how individual portlets are
>>> invoked and rendered. As I stated before, ideally these would be
>>> separate blocks. However, since many will contain java code, it
>>> sounds like many portlets would have to be a block with a matching
>>> bundle.
>>
>>
>> A block can contain code. It is just (at least in the first step) not
>> allowed to expose components. So if the portlet components need to be
>> accessible from other parts of the system you need both a bundle and
>> a block. But if the components only are needed internally and the
>> portlet can expose all its functionality as pipeline functionality,
>> it is enough with a block.
>
>
> Sorry to be late to the party, but I was unsure where this discussion
> was headed and choose to keep my mouth shut. I'm glad to see to that
> blocks can have code again.;-) I think the issue of exposing
> components is a non issue.
Did you read
http://marc.theaimsgroup.com/?l=xml-cocoon-dev&m=111339143403364&w=2 ?
> We are after all talking about java byte code, if some one wants to
> use the jar/class file it just needs to be on the classpath.
Sure, but what if two blocks contain different versions of a jar?
> The issue here is one of deployment, where to locate the class and
> which ClassLoader will load the class. It seems to me that if we have
> two component deployment levels, global and sitemap, we can pretty
> much accomplish the same thing as exposing or not exposing components.
If all jars from all blocks are put in a global sitemap it just don't
scale. It is hard enough to keep jars in different blocks in synch
whithin the Cocoon SVN. When external developers start to develop and
distribute their own blocks it will stop working.
Because of that classloader isolation is needed so that a block only is
exposed to the classes it actually depend on from its parent
classloader. And that is complicated stuff, if you don't think so you
can take a look at kernel in whiteboard. Things get more complicated and
creates IMO unnecessary dependencies between blocks when you combine it
with sitemap functionallity. Because of that complexity Pier and I
prefer to separate the problems.
/Daniel
Re: Java components in blocks
Posted by Glen Ezkovich <gl...@hard-bop.com>.
On Apr 18, 2005, at 7:05 AM, Daniel Fagerstrom wrote:
>>
>> The portal definition files define how individual portlets are
>> invoked and rendered. As I stated before, ideally these would be
>> separate blocks. However, since many will contain java code, it
>> sounds like many portlets would have to be a block with a matching
>> bundle.
>
> A block can contain code. It is just (at least in the first step) not
> allowed to expose components. So if the portlet components need to be
> accessible from other parts of the system you need both a bundle and a
> block. But if the components only are needed internally and the
> portlet can expose all its functionality as pipeline functionality, it
> is enough with a block.
Sorry to be late to the party, but I was unsure where this discussion
was headed and choose to keep my mouth shut. I'm glad to see to that
blocks can have code again.;-) I think the issue of exposing
components is a non issue. We are after all talking about java byte
code, if some one wants to use the jar/class file it just needs to be
on the classpath. The issue here is one of deployment, where to locate
the class and which ClassLoader will load the class. It seems to me
that if we have two component deployment levels, global and sitemap, we
can pretty much accomplish the same thing as exposing or not exposing
components.
WDYT?
Glen Ezkovich
HardBop Consulting
glen at hard-bop.com
A Proverb for Paranoids:
"If they can get you asking the wrong questions, they don't have to
worry about answers."
- Thomas Pynchon Gravity's Rainbow
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Ralph Goers wrote:
> Daniel Fagerstrom wrote:
>
>> Blocks are of course also packaged, distributed and dependency
>> resolved much like the bundles above.
>>
>> --- o0o ---
>>
>> So WDYT, does this make sense for your use cases?
>
>
> Thanks. Yes, this makes a lot more sense. I'm not sure how workable
> it will be, but it is possible it might be. The only real issue I see
> is for the person trying to construct a portal. They need:
> a. A main sitemap that defines the portal sitemap components, the
> component-configurations section that defines the name of the portal
> and its profiles, and the main portal pipeline.
> b. additions to cocoon.xconf (presumably through their own xconf) that
> configures components that are in the portal bundle, or possibly in
> their own bundle if they choose to implement their own features.
> c. the portal definition files (these are obtained via pipelines in
> the user's main portal sitemap and might be dynamically generated).
>
> The portal definition files define how individual portlets are invoked
> and rendered. As I stated before, ideally these would be separate
> blocks. However, since many will contain java code, it sounds like
> many portlets would have to be a block with a matching bundle.
A block can contain code. It is just (at least in the first step) not
allowed to expose components. So if the portlet components need to be
accessible from other parts of the system you need both a bundle and a
block. But if the components only are needed internally and the portlet
can expose all its functionality as pipeline functionality, it is enough
with a block.
> JSR-168 portlets I guess would have to be bundles, if they are
> packaged for Cocoon, as they don't contain a sitemap of any kind.
Seem reasonable.
> So as I understand it, a block would have the sitemap and would
> require a companion bundle which contained the xconf file if it had
> any components that need to be configured, or if it needs to configure
> components provided in another bundle. Is that correct?
See above. The block can import and configure components as much as it like.
As I have described in previous discussions, one way to make block
extensible and configurable is by using polymorphic sitemap rules. The
block, e.g. a portlet, contains configurations and default content that
are used through polymorphic sitemap rules. Then a user can extend the
original block and overide the sitemap rules that are needed for the
application.
We could also let extending blocks get access to the component manager
and classloader from the extended block whithout introducing to much
complexity. Parent - child classloader dependencies is still easy enough
to manage. The problem comes when the blocks start to have mutual
depdencies on the Java level.
> My only concern here is simply how many moving parts it will take to
> construct a portal.
If that becomes a problem we must of course solve that.
The main point is that Pier allready has a working system that solves
important parts of the "bundle" aspect. According to what he have
writen, it is used at VNU and solves a number of our current problems in
Cocoon.
And I feel rather confident in start building the blocks part as soon as
I find some time for it. We use some simple block like mechanism in our
internal webapps, and we have very good experience in. So if we start
with those aspects we might have something much more concrete to discuss
about in a close future. If that is enough, that is fine, if not we do
something about it.
/Daniel
Re: Java components in blocks
Posted by Ralph Goers <Ra...@dslextreme.com>.
Daniel Fagerstrom wrote:
>
>
> Blocks are of course also packaged, distributed and dependency
> resolved much like the bundles above.
>
> --- o0o ---
>
> So WDYT, does this make sense for your use cases?
Thanks. Yes, this makes a lot more sense. I'm not sure how workable it
will be, but it is possible it might be. The only real issue I see is
for the person trying to construct a portal. They need:
a. A main sitemap that defines the portal sitemap components, the
component-configurations section that defines the name of the portal and
its profiles, and the main portal pipeline.
b. additions to cocoon.xconf (presumably through their own xconf) that
configures components that are in the portal bundle, or possibly in
their own bundle if they choose to implement their own features.
c. the portal definition files (these are obtained via pipelines in the
user's main portal sitemap and might be dynamically generated).
The portal definition files define how individual portlets are invoked
and rendered. As I stated before, ideally these would be separate
blocks. However, since many will contain java code, it sounds like many
portlets would have to be a block with a matching bundle. JSR-168
portlets I guess would have to be bundles, if they are packaged for
Cocoon, as they don't contain a sitemap of any kind.
So as I understand it, a block would have the sitemap and would require
a companion bundle which contained the xconf file if it had any
components that need to be configured, or if it needs to configure
components provided in another bundle. Is that correct?
My only concern here is simply how many moving parts it will take to
construct a portal.
Ralph
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Reinhard Poetz wrote:
> Daniel Fagerstrom wrote:
>
>> Reinhard Poetz wrote:
>>
>>> Daniel Fagerstrom wrote:
>>>
>>>> Maybe not, but those are areas that are rather vague anyway, we
>>>> where the only ones who thought it had much importance the last
>>>> time we discussed it.
>>>
>>> Maybe it had the appearance but I can't believe this. (Recently I
>>> had a discussion with Sylvain and he really wants this feature too.
>>> So we are at least three ;-) )
>>
>> Might be, we still need to know the use cases to provide a good
>> solution. Any comments to what I suggested in my response? BTW I
>> rather meant:
>> var result = cocoon.sendPageAndWait("block:myblockA://confirmDialog",
>> {msg: "areYouSure"});
>
>
> A part from that this changes the contract of sendPageAndWait (returns
> a continuation),
The response object could be made available in an extra argument
instead. Also we could have VPC flowscript functions as long as their
return values are restricted to what is part of the "core" classloader.
> I would prefer the explicit call of flowscript functions of other blocks.
Anything else would have been a suprise to me ;)
> I think the usecases are quite clear (reuse a flowscript function of
> another block and use it the same way as a local function) but we
> shouldn't discuss this ATM. Let's wait until Pier and you have set up
> the base infrastructure (Block[s]Manager + some basic classloader
> isoluation) and then we will see what is (easily) possible and what not.
Good, it feels rather abstract to discuss whats missing in something we
haven't implemented or tried.
/Daiel
Re: Java components in blocks
Posted by Reinhard Poetz <re...@apache.org>.
Daniel Fagerstrom wrote:
> Reinhard Poetz wrote:
>
>> Daniel Fagerstrom wrote:
>>
>>> Maybe not, but those are areas that are rather vague anyway, we where
>>> the only ones who thought it had much importance the last time we
>>> discussed it.
>>
>>
>>
>> Maybe it had the appearance but I can't believe this. (Recently I had
>> a discussion with Sylvain and he really wants this feature too. So we
>> are at least three ;-) )
>
>
> Might be, we still need to know the use cases to provide a good
> solution. Any comments to what I suggested in my response? BTW I rather
> meant:
> var result = cocoon.sendPageAndWait("block:myblockA://confirmDialog",
> {msg: "areYouSure"});
A part from that this changes the contract of sendPageAndWait (returns a
continuation) I would prefer the explicit call of flowscript functions of other
blocks.
I think the usecases are quite clear (reuse a flowscript function of another
block and use it the same way as a local function) but we shouldn't discuss this
ATM. Let's wait until Pier and you have set up the base infrastructure
(Block[s]Manager + some basic classloader isoluation) and then we will see what
is (easily) possible and what not.
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Reinhard Poetz wrote:
> Daniel Fagerstrom wrote:
>
>> Maybe not, but those are areas that are rather vague anyway, we where
>> the only ones who thought it had much importance the last time we
>> discussed it.
>
>
> Maybe it had the appearance but I can't believe this. (Recently I had
> a discussion with Sylvain and he really wants this feature too. So we
> are at least three ;-) )
Might be, we still need to know the use cases to provide a good
solution. Any comments to what I suggested in my response? BTW I rather
meant:
var result = cocoon.sendPageAndWait("block:myblockA://confirmDialog",
{msg: "areYouSure"});
/Daniel
Re: Java components in blocks
Posted by Reinhard Poetz <re...@apache.org>.
Daniel Fagerstrom wrote:
> Maybe not, but those are areas that are rather vague anyway, we where
> the only ones who thought it had much importance the last time we
> discussed it.
Maybe it had the appearance but I can't believe this. (Recently I had a
discussion with Sylvain and he really wants this feature too. So we are at least
three ;-) )
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Reinhard Poetz wrote:
> Daniel Fagerstrom wrote:
>
>> So WDYT, does this make sense for your use cases?
>
>
> Yes, for the pipelines part but that's not the whole story.
> Just two thoughts: Don't know what we gain when we introduce two
> separate deployment units (bundles and blocks). Maybe it's more
> confusing than helping. If necessary we can have different types of
> blocks.
Sure, I called them bundles and block to make the discussion more
concrete, we could call them component blocks and sitemap block or
whatever. From a repository and deployment perspective they will have
much in common so we should of course use the same mechanism as long as
possible.
> Second, I don't see our flowscript usecase
>
> var true = cocoon.blocks.myblockA.confirmDialog("Are you sure?") or
This is a page flow and would fall into the reponsibility area of
blocks. It could be implemented as some flowscript VPC. In that case we
need to restrict what kind of objects that can be returned to those that
are part of the "core" classloader. We could also have a more
request/repsponse oriented approach and make it possible to put the
true/false and other data in the reponse object, in that case we would
rather get:
var result = cocoon.sendPageAndWait("block:myblockA://areYouSure");
> var newCustomer = cocoon.blocks.crm.createCustomer()
This falls in the area of "bundles" and component management, if the
Customer interface is defined in crm, the user of it must have access to
the Customer interafce from its classloader. We could develop some
mechanism that makes it possible to implement components in JS but that
would not be related to flow IMO.
> is covered so far, isn't it?.
Maybe not, but those are areas that are rather vague anyway, we where
the only ones who thought it had much importance the last time we
discussed it.
/Daniel
Re: Java components in blocks
Posted by Reinhard Poetz <re...@apache.org>.
Daniel Fagerstrom wrote:
> So WDYT, does this make sense for your use cases?
Yes, for the pipelines part but that's not the whole story.
Just two thoughts: Don't know what we gain when we introduce two separate
deployment units (bundles and blocks). Maybe it's more confusing than helping.
If necessary we can have different types of blocks.
Second, I don't see our flowscript usecase
var true = cocoon.blocks.myblockA.confirmDialog("Are you sure?") or
var newCustomer = cocoon.blocks.crm.createCustomer()
is covered so far, isn't it?.
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Ralph Goers wrote:
> Pier Fumagalli wrote:
>
>> My vision is quite simple... How many _COMPONENT_ interfaces we need
>> for Cocoon? Probably 3:
>>
>> "Generator"
>> "Transformer"
>> "Serializer"
>>
>> (well, you might have another 2 or 3 of them but do you see the point?)
>
> Please take a look at the Portal and then explain how the above works
> for that. There are a heck of a lot more components that someone
> building a portal needs to configure besides these. Sitemap
> components are only uses in Cocoon Portlets. While each Portal
> request is fired off by the PortalGenerator, it invokes a lot of
> elements that are configured by whoever puts together the portal.
Don't have time to take any detailed look at the portal ATM, but I give
my view on the main concepts and then you can see if they seem to help
your use case.
In the original proposal was the idea that a block exposes both sitemap
functionality and components. Our current idea is that we, at least
initially handles the two areas separately. Let us for concretness call
the sitemap aspect a block and the component aspect a bundle.
Bundles
-------
A bundle contains one or more components and some meta info. The meta
info can be about dependecies on components in other bundles it could
also contain default configurations and possibly other stuff. There
might be special interface bundles that only contain the apis. A bundle
would typically be a jar and we would store them in repositories like
ibiblio.org. We could use Maven for downloading them and resolve the
dependencies and e.g. Pier's kernel for managing them an providing
classloader shielding.
A large part of our current blocks would be bundles rather than blocks.
Most of the portal would probably be packaged as a bundle.
Component management is not my main expertise, but I wouldn't be
supprised if much of what we need in this area already is developed in
some other projects.
Blocks
------
Blocks are at the sitemap level. It is like a small configurable and
possibly extendable webapp the can be used as part of user webapps. Its
main communication line with the rest of the application is the block
protocol, it takes an URI and a request object and returns a response
object. You can use it internally and/or mount its URI space so that
Cocoon expose it to the external world. A block can also expose sitemap
components.
A block can depend on components from bundles but it doesn't expose
components (at least we hope that it will be enough). A block can
contain own Java code for internal use.
Block can be full application frameworks like Forrest, Lenya, Linotype
and possibly a portal application. A WebDAV repository could be packaged
as a block. A set of webservices could also be packaged as a block.
Blocks can also be smaller and more specialized things like skins or the
examples Pier gave. Maybe prtlets could make sense as blocks. A large
application block probably is put together from a number of small blocks.
Blocks are of course also packaged, distributed and dependency resolved
much like the bundles above.
--- o0o ---
So WDYT, does this make sense for your use cases?
/Daniel
Re: Java components in blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 17 Apr 2005, at 16:44, Ralph Goers wrote:
> Pier Fumagalli wrote:
>
>> My vision is quite simple... How many _COMPONENT_ interfaces we need
>> for Cocoon? Probably 3:
>>
>> "Generator"
>> "Transformer"
>> "Serializer"
>>
>> (well, you might have another 2 or 3 of them but do you see the
>> point?)
>>
> Please take a look at the Portal and then explain how the above works
> for that. There are a heck of a lot more components that someone
> building a portal needs to configure besides these. Sitemap
> components are only uses in Cocoon Portlets. While each Portal
> request is fired off by the PortalGenerator, it invokes a lot of
> elements that are configured by whoever puts together the portal.
Reading through the portal (I'm no expert here), I can't really
understand what ties the Portal (Pluto, and all that lot), with a
Cocoon block... I think this is more in the ballpark of "components"
rather than Cocoon blocks and pipeline services. But again, I might be
wrong...
Someone care to explain????
Pier
Re: Java components in blocks
Posted by Ralph Goers <Ra...@dslextreme.com>.
Pier Fumagalli wrote:
>
> My vision is quite simple... How many _COMPONENT_ interfaces we need
> for Cocoon? Probably 3:
>
> "Generator"
> "Transformer"
> "Serializer"
>
> (well, you might have another 2 or 3 of them but do you see the point?)
>
Please take a look at the Portal and then explain how the above works
for that. There are a heck of a lot more components that someone
building a portal needs to configure besides these. Sitemap components
are only uses in Cocoon Portlets. While each Portal request is fired
off by the PortalGenerator, it invokes a lot of elements that are
configured by whoever puts together the portal.
Ralph
Re: Java components in blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 16 Apr 2005, at 13:56, Daniel Fagerstrom wrote:
> Torsten Curdt wrote:
>>> Reading these discussions after the fact, having Blocks provide only
>>> sitemap components seems to make a lot of sense
>> ...not to me - sorry. But maybe I just missed something.
>> Pier is totally right: we have two different concerns.
>> One is the pipeline services interface and one is the
>> component interface of a block.
>> But reducing a block just to it's pipeline services basically
>> gives us virtual sitemap components on steroids. What about
>> its dependencies? Well, IIUC one argument in this discussion
>> was that the dependency will be satisfied through a pipeline
>> service - not through a component.
>> Block A:
>> provides: a pipeline service to transform xml
>> requires: a pipeline service to transform xml with a STX stylesheet
>> Block B:
>> provides: a pipeline service to transform xml with a STX stylesheet
>> So block B does not provide the component with
>> hint "stx" but a service that could be anything
>> doing the job satisfying the dependency. Ok.
>> Now what about the component dependencies? Let's
>> say in order to implement the "transform-via-stx"
>> service block B requires a component of hint "stx".
>> Since the block B has its own component manager
>> and the component "stx" being declared in the block's
>> sitemap all is left is a java class level dependency
>> to the stx implementation. Now the question is - will
>> the block B provide the stx jar? Let's say yes for the
>> moment.
>> So what if the "transform-via-stx" component needs
>> another component? We could list all the required
>> component in the components section for that very block.
>> ...but still the classes need to be available!
>> What if the classes are in a different block?
>> Essentially this means to me: As long as we don't want
>> to ship every block with every component it requires
>> I cannot see how we can get around of having blocks
>> also expose component services.
>
> The idea is that if you have a component that you want to be able to
> use in several places, you package it in a certain way. Then the
> improved component handling system that Pier feel the itch to build
> can found its jar in some repository somwhere, reolve its dependencies
> and offer a shielded parent classloader with the depndencies you have
> asked for.
>
> I don't know the exact details about Pier's vison about this, but you
> can take a look at the kernel in whiteboard for part of it and Maven
> is also a part of the equation for downöloading and dependency
> reolution.
My vision is quite simple... How many _COMPONENT_ interfaces we need
for Cocoon? Probably 3:
"Generator"
"Transformer"
"Serializer"
(well, you might have another 2 or 3 of them but do you see the point?)
How many _BLOCK_ interfaces can we have on the other hand?
"ForrestSkin", "WebMailRepository", ....
hundreds.
Then, if each implementation of a block interface is allowed to say "To
provide this transformer pipeline service I need the SQL transformer
component, the XSLT component and STX component" (all those three
simply implement the component "Transformer" Java interface, the
problem of dependancy resolution is so easy from both sides:
On the block side, you can completely ignore classloaders and java
code, on the component side, you're pretty much sure that the number of
component interfaces is not going to be so big and so "volatile" in
terms of version numbers (and therefore simplifies the classloading
structure).
I mean, the problem right now is not that we have two versions of the
"o.a.c.s.Serializer" (Java) interface, but that we _need_ to have in
the same Cocoon two versions of "Fop" implementing the
_same_precisely_exact_ Java interface...
See what I mean?
Pier
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Torsten Curdt wrote:
>>Reading these discussions after the fact, having Blocks provide only
>>sitemap components seems to make a lot of sense
>
>
> ...not to me - sorry. But maybe I just missed something.
>
> Pier is totally right: we have two different concerns.
> One is the pipeline services interface and one is the
> component interface of a block.
>
> But reducing a block just to it's pipeline services basically
> gives us virtual sitemap components on steroids. What about
> its dependencies? Well, IIUC one argument in this discussion
> was that the dependency will be satisfied through a pipeline
> service - not through a component.
>
>
> Block A:
> provides: a pipeline service to transform xml
> requires: a pipeline service to transform xml with a STX stylesheet
>
> Block B:
> provides: a pipeline service to transform xml with a STX stylesheet
>
>
> So block B does not provide the component with
> hint "stx" but a service that could be anything
> doing the job satisfying the dependency. Ok.
>
> Now what about the component dependencies? Let's
> say in order to implement the "transform-via-stx"
> service block B requires a component of hint "stx".
> Since the block B has its own component manager
> and the component "stx" being declared in the block's
> sitemap all is left is a java class level dependency
> to the stx implementation. Now the question is - will
> the block B provide the stx jar? Let's say yes for the
> moment.
>
> So what if the "transform-via-stx" component needs
> another component? We could list all the required
> component in the components section for that very block.
> ...but still the classes need to be available!
>
> What if the classes are in a different block?
>
> Essentially this means to me: As long as we don't want
> to ship every block with every component it requires
> I cannot see how we can get around of having blocks
> also expose component services.
The idea is that if you have a component that you want to be able to use
in several places, you package it in a certain way. Then the improved
component handling system that Pier feel the itch to build can found its
jar in some repository somwhere, reolve its dependencies and offer a
shielded parent classloader with the depndencies you have asked for.
I don't know the exact details about Pier's vison about this, but you
can take a look at the kernel in whiteboard for part of it and Maven is
also a part of the equation for downöloading and dependency reolution.
Then the responsibility for blocks is to deliver sitemap functionality
rather than components. A block declare what components it depend on and
the component system takes care of that part for it. It will, at least
in my vision, be possible to put Java code and components within the
block that only is intended for block internal usage.
--- o0o ---
So the situation rigth now is that Pier have the itch to start integrate
improved component handling with classloader shielding ito Cocoon. And I
have the itch to start building the sitemap part of the original blocks
proposal (actually I have even started on it although nothing is
committed yet).
For the time beeing we are going to *assume* that is is separate
concerns, although the blocks system will use the component system. In
this way we reduce the complexity to a point where we feel comfortable
to actually do things, and get experince from that, instead of spending
a couple of more years on just discussing them.
In a next step, anyone who feel that it is necessary can integrate the
two parts as it was intended originally. My hope is that we don't feel
the need, as it IMHO is mixing two different architectural levels and
it, according my current state of knowledge, means that we are creating
a complexity nightmare for ourselves.
Also letting the block depend on each other in the way that they can
export any interface and jar, means that they get a very tight coupling
and all kinds of version problems. I can't see that it is scaleable to
the level where different organizations develop blocks independently,
that users easily can integrate.
--- o0o ---
But this is just my view, if you feel that it is FUD and that is is much
easier than I say, it is just to go ahead and propose better ideas and
maybe even implement them ;)
/Daniel
Re: Java components in blocks
Posted by Torsten Curdt <tc...@apache.org>.
> Reading these discussions after the fact, having Blocks provide only
> sitemap components seems to make a lot of sense
...not to me - sorry. But maybe I just missed something.
Pier is totally right: we have two different concerns.
One is the pipeline services interface and one is the
component interface of a block.
But reducing a block just to it's pipeline services basically
gives us virtual sitemap components on steroids. What about
its dependencies? Well, IIUC one argument in this discussion
was that the dependency will be satisfied through a pipeline
service - not through a component.
Block A:
provides: a pipeline service to transform xml
requires: a pipeline service to transform xml with a STX stylesheet
Block B:
provides: a pipeline service to transform xml with a STX stylesheet
So block B does not provide the component with
hint "stx" but a service that could be anything
doing the job satisfying the dependency. Ok.
Now what about the component dependencies? Let's
say in order to implement the "transform-via-stx"
service block B requires a component of hint "stx".
Since the block B has its own component manager
and the component "stx" being declared in the block's
sitemap all is left is a java class level dependency
to the stx implementation. Now the question is - will
the block B provide the stx jar? Let's say yes for the
moment.
So what if the "transform-via-stx" component needs
another component? We could list all the required
component in the components section for that very block.
...but still the classes need to be available!
What if the classes are in a different block?
Essentially this means to me: As long as we don't want
to ship every block with every component it requires
I cannot see how we can get around of having blocks
also expose component services.
cheers
--
Torsten
Re: Java components in blocks
Posted by Bertrand Delacretaz <bd...@apache.org>.
Le 14 avr. 05, à 17:33, Ralph Goers a écrit :
> ...Frankly, I'd love to see how this will even work. If someone could
> explain how the cron block can be a block without exposing components
> then maybe I could understand. I really want to understand how this
> could apply to the portal block, but the cron block is a lot
> simpler...
Reading these discussions after the fact, having Blocks provide only
sitemap components seems to make a lot of sense: it looks immediately
useful, understandable and Cocoon-specific, whereas yet another
(potentially complicated) general java component mechanism sounds a lot
like reinventing the wheel (I'm overly simplifying here).
About cron and similar blocks (JMS, embedded database server, etc.):
thinking of them as unix "daemons" might help fit them nicely in the
concept. Conceptually, I think such blocks need an initialization
mechanism, a reconfiguration interface (Transformer?) and a status
interface (Generator).
Basing the blocks concept on sitemap components (the grep sed ps ls awk
sort of Cocoon) and "daemon components" (the cron mysql sendmail of
Cocoon) might help find the right balance here.
-Bertrand
Re: Java components in blocks
Posted by Ralph Goers <Ra...@dslextreme.com>.
Stefano Mazzocchi wrote:
> Pier Fumagalli wrote:
>
>>> IMO, we should start simple and add functionality when needed.
>>> Remove things is much harder. Also even if we chose to go for
>>> alternative 4. an important message from Pier that we should take
>>> into account is that component exposure adds complexity. So if we go
>>> that way, we should have mechanisms that so that we can have
>>> detailed control over what components and classes a block exposes. A
>>> block that exposes much will be much more likely to create conflicts
>>> with other blocks.
>>
>>
>>
>> Glad that we have agreement on this! :-D
>
>
> Ok, you changed my mind. Let's keep the concerns separate and see what
> happens.
Frankly, I'd love to see how this will even work. If someone could
explain how the cron block can be a block without exposing components
then maybe I could understand. I really want to understand how this
could apply to the portal block, but the cron block is a lot simpler.
Ralph
Re: Java components in blocks
Posted by Stefano Mazzocchi <st...@apache.org>.
Pier Fumagalli wrote:
>> IMO, we should start simple and add functionality when needed. Remove
>> things is much harder. Also even if we chose to go for alternative 4.
>> an important message from Pier that we should take into account is
>> that component exposure adds complexity. So if we go that way, we
>> should have mechanisms that so that we can have detailed control over
>> what components and classes a block exposes. A block that exposes much
>> will be much more likely to create conflicts with other blocks.
>
>
> Glad that we have agreement on this! :-D
Ok, you changed my mind. Let's keep the concerns separate and see what
happens.
--
Stefano.
Re: Java components in blocks
Posted by Stefano Mazzocchi <st...@apache.org>.
Pier Fumagalli wrote:
>
> On 14 Apr 2005, at 13:32, Daniel Fagerstrom wrote:
>
>> <snip/>
>>
>>>>
>>>> After having read your mails I agree that we at least for the time
>>>> being, should consider component management with classloader
>>>> isolation, a separate concern. By _assuming_ independence between
>>>> blocks and component management, anyone who feel the itch can start
>>>> working on class loader isolation right away. Then we can integrate
>>>> the component management stuff in the blocks later if we feel the
>>>> need. And if we don't, we saved ourself from considerable complexity.
>>>
>>>
>>>
>>> I have that itch,
>>
>>
>> I hoped so :)
>
>
> Does anyone have problems if I wipe the current "kernel" in SVN? I want
> to try and synchronize it with the changes I've made locally (and try to
> sort out a few hacks we've had to introduce in our local copy)
no problems for me.
>>> and to tell you the truth, the kernel in SVN _already_ does a some
>>> level of classloader isolation. Thing is, I use it on a daily basis
>>> for an XML repository we have (in house) at VNU, and the more I use
>>> it, the more I see the problems of the _current_ approach.
>>>
>>> I hit a dead end with the implementation in CVS last week when I
>>> wanted to upgrade JAXP from 1.2 to 1.3, running on a 1.4 JVM, but
>>> _not_ using the -Djava.endorsed.dirs JVM flag. I can't tell you the
>>> issues on trying to isolate the JAXP 1.3 contract and kernel plug-in
>>> from the underlying JVM, but with a bit of luck, I found what's
>>> wrong, and we should be up and running with the new kernel (here at
>>> VNU) in a week-or-so...
>>
>>
>> Same here, as long as you tell us what you are planning to do, so that
>> especially Carsten and Sylvain can say if it works with their plans,
>> you have my big +1.
>
>
> My problem is that I'm not "paid" to work on Cocoon, so I kinda "hide"
> all this work behind changes that are required for our in-house
> XML-repository. And some of the hacks that are in our current code are
> definitely something I don't want to add to the Cocoon SVN.
>
>> Is it based on the whiteboard kernel?
>
>
> Yup... It's basically that, but I've spotted a few problems using it :-(
>
>> In that case I would be interested in geting a short description of
>> the involved concepts and how they cooperate. I'm thinking of: Block,
>> Contract, Extension, Library, Module and Plugin.
>
>
> I'm actually thinking about renaming those as I feel that the naming
> convention might be extremely misleading.
>
> I'll try to Wikify some thoughs over the weekend (If I can log-in on
> MoinFrigginMoin)
awesome.
I'm starting to like this separation more and more.
--
Stefano.
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Pier Fumagalli wrote:
>
> On 14 Apr 2005, at 13:32, Daniel Fagerstrom wrote:
<snip/>
> Does anyone have problems if I wipe the current "kernel" in SVN? I
> want to try and synchronize it with the changes I've made locally (and
> try to sort out a few hacks we've had to introduce in our local copy)
No problem for me. Just go ahead :)
<snip/>
>> In that case I would be interested in geting a short description of
>> the involved concepts and how they cooperate. I'm thinking of: Block,
>> Contract, Extension, Library, Module and Plugin.
>
> I'm actually thinking about renaming those as I feel that the naming
> convention might be extremely misleading.
>
> I'll try to Wikify some thoughs over the weekend (If I can log-in on
> MoinFrigginMoin)
Great!
/Daniel
Re: Java components in blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 14 Apr 2005, at 13:32, Daniel Fagerstrom wrote:
> <snip/>
>>>
>>> After having read your mails I agree that we at least for the time
>>> being, should consider component management with classloader
>>> isolation, a separate concern. By _assuming_ independence between
>>> blocks and component management, anyone who feel the itch can start
>>> working on class loader isolation right away. Then we can integrate
>>> the component management stuff in the blocks later if we feel the
>>> need. And if we don't, we saved ourself from considerable
>>> complexity.
>>
>>
>> I have that itch,
>
> I hoped so :)
Does anyone have problems if I wipe the current "kernel" in SVN? I want
to try and synchronize it with the changes I've made locally (and try
to sort out a few hacks we've had to introduce in our local copy)
>> and to tell you the truth, the kernel in SVN _already_ does a some
>> level of classloader isolation. Thing is, I use it on a daily basis
>> for an XML repository we have (in house) at VNU, and the more I use
>> it, the more I see the problems of the _current_ approach.
>>
>> I hit a dead end with the implementation in CVS last week when I
>> wanted to upgrade JAXP from 1.2 to 1.3, running on a 1.4 JVM, but
>> _not_ using the -Djava.endorsed.dirs JVM flag. I can't tell you the
>> issues on trying to isolate the JAXP 1.3 contract and kernel plug-in
>> from the underlying JVM, but with a bit of luck, I found what's
>> wrong, and we should be up and running with the new kernel (here at
>> VNU) in a week-or-so...
>
> Same here, as long as you tell us what you are planning to do, so that
> especially Carsten and Sylvain can say if it works with their plans,
> you have my big +1.
My problem is that I'm not "paid" to work on Cocoon, so I kinda "hide"
all this work behind changes that are required for our in-house
XML-repository. And some of the hacks that are in our current code are
definitely something I don't want to add to the Cocoon SVN.
> Is it based on the whiteboard kernel?
Yup... It's basically that, but I've spotted a few problems using it :-(
> In that case I would be interested in geting a short description of
> the involved concepts and how they cooperate. I'm thinking of: Block,
> Contract, Extension, Library, Module and Plugin.
I'm actually thinking about renaming those as I feel that the naming
convention might be extremely misleading.
I'll try to Wikify some thoughs over the weekend (If I can log-in on
MoinFrigginMoin)
> <snip2/>
Pier
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Pier Fumagalli wrote:
> On 14 Apr 2005, at 10:16, Daniel Fagerstrom wrote:
>
>> Pier Fumagalli wrote:
>
<snip/>
>>> As far as I've understood Cocoon blocks (and I might be _ENTIRELY_
>>> wrong here) Cocoon blocks do not expose (for example) an XSLT Java
>>> transformer, but expose a transformer converting a specified format
>>> into another.
>>
>> AFAIU, you are entirely wrong ;)
>
>
> Ha... I read this differently, then... (Subject: Re: Planning Cocoon's
> future)
>
> On 23 Nov 2004, at 19:32, Stefano Mazzocchi wrote:
>
>>>> Are there any reasons not to make Pier's kernel the official base
>>>> of Cocoon 2.3? If not, Pier should have the "permission" to move
>>>> its kernel into an offical 2.3 directory in our SVN whenever he
>>>> thinks it's time for it. (... I prepare a vote after the discussion)
>>>
>>> If the kernel is stable, should it really be 2.3 or can it be 2.2?
>>
>>
>> my suggestion would be: leave the kernel out and let's keep working
>> on allowing us to deploy and ship the blocks in binary format.
>>
>> classloading isolation will happen later, when the need will be
>> impossible for people to avoid ;-)
>
>
> My mishap? Misinterpretation? Or just one of my usual brainfarts??? :-P
I interpreted it as no classloader isolation rather than total
classloader isolation. Anyway, lets focus on what we want rather on what
people possibly thought once. We'll get a current update of peoples
opinons soon enough ;)
>> considering what have been discussed before. Neither the less, what
>> you propose makes perfect sense to me. My idea was to start
>> implementing the pipline part of the blocks management system, as we
>> IMO understand enough about it to be able to work on that. Then add
>> the possiblity to expose components and take care of class loader
>> issues in a later step.
>
>
> On this you have my +1... Also because, I've been looking at a little
> tool called "Maven" :-P That already tells us the dependancies of one
> particular library against others... By using the (let's assume)
> "httpclient-x.y.z.jar" from Maven, the maven descriptor file _already_
> tells us this "library" dependancies.
>
> We can wrap the library into a "block" (or proto-component), and use
> the maven descriptor file to calculate dependancies, and use those as
> instructions to build the classloader structure required by (but
> separate from) blocks.
Given that you synchronize it with Reinhard who has worked on a block
builder, you have my +1.
>> After having read your mails I agree that we at least for the time
>> being, should consider component management with classloader
>> isolation, a separate concern. By _assuming_ independence between
>> blocks and component management, anyone who feel the itch can start
>> working on class loader isolation right away. Then we can integrate
>> the component management stuff in the blocks later if we feel the
>> need. And if we don't, we saved ourself from considerable complexity.
>
>
> I have that itch,
I hoped so :)
> and to tell you the truth, the kernel in SVN _already_ does a some
> level of classloader isolation. Thing is, I use it on a daily basis
> for an XML repository we have (in house) at VNU, and the more I use
> it, the more I see the problems of the _current_ approach.
>
> I hit a dead end with the implementation in CVS last week when I
> wanted to upgrade JAXP from 1.2 to 1.3, running on a 1.4 JVM, but
> _not_ using the -Djava.endorsed.dirs JVM flag. I can't tell you the
> issues on trying to isolate the JAXP 1.3 contract and kernel plug-in
> from the underlying JVM, but with a bit of luck, I found what's wrong,
> and we should be up and running with the new kernel (here at VNU) in a
> week-or-so...
Same here, as long as you tell us what you are planning to do, so that
especially Carsten and Sylvain can say if it works with their plans, you
have my big +1.
Is it based on the whiteboard kernel? In that case I would be interested
in geting a short description of the involved concepts and how they
cooperate. I'm thinking of: Block, Contract, Extension, Library, Module
and Plugin.
>> --- o0o ---
>>
>> Ok, taking a look at the technical issues. IIUC, the problem that you
>> describe does not depend on whether a block contains Java classes or
>> libraries or not. The problem appears as soon as a block tries to
>> expose a component. Then the user of the component must have get all
>> the eposed interfaces from its parent classloader. And when we add
>> mutual dependencies between blocks and different versions of the
>> interfaces, it start feeling more like headache than fun.
>
>
> PRECISELY, you got this spot on...
>
>>
>> So let's take a look at some different levels of block issolation,
>> and their properties (the pipeline is exposed in all cases):
>>
>> 1. No component exposing
>> ------------------------
>>
>> The block doesn't expose any components at all, not even VPCs. The
>> block can still contain as much own Java code as it want. It gets a
>> parent classloader with the core Cocoon functionality and adds it own
>> classes in its own classloader. The block must obviously be
>> compatible with the Cocoon core, but there are no version
>> interdependencies on the Java level between blocks.
>>
>> It can even expose its classloader to extending blocks without
>> problems. The extending block must of course be compatible at the
>> Java level with the extended one, but still no circular dependencies.
>>
>> We can package the VPCs as (block) web services (ws) instead with:
>>
>> VPCReader - Stream -> Stream ws
>> VPCGenerator - Stream -> XML (SAX) ws
>> VPCTransformer - XML -> XML ws
>> VPCSerializer - XML -> Stream ws
>>
>> by making the block protocol competent enough and introducing
>> pipeline components that talk with the corresponding ws, we get
>> something that works like and is as efficient as VPCs.
>
>
> And this can be achieved with the running ECM+++ by Carsten, as every
> sitemap _HAS_ its own classloader. No need to change the underlying
> implementation until we have a final solution, right?
Yes, AFAIU.
>> 2. Exposing VPCs only
>> ---------------------
>>
>> Like the previous alternative but exposing VPCs. If we go for this,
>> Sylvain's proposal about separating VPCs from other componsnts in the
>> sitemap is preferable IMO.
>
>
> I like this approach, but should be combined with the previous one.
That was my intension.
> ECM+++ already provides isolate class loaders for sitemaps (and
> therefore blocks). The idea of exposing VPCs only is that an XSLT
> transformer is nothing without its stylesheet.. A I18N transformer is
> nothing without its catalog file.
>
> Now, the transformers, serializers, generators, blablabla, EXPOSED by
> a block must be _full_ components ready to implement a contract saying
> (for example) transform an XML in the "book.dtd" into a XML in the
> "xhtml11.dtd". You want to write it in JAva? Native C code? Xalan +
> XSLT? That's not a problem, but what is exposed is not a class, it is
> an implementation of the o.a.c.Transformer interface converting
> "book.dtd" into "xhtml11.dtd".
Exactly, although I think we should do the schema part optional. In the
end I think that blocks that declare their piplines with schemas will be
much more robust, testable and usefull. But we don't have much
infrastructure for that in place yet.
<snip/>
>>
>> IMO, we should start simple and add functionality when needed. Remove
>> things is much harder. Also even if we chose to go for alternative 4.
>> an important message from Pier that we should take into account is
>> that component exposure adds complexity. So if we go that way, we
>> should have mechanisms that so that we can have detailed control over
>> what components and classes a block exposes. A block that exposes
>> much will be much more likely to create conflicts with other blocks.
>
>
> Glad that we have agreement on this! :-D
:)
/Daniel
Re: Java components in blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 14 Apr 2005, at 10:16, Daniel Fagerstrom wrote:
> Pier Fumagalli wrote:
>> On 13 Apr 2005, at 18:08, Vadim Gritsenko wrote:
>>> Pier Fumagalli wrote:
>>>
>>>>
>>>> I'm just saying that the concerns are separate: a block provides
>>>> generators, transformers, serializers, ... to other blocks, but
>>>> those are de-coupled from the real java components (if any) doing
>>>> the job.
>>>
>>>
>>> But *real* blocks, IIUC, *are* the only way to bring new (java)
>>> components into the system, because Cocoon core lacks all the
>>> optional components, and, at the minimum, consists only of
>>> environment, treeprocessor, and block manager.
>>>
>>> So in extreme case xslt processor component itself is optional and
>>> provided by the xslt real block.
>>
>>
>> I think that we're mixing again the idea behind a Cocoon block and an
>> Avalon block.
>>
>> As far as I've understood Cocoon blocks (and I might be _ENTIRELY_
>> wrong here) Cocoon blocks do not expose (for example) an XSLT Java
>> transformer, but expose a transformer converting a specified format
>> into another.
>
> AFAIU, you are entirely wrong ;)
Ha... I read this differently, then... (Subject: Re: Planning Cocoon's
future)
On 23 Nov 2004, at 19:32, Stefano Mazzocchi wrote:
>>> Are there any reasons not to make Pier's kernel the official base of
>>> Cocoon 2.3? If not, Pier should have the "permission" to move its
>>> kernel into an offical 2.3 directory in our SVN whenever he thinks
>>> it's time for it. (... I prepare a vote after the discussion)
>> If the kernel is stable, should it really be 2.3 or can it be 2.2?
>
> my suggestion would be: leave the kernel out and let's keep working on
> allowing us to deploy and ship the blocks in binary format.
>
> classloading isolation will happen later, when the need will be
> impossible for people to avoid ;-)
My mishap? Misinterpretation? Or just one of my usual brainfarts??? :-P
> considering what have been discussed before. Neither the less, what
> you propose makes perfect sense to me. My idea was to start
> implementing the pipline part of the blocks management system, as we
> IMO understand enough about it to be able to work on that. Then add
> the possiblity to expose components and take care of class loader
> issues in a later step.
On this you have my +1... Also because, I've been looking at a little
tool called "Maven" :-P That already tells us the dependancies of one
particular library against others... By using the (let's assume)
"httpclient-x.y.z.jar" from Maven, the maven descriptor file _already_
tells us this "library" dependancies.
We can wrap the library into a "block" (or proto-component), and use
the maven descriptor file to calculate dependancies, and use those as
instructions to build the classloader structure required by (but
separate from) blocks.
> After having read your mails I agree that we at least for the time
> being, should consider component management with classloader
> isolation, a separate concern. By _assuming_ independence between
> blocks and component management, anyone who feel the itch can start
> working on class loader isolation right away. Then we can integrate
> the component management stuff in the blocks later if we feel the
> need. And if we don't, we saved ourself from considerable complexity.
I have that itch, and to tell you the truth, the kernel in SVN
_already_ does a some level of classloader isolation. Thing is, I use
it on a daily basis for an XML repository we have (in house) at VNU,
and the more I use it, the more I see the problems of the _current_
approach.
I hit a dead end with the implementation in CVS last week when I wanted
to upgrade JAXP from 1.2 to 1.3, running on a 1.4 JVM, but _not_ using
the -Djava.endorsed.dirs JVM flag. I can't tell you the issues on
trying to isolate the JAXP 1.3 contract and kernel plug-in from the
underlying JVM, but with a bit of luck, I found what's wrong, and we
should be up and running with the new kernel (here at VNU) in a
week-or-so...
>
> --- o0o ---
>
> Ok, taking a look at the technical issues. IIUC, the problem that you
> describe does not depend on whether a block contains Java classes or
> libraries or not. The problem appears as soon as a block tries to
> expose a component. Then the user of the component must have get all
> the eposed interfaces from its parent classloader. And when we add
> mutual dependencies between blocks and different versions of the
> interfaces, it start feeling more like headache than fun.
PRECISELY, you got this spot on...
>
> So let's take a look at some different levels of block issolation, and
> their properties (the pipeline is exposed in all cases):
>
> 1. No component exposing
> ------------------------
>
> The block doesn't expose any components at all, not even VPCs. The
> block can still contain as much own Java code as it want. It gets a
> parent classloader with the core Cocoon functionality and adds it own
> classes in its own classloader. The block must obviously be compatible
> with the Cocoon core, but there are no version interdependencies on
> the Java level between blocks.
>
> It can even expose its classloader to extending blocks without
> problems. The extending block must of course be compatible at the Java
> level with the extended one, but still no circular dependencies.
>
> We can package the VPCs as (block) web services (ws) instead with:
>
> VPCReader - Stream -> Stream ws
> VPCGenerator - Stream -> XML (SAX) ws
> VPCTransformer - XML -> XML ws
> VPCSerializer - XML -> Stream ws
>
> by making the block protocol competent enough and introducing pipeline
> components that talk with the corresponding ws, we get something that
> works like and is as efficient as VPCs.
And this can be achieved with the running ECM+++ by Carsten, as every
sitemap _HAS_ its own classloader. No need to change the underlying
implementation until we have a final solution, right?
> 2. Exposing VPCs only
> ---------------------
>
> Like the previous alternative but exposing VPCs. If we go for this,
> Sylvain's proposal about separating VPCs from other componsnts in the
> sitemap is preferable IMO.
I like this approach, but should be combined with the previous one.
ECM+++ already provides isolate class loaders for sitemaps (and
therefore blocks). The idea of exposing VPCs only is that an XSLT
transformer is nothing without its stylesheet.. A I18N transformer is
nothing without its catalog file.
Now, the transformers, serializers, generators, blablabla, EXPOSED by a
block must be _full_ components ready to implement a contract saying
(for example) transform an XML in the "book.dtd" into a XML in the
"xhtml11.dtd". You want to write it in JAva? Native C code? Xalan +
XSLT? That's not a problem, but what is exposed is not a class, it is
an implementation of the o.a.c.Transformer interface converting
"book.dtd" into "xhtml11.dtd".
> 3. Exposing "sitemap components" only
> -------------------------------------
>
> In this alternative a block can expose components with interfaces that
> allready are defined in Cocoon core, or possibly a well defined subset
> of it. As all blocks gets a common parent classloader that contains
> these interfaces, we still don't get the "mutual dependency of forign
> blocks" nightmare.
>
> 4. Expose what you choose to
> ----------------------------
>
> This is, AFAIU, the original block idea. It requires classloader
> isolation and dependency resolution to work.
>
> 5. Expose your classes to everyone
> ----------------------------------
>
> This is what we do today. All classes/jars from blocks are loaded into
> a common classloader that is available for everyone. We can combine
> the idea of having a block aware component manager with a common
> classloader.
I prefer a combination of 1 and 2 as I said above to 3, 4 and 5 :-P
>
> --- o0o ---
>
> I think we can rule out alternative 5. at once. Its hard enough to get
> it to work today when we as a community control all the blocks. It was
> no accident that we choosed to move all libraries to lib/optional.
> There is no chance that this will scale, when external organizations
> start to create blocks.
+1 :-P
>
> Alternative 4. would maybe be nice, but as Pier I start to doubt that
> this is the right level of SoC, pipelines and Java components are
> quite different levels of abstraction. And it certainly add alot of
> compleity.
I am glad that my usual broken "brain2email" transformer is producing
something comprehensible by others! :-P
> I would prefer alternative 1. or possibly 2. Its clean and simple and
> solve my current needs.
1 AND 2? :-P
>
> --- o0o ---
>
> IMO, we should start simple and add functionality when needed. Remove
> things is much harder. Also even if we chose to go for alternative 4.
> an important message from Pier that we should take into account is
> that component exposure adds complexity. So if we go that way, we
> should have mechanisms that so that we can have detailed control over
> what components and classes a block exposes. A block that exposes much
> will be much more likely to create conflicts with other blocks.
Glad that we have agreement on this! :-D
Pier
Re: Java components in blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Pier Fumagalli wrote:
> On 13 Apr 2005, at 18:08, Vadim Gritsenko wrote:
>
>> Pier Fumagalli wrote:
>>
>>>
>>> I'm just saying that the concerns are separate: a block provides
>>> generators, transformers, serializers, ... to other blocks, but
>>> those are de-coupled from the real java components (if any) doing
>>> the job.
>>
>>
>> But *real* blocks, IIUC, *are* the only way to bring new (java)
>> components into the system, because Cocoon core lacks all the
>> optional components, and, at the minimum, consists only of
>> environment, treeprocessor, and block manager.
>>
>> So in extreme case xslt processor component itself is optional and
>> provided by the xslt real block.
>
>
> I think that we're mixing again the idea behind a Cocoon block and an
> Avalon block.
>
> As far as I've understood Cocoon blocks (and I might be _ENTIRELY_
> wrong here) Cocoon blocks do not expose (for example) an XSLT Java
> transformer, but expose a transformer converting a specified format
> into another.
AFAIU, you are entirely wrong ;) considering what have been discussed
before. Neither the less, what you propose makes perfect sense to me. My
idea was to start implementing the pipline part of the blocks management
system, as we IMO understand enough about it to be able to work on that.
Then add the possiblity to expose components and take care of class
loader issues in a later step.
After having read your mails I agree that we at least for the time
being, should consider component management with classloader isolation,
a separate concern. By _assuming_ independence between blocks and
component management, anyone who feel the itch can start working on
class loader isolation right away. Then we can integrate the component
management stuff in the blocks later if we feel the need. And if we
don't, we saved ourself from considerable complexity.
--- o0o ---
Ok, taking a look at the technical issues. IIUC, the problem that you
describe does not depend on whether a block contains Java classes or
libraries or not. The problem appears as soon as a block tries to expose
a component. Then the user of the component must have get all the eposed
interfaces from its parent classloader. And when we add mutual
dependencies between blocks and different versions of the interfaces, it
start feeling more like headache than fun.
So let's take a look at some different levels of block issolation, and
their properties (the pipeline is exposed in all cases):
1. No component exposing
------------------------
The block doesn't expose any components at all, not even VPCs. The block
can still contain as much own Java code as it want. It gets a parent
classloader with the core Cocoon functionality and adds it own classes
in its own classloader. The block must obviously be compatible with the
Cocoon core, but there are no version interdependencies on the Java
level between blocks.
It can even expose its classloader to extending blocks without problems.
The extending block must of course be compatible at the Java level with
the extended one, but still no circular dependencies.
We can package the VPCs as (block) web services (ws) instead with:
VPCReader - Stream -> Stream ws
VPCGenerator - Stream -> XML (SAX) ws
VPCTransformer - XML -> XML ws
VPCSerializer - XML -> Stream ws
by making the block protocol competent enough and introducing pipeline
components that talk with the corresponding ws, we get something that
works like and is as efficient as VPCs.
2. Exposing VPCs only
---------------------
Like the previous alternative but exposing VPCs. If we go for this,
Sylvain's proposal about separating VPCs from other componsnts in the
sitemap is preferable IMO.
3. Exposing "sitemap components" only
-------------------------------------
In this alternative a block can expose components with interfaces that
allready are defined in Cocoon core, or possibly a well defined subset
of it. As all blocks gets a common parent classloader that contains
these interfaces, we still don't get the "mutual dependency of forign
blocks" nightmare.
4. Expose what you choose to
----------------------------
This is, AFAIU, the original block idea. It requires classloader
isolation and dependency resolution to work.
5. Expose your classes to everyone
----------------------------------
This is what we do today. All classes/jars from blocks are loaded into a
common classloader that is available for everyone. We can combine the
idea of having a block aware component manager with a common classloader.
--- o0o ---
I think we can rule out alternative 5. at once. Its hard enough to get
it to work today when we as a community control all the blocks. It was
no accident that we choosed to move all libraries to lib/optional. There
is no chance that this will scale, when external organizations start to
create blocks.
Alternative 4. would maybe be nice, but as Pier I start to doubt that
this is the right level of SoC, pipelines and Java components are quite
different levels of abstraction. And it certainly add alot of compleity.
I would prefer alternative 1. or possibly 2. Its clean and simple and
solve my current needs.
--- o0o ---
IMO, we should start simple and add functionality when needed. Remove
things is much harder. Also even if we chose to go for alternative 4. an
important message from Pier that we should take into account is that
component exposure adds complexity. So if we go that way, we should have
mechanisms that so that we can have detailed control over what
components and classes a block exposes. A block that exposes much will
be much more likely to create conflicts with other blocks.
/Daniel
Re: Java components in blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 13 Apr 2005, at 18:08, Vadim Gritsenko wrote:
> Pier Fumagalli wrote:
>>
>> I'm just saying that the concerns are separate: a block provides
>> generators, transformers, serializers, ... to other blocks, but those
>> are de-coupled from the real java components (if any) doing the job.
>
> But *real* blocks, IIUC, *are* the only way to bring new (java)
> components into the system, because Cocoon core lacks all the optional
> components, and, at the minimum, consists only of environment,
> treeprocessor, and block manager.
>
> So in extreme case xslt processor component itself is optional and
> provided by the xslt real block.
I think that we're mixing again the idea behind a Cocoon block and an
Avalon block.
As far as I've understood Cocoon blocks (and I might be _ENTIRELY_
wrong here) Cocoon blocks do not expose (for example) an XSLT Java
transformer, but expose a transformer converting a specified format
into another.
Again, an example using Forrest.
The forrest block (ForrestBlock) requires two different blocks
implementing the following interfaces:
- ForrestRepository: a block exposing a generator that given a uri path
(/2.1/whatsnew) generate an XML document in the <!DOCTYPE book PUBLIC
"-//APACHE//DTD Cocoon Documentation Book V1.0//EN"
"book-cocoon-v10.dtd"> format
- ForrestSkin: a block exposing a serializer converting a document in
the above mentioned format into something usable by a browser and
exposing a mountable pipeline containing the resources (images, css,
javascripts, ...) that the client will see...
The ForrestBlock might have a sitemap which might look something like
this:
<map:sitemap>
<map:components>
<map:generators>
<map:generator name="repository"
src="block:repository:/generators/repository"/>
</map:generators>
<map:serializers>
<map:serializer name="renderer"
src="block:skin:/serializers/renderer"/>
</map:serializers>
</map:components>
<map:pipelines>
<map:match pattern="resources/**">
<map:mount src="block:skin:/pipelines/resources"
uri-prefix="resources/"/>
</map:match>
<map:match pattern="**">
<map:generate type="repository" src="{1}"/>
<map:serialize type="html"/>
</map:match>
</map:pipelines>
</map:sitemap>
Now, the "repository" implementation block might expose a virtual
generator like this:
<map:block>
<map:generators>
<map:generator name="repository">
<map:generate type="file" src="{1}"/>
</map:generator>
</map:generators>
</map:block>
but another implementation might specify the following:
<map:block>
<map:generators>
<map:generator name="repository">
<map:generate type="sql" src="select content from documents where
id = '{1}'"/>
<map:transform type="xslt" src="sql2document.xslt"/>
</map:generator>
</map:generators>
</map:block>
In the same way, the "skin" implementation block
<map:block>
<map:serializers>
<map:serializer name="renderer">
<map:transform type="xslt" src="document2html.xslt"/>
<map:serialize type="html"/>
</map:serializer>
</map:serializers>
<map:pipelines>
<map:pipeline name="resources">
<map:match "**.jpg">
<map:read type="resource" mime-type="images/jpeg"
src="resources/images/{1}.jpeg"/>
</map:match>
</map:pipeline>
</map:pipelines>
</map:block>
but again, another implementation might do different:
<map:block>
<map:serializers>
<map:serializer name="renderer">
<map:transform type="stx" src="document2wap.stx"/>
<map:serialize type="wap"/>
</map:serializer>
</map:serializers>
<map:pipelines>
<map:pipeline name="resources">
<map:match "**.gif">
<map:read type="image" mime-type="images/gif"
src="resources/images/{1}.jpeg"
width="20" height="20" scale="yes"/>
</map:match>
</map:pipeline>
</map:pipelines>
</map:block>
So far, easily enough, we can see how the "ForrestBlock" interacts with
the block interfaces it requires, and how those can be composed
differently. Easy enough, so in the sitemap we want to use from cocoon:
<map:sitemap>
...
<map:match pattern="wap/**">
<map:mount block="ForrestBlock">
<map:parameter name="repository" value="SQLForrestRepository"/>
<map:parameter name="renderer" value="WAPForrestRenderer"/>
</map:mount>
</map:match>
<map:match pattern="html/**">
<map:mount block="ForrestBlock">
<map:parameter name="repository" value="SQLForrestRepository"/>
<map:parameter name="renderer" value="HTMLForrestRenderer"/>
</map:mount>
</map:match>
...
</map:sitemap>
Now, without considering the real java component which are doing the
job (XSLT transformer, IMAGE reader, STX transformer, ...) the block
implementation can be entirely developed using the technology (Avalon's
ECM/Carsten's ECM+++) without caring too much about Java components
themselves.
You can simply deploy several versions of the same interface block in
the same container, and given that we're taking the problem of loading
classes out of the picture, blocks can work as they're supposed to be
without thinking much about the crummy Java machinery behind them.
Also, think about one thing: is a transformer exposed by a cocoon block
a specific XSL or STX or (you name it) transformer, or is it a
pseudo-component which per se knows how to translate the input to its
output?
The java component "XSLT transformer" doesn't do anything "by itself",
it becomes a "Cocoon transformer" (it transforms a specified document
into another) only when the java XSLT component is associated with the
XSLT.
But the same "Cocoon transformer" can be created by associating the STX
"java component" with an equivalent STX stylesheet.
Now, there is also another concern that falls into this ballpark.
In my view, I think that our "ForrestBlock" block will only be allowed
declare its requirements through interface blocks. This means that for
a block to work properly, its requirements must be abstracted entirely
from the specific implementations.
But a block implementation MIGHT (in my view) require a
_very_specific_java_component_ to fulfill the contract it implements.
For example, in the case of the "ForrestRepository" interface
implementation, the generator exposed is abstracted entirely, but to
implement this component I can require a SQLGenerator (Java component),
a FileGenerator (Java component), a JcrGenerator (Java component), and
so on and so forth.
So, in my view, either we define an interface cocoon block for each
possible component (95% of those will only have ONE implementation), or
we allow blocks to require specific JAva components to do their jobs,
without relying on interfaces.
So, at the end of the day, the java componentization of how a generic
generator (for example) exposed by a block is a completely separate,
different, concern from the one implied in the blocks: I want a
generator that given a URI produces a document of "book" doctype.
My 0.02 £
Pier
Re: Java components in blocks
Posted by Vadim Gritsenko <va...@reverycodes.com>.
Pier Fumagalli wrote:
> I'm
> just saying that the concerns are separate: a block provides generators,
> transformers, serializers, ... to other blocks, but those are de-coupled
> from the real java components (if any) doing the job.
But *real* blocks, IIUC, *are* the only way to bring new (java) components into
the system, because Cocoon core lacks all the optional components, and, at the
minimum, consists only of environment, treeprocessor, and block manager.
So in extreme case xslt processor component itself is optional and provided by
the xslt real block.
Vadim
Re: Java components in blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 13 Apr 2005, at 12:40, Reinhard Poetz wrote:
> Pier Fumagalli wrote:
>
>> Ok, here is where I don't agree...
>> By adding to blocks the capability of "bringing components" with
>> them, we enter a quite big minefield, imposed by the restrictions of
>> the Java VM. The complexity escalates at this point as now blocks
>> must be aware of their class-loading mechanism, and the component
>> manager must be aware of blocks and interfaces.
>> For example, classes and libraries included in an interface block
>> must be loaded by the parent ClassLoader of the blocks using
>> (implementing, extending, requiring) them to avoid
>> ClassCastException(s).
>> So, alongside blocks and their deployment graph (block A extends B,
>> implements C, ... blabla ...) we need to start keep tracking also the
>> classes included in those blocks, and create a completely different
>> tree based on the class loading structure that those represent.
>> And then you get into the minefield of versioning... If it's easy to
>> determine that two versions of the same block can co-exist (by using
>> two separate class loaders children of the same parent) without
>> creating too many problems, what happens in the case of two
>> interfaces with different versions? The class loading tree should (at
>> this point) become very fine-grained and start building multiple
>> class-loaders for multiple versions of the same interface, and then
>> build as children of those class loaders for the individual blocks
>> "using" them, ...
>
> Hmmm, are we really the first project tackling this? How did Eclipse
> solved this?
I'm not saying that we are the first, nor that it can't be solved. I'm
just saying that the concerns are separate: a block provides
generators, transformers, serializers, ... to other blocks, but those
are de-coupled from the real java components (if any) doing the job.
For example, a "mailprovider" implementation used for the block
"sendmail" will have to provide a generator that accepts URI like
"imap://user:password@server/folder/id", and generates a MimeDocument
XML stream.
It doesn't matter to the block what components will be used to generate
the XML, I can use a single component to do this job, or I can use a
virtual component calling god knows what generator and a number of
different transformers to achieve the same output, it doesn't matter to
the block using the interface implementation.
And it shouldn't matter to the block deployment frameworks whether
those components are written in Java or JavaScript or whatever... And
neither it should matter what kind of Java ClassLoading components do
require to be available to blocks, right?
Pier
Java components in blocks
Posted by Reinhard Poetz <re...@apache.org>.
Pier Fumagalli wrote:
> Ok, here is where I don't agree...
>
> By adding to blocks the capability of "bringing components" with them,
> we enter a quite big minefield, imposed by the restrictions of the Java
> VM. The complexity escalates at this point as now blocks must be aware
> of their class-loading mechanism, and the component manager must be
> aware of blocks and interfaces.
>
> For example, classes and libraries included in an interface block must
> be loaded by the parent ClassLoader of the blocks using (implementing,
> extending, requiring) them to avoid ClassCastException(s).
>
> So, alongside blocks and their deployment graph (block A extends B,
> implements C, ... blabla ...) we need to start keep tracking also the
> classes included in those blocks, and create a completely different tree
> based on the class loading structure that those represent.
>
> And then you get into the minefield of versioning... If it's easy to
> determine that two versions of the same block can co-exist (by using two
> separate class loaders children of the same parent) without creating too
> many problems, what happens in the case of two interfaces with different
> versions? The class loading tree should (at this point) become very
> fine-grained and start building multiple class-loaders for multiple
> versions of the same interface, and then build as children of those
> class loaders for the individual blocks "using" them, ...
Hmmm, are we really the first project tackling this? How did Eclipse solved this?
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Directory structure of blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 12 Apr 2005, at 15:46, Stefano Mazzocchi wrote:
> Pier Fumagalli wrote:
>> On 11 Apr 2005, at 15:50, Reinhard Poetz wrote:
>>> Daniel Fagerstrom wrote:
>>>
>>>> Ok, I had some remembrance that we had decided to have a particular
>>>> directory structure on the COBs, but I couldn't find any
>>>> documentation on that, do you have any link or example?
>>>
>>>
>>> no. But AFAIK there aren't many rules. Those that I know of are:
>>>
>>> Blocks have a block.xml descriptor and a COB-INF directory, that can
>>> contain a directory "classes" and "lib".
>>> The block's root sitemap (if there exists any) is defined by the
>>> block.xml.
>>>
>>> I don't know why we named it "COB-INF" but there was (still is?) a
>>> good reason for this because I remember some long discussion. Apart
>>> from this I'm not sure where to put "block.xml". In analogy to WAR
>>> files it should be "COB-INF/block.xml".
>>>
>>> If the reasons for COB-INF vanished in the meantime, I propose
>>> following directory structure:
>>>
>>> --------------------------------------------------------------
>>> [cocoon block] [DIR]
>>> |
>>> +-- BLOCK-INF [DIR]
>>> +-- block.xml
>>> +-- classes [DIR]
>>> +-- lib [DIR]
>>> --------------------------------------------------------------
>>>
>>> WDYT?
>> Again, to sound stupid, but why in the world a cocoon block would
>> contain classes and libraries?
>
> A block defines both services (thru its sitemap) and components (thru
> the classloader).
>
> Presence of either is optional. If a block has only classes and
> libraries (or files in the class paths), it only works as a component
> provider.
>
> If it has only a sitemap, it will require components from another
> block.
>
> If it has both, it can expose services that use its own components and
> expose these components to the outside.
>
> The 'components' to expose will be declared in the block descriptor,
> this allows us to avoid 'public' classes of the libraries shipped with
> the block to be misconsidered as components.
>
>> Those should be external "components" _required_ by the block,
>> right???
>
> see above: blocks brings components with them.
>
> Also note that an 'interface' block is very likely to contain the
> component interfaces (and the remaining classes that these interfaces
> need to function).
>
> So, for the sitemap, the block interface is just a URI, but for the
> component part, the block interface *contains* the interfaces.
>
> this will require some more complex build systems as even compile time
> will require discovery and installation of components (this is the
> same problem that Merlin had and solved with Magic).
Ok, here is where I don't agree...
By adding to blocks the capability of "bringing components" with them,
we enter a quite big minefield, imposed by the restrictions of the Java
VM. The complexity escalates at this point as now blocks must be aware
of their class-loading mechanism, and the component manager must be
aware of blocks and interfaces.
For example, classes and libraries included in an interface block must
be loaded by the parent ClassLoader of the blocks using (implementing,
extending, requiring) them to avoid ClassCastException(s).
So, alongside blocks and their deployment graph (block A extends B,
implements C, ... blabla ...) we need to start keep tracking also the
classes included in those blocks, and create a completely different
tree based on the class loading structure that those represent.
And then you get into the minefield of versioning... If it's easy to
determine that two versions of the same block can co-exist (by using
two separate class loaders children of the same parent) without
creating too many problems, what happens in the case of two interfaces
with different versions? The class loading tree should (at this point)
become very fine-grained and start building multiple class-loaders for
multiple versions of the same interface, and then build as children of
those class loaders for the individual blocks "using" them, ...
I can go on for hours.
This, of course, ties in Cocoon with its component manager, and if
today we're using ECM+++ (great work Carsten), if we ever decide to use
(or integrate) another container, well, I can see how we'll end up
having to rewrite 3/4 of the dependancy calculation and object
instantiation code (which, BTW, works _right now_).
If on the other hand we separate entirely components and java code from
blocks, the implementation becomes _much_ more easy...
My idea would be that a block (for example, our ForrestSkin
implementation) _requires_ a component (not a block) that performs XSLT
transformations.
Requiring this, it will expose (for example) a "Virtual Transformer"
called "document2html" which will be implemented as XSLT Transformer +
document2html.xslt.
Another skin for forrest could (at the same time), implement the same
interface and provide the same "document2html" transformer by requiring
the STX transformer and "joining it up" with "document2html.stx".
From outside, the two blocks _both_ provide a transformer, which does
exactly the same job, but rely on the component manager underneath to
solve the class loading problem of providing a component with a given
role, add their value to it (the XSLT, STX, ... stylesheet) and expose
it to the users of the implemented interface.
And this frees up the blocks implementation from the underlying
component management, java, class loaders and so on... I feel this a
lot more cleaner in terms of separating the concerns of cocoon and
blocks versus the concerns of the Java platform and its classloading
cumbersomeness...
Pier
Re: Directory structure of blocks
Posted by Stefano Mazzocchi <st...@apache.org>.
Pier Fumagalli wrote:
> On 11 Apr 2005, at 15:50, Reinhard Poetz wrote:
>
>> Daniel Fagerstrom wrote:
>>
>>> Ok, I had some remembrance that we had decided to have a particular
>>> directory structure on the COBs, but I couldn't find any
>>> documentation on that, do you have any link or example?
>>
>>
>> no. But AFAIK there aren't many rules. Those that I know of are:
>>
>> Blocks have a block.xml descriptor and a COB-INF directory, that can
>> contain a directory "classes" and "lib".
>> The block's root sitemap (if there exists any) is defined by the
>> block.xml.
>>
>> I don't know why we named it "COB-INF" but there was (still is?) a
>> good reason for this because I remember some long discussion. Apart
>> from this I'm not sure where to put "block.xml". In analogy to WAR
>> files it should be "COB-INF/block.xml".
>>
>> If the reasons for COB-INF vanished in the meantime, I propose
>> following directory structure:
>>
>> --------------------------------------------------------------
>> [cocoon block] [DIR]
>> |
>> +-- BLOCK-INF [DIR]
>> +-- block.xml
>> +-- classes [DIR]
>> +-- lib [DIR]
>> --------------------------------------------------------------
>>
>> WDYT?
>
>
> Again, to sound stupid, but why in the world a cocoon block would
> contain classes and libraries?
A block defines both services (thru its sitemap) and components (thru
the classloader).
Presence of either is optional. If a block has only classes and
libraries (or files in the class paths), it only works as a component
provider.
If it has only a sitemap, it will require components from another block.
If it has both, it can expose services that use its own components and
expose these components to the outside.
The 'components' to expose will be declared in the block descriptor,
this allows us to avoid 'public' classes of the libraries shipped with
the block to be misconsidered as components.
> Those should be external "components"
> _required_ by the block, right???
see above: blocks brings components with them.
Also note that an 'interface' block is very likely to contain the
component interfaces (and the remaining classes that these interfaces
need to function).
So, for the sitemap, the block interface is just a URI, but for the
component part, the block interface *contains* the interfaces.
this will require some more complex build systems as even compile time
will require discovery and installation of components (this is the same
problem that Merlin had and solved with Magic).
--
Stefano.
Re: Directory structure of blocks
Posted by Vadim Gritsenko <va...@reverycodes.com>.
Pier Fumagalli wrote:
> On 11 Apr 2005, at 15:50, Reinhard Poetz wrote:
>
>> [cocoon block] [DIR]
>> |
>> +-- BLOCK-INF [DIR]
>> +-- block.xml
>> +-- classes [DIR]
>> +-- lib [DIR]
>
>
> Again, to sound stupid, but why in the world a cocoon block would
> contain classes and libraries? Those should be external "components"
> _required_ by the block, right???
But those (external "components", ex: fo2pdf serializer) are Cocoon Blocks by
themselves, so where this fop.jar goes?
Vadim
Re: Directory structure of blocks
Posted by Pier Fumagalli <pi...@betaversion.org>.
On 11 Apr 2005, at 15:50, Reinhard Poetz wrote:
> Daniel Fagerstrom wrote:
>
>> Ok, I had some remembrance that we had decided to have a particular
>> directory structure on the COBs, but I couldn't find any
>> documentation on that, do you have any link or example?
>
> no. But AFAIK there aren't many rules. Those that I know of are:
>
> Blocks have a block.xml descriptor and a COB-INF directory, that can
> contain a directory "classes" and "lib".
> The block's root sitemap (if there exists any) is defined by the
> block.xml.
>
> I don't know why we named it "COB-INF" but there was (still is?) a
> good reason for this because I remember some long discussion. Apart
> from this I'm not sure where to put "block.xml". In analogy to WAR
> files it should be "COB-INF/block.xml".
>
> If the reasons for COB-INF vanished in the meantime, I propose
> following directory structure:
>
> --------------------------------------------------------------
> [cocoon block] [DIR]
> |
> +-- BLOCK-INF [DIR]
> +-- block.xml
> +-- classes [DIR]
> +-- lib [DIR]
> --------------------------------------------------------------
>
> WDYT?
Again, to sound stupid, but why in the world a cocoon block would
contain classes and libraries? Those should be external "components"
_required_ by the block, right???
Pier
Re: Directory structure of blocks
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Reinhard Poetz wrote:
> Daniel Fagerstrom wrote:
>
>> Ok, I had some remembrance that we had decided to have a particular
>> directory structure on the COBs, but I couldn't find any documentation
>> on that, do you have any link or example?
>
>
> no. But AFAIK there aren't many rules. Those that I know of are:
>
> Blocks have a block.xml descriptor and a COB-INF directory, that can
> contain a directory "classes" and "lib".
> The block's root sitemap (if there exists any) is defined by the block.xml.
>
> I don't know why we named it "COB-INF" but there was (still is?) a good
> reason for this because I remember some long discussion. Apart from this
> I'm not sure where to put "block.xml". In analogy to WAR files it should
> be "COB-INF/block.xml".
>
> If the reasons for COB-INF vanished in the meantime, I propose following
> directory structure:
>
> --------------------------------------------------------------
> [cocoon block] [DIR]
> |
> +-- BLOCK-INF [DIR]
> +-- block.xml
> +-- classes [DIR]
> +-- lib [DIR]
> --------------------------------------------------------------
>
> WDYT?
Should do the work AFAICS, we will see if we need anything else.
/Daniel
Directory structure of blocks
Posted by Reinhard Poetz <re...@apache.org>.
Daniel Fagerstrom wrote:
> Ok, I had some remembrance that we had decided to have a particular
> directory structure on the COBs, but I couldn't find any documentation
> on that, do you have any link or example?
no. But AFAIK there aren't many rules. Those that I know of are:
Blocks have a block.xml descriptor and a COB-INF directory, that can contain a
directory "classes" and "lib".
The block's root sitemap (if there exists any) is defined by the block.xml.
I don't know why we named it "COB-INF" but there was (still is?) a good reason
for this because I remember some long discussion. Apart from this I'm not sure
where to put "block.xml". In analogy to WAR files it should be "COB-INF/block.xml".
If the reasons for COB-INF vanished in the meantime, I propose following
directory structure:
--------------------------------------------------------------
[cocoon block] [DIR]
|
+-- BLOCK-INF [DIR]
+-- block.xml
+-- classes [DIR]
+-- lib [DIR]
--------------------------------------------------------------
WDYT?
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Re: Starting to work on the Block[s]Manager
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Reinhard Poetz wrote:
> Daniel Fagerstrom wrote:
<snip/>
>> To be able to start I need some deployed blocks and a wiring.xml
>
> see
> http://svn.apache.org/repos/asf/cocoon/trunk/src/schema/wiring-schema-1.0.xsd
>
>
> This should be the contract.
>
>> to test things against. Do you have any suggestions about how to
>> achieve that?
>
>
> after reading "The Pragmatic Programmer" we should follow Hunt's and
> Thomas' "tracer bullets" idea: we setup a complete system and make the
> key parts working ASAP and show that the the concept works. (!=
> prototype!!!)
Have not read that one, but I had something like that in mind.
> In concrete, if I were you, I would write the wiring.xml by hand, make
> sure that it validates against the above schema (note: this schema is
> NOT carved in stone - it should be driven by *your* needs and not
> mine!) and put it into /WEB-INF/blocks/wiring.xml.
Sure. I thought that if you allready had something working or almost
working we could use that. But until then I'll write something by hand.
> The wired blocks have an attribute "location" which only supports file
> locations:
>
> <block id="http://mycompany.com/webmail/1.3.43"
> location="./384938958499">
>
> which could point during development whereever you want to:
>
>
> <block id="http://mycompany.com/webmail/1.3.43"
> location="../../../bla/myBlock">
>
> I'd propose http://svn.apache.org/repos/asf/cocoon/trunk/src/test/
I go for that.
<snip/>
> the contract is the XML schema (cob-schema and wiring-schema). As long
> as they don't change, there shouldn't be any problems on both sides.
Ok, I had some remembrance that we had decided to have a particular
directory structure on the COBs, but I couldn't find any documentation
on that, do you have any link or example?
/Daniel
Re: Starting to work on the Block[s]Manager
Posted by Reinhard Poetz <re...@apache.org>.
Daniel Fagerstrom wrote:
> Reinhard Poetz wrote:
>
>> Daniel Fagerstrom wrote:
>
>
> <snip/>
>
>>> The SingleBlockLocator should be in src/impl/ rather test/junit I
>>> assume. Now it is not found during compilation.
>>
>>
>>
>> fixed, thanks for reviewing
>>
>> (being happy that at least one person has had a look at it :-) )
>
>
> Not so much to be happy about yet ;) I checked out the code and tried to
> compile it.
>
> The reason for that is that I want to start working on the
> Block[s]Manager and the block protocol.
yeah!
> After the recent discussion
> about the block protocol I think we know enough to be able to implement
> the sitemap based part of real blocks. We still need to research more
> about how to export components, but we can take care about that in the
> next step.
yes
> To be able to start I need some deployed blocks and a wiring.xml
see
http://svn.apache.org/repos/asf/cocoon/trunk/src/schema/wiring-schema-1.0.xsd
This should be the contract.
> to test
> things against. Do you have any suggestions about how to achieve that?
after reading "The Pragmatic Programmer" we should follow Hunt's and Thomas'
"tracer bullets" idea: we setup a complete system and make the key parts working
ASAP and show that the the concept works. (!= prototype!!!)
In concrete, if I were you, I would write the wiring.xml by hand, make sure that
it validates against the above schema (note: this schema is NOT carved in stone
- it should be driven by *your* needs and not mine!) and put it into
/WEB-INF/blocks/wiring.xml.
The wired blocks have an attribute "location" which only supports file locations:
<block id="http://mycompany.com/webmail/1.3.43"
location="./384938958499">
which could point during development whereever you want to:
<block id="http://mycompany.com/webmail/1.3.43"
location="../../../bla/myBlock">
I'd propose http://svn.apache.org/repos/asf/cocoon/trunk/src/test/
> Can the block deployer deploy blocks yet?
Unfortunatly not, will take me some more weekends.
> Do you have any deployed
> example blocks somewhere?
no
>
> I think that it would be best to have some deployed blocks with wiring
> that are checked in into the SVN, possibly in within the block-deployer
> area.
either here or at trunk. svn:externals will be our friend. (I'd put them into
http://svn.apache.org/repos/asf/cocoon/trunk/src/test/)
> Then I could use that as an external svn link into trunk for the
> testing. By keeping the example deployment in the block-deployer it will
> be easier to keep the block deployer and the block manager in synch.
the contract is the XML schema (cob-schema and wiring-schema). As long as they
don't change, there shouldn't be any problems on both sides.
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------
Starting to work on the Block[s]Manager (was: svn commit: r160667
- in cocoon/whiteboard/block-deployer)
Posted by Daniel Fagerstrom <da...@nada.kth.se>.
Reinhard Poetz wrote:
> Daniel Fagerstrom wrote:
<snip/>
>> The SingleBlockLocator should be in src/impl/ rather test/junit I
>> assume. Now it is not found during compilation.
>
>
> fixed, thanks for reviewing
>
> (being happy that at least one person has had a look at it :-) )
Not so much to be happy about yet ;) I checked out the code and tried to
compile it.
The reason for that is that I want to start working on the
Block[s]Manager and the block protocol. After the recent discussion
about the block protocol I think we know enough to be able to implement
the sitemap based part of real blocks. We still need to research more
about how to export components, but we can take care about that in the
next step.
To be able to start I need some deployed blocks and a wiring.xml to test
things against. Do you have any suggestions about how to achieve that?
Can the block deployer deploy blocks yet? Do you have any deployed
example blocks somewhere?
I think that it would be best to have some deployed blocks with wiring
that are checked in into the SVN, possibly in within the block-deployer
area. Then I could use that as an external svn link into trunk for the
testing. By keeping the example deployment in the block-deployer it will
be easier to keep the block deployer and the block manager in synch.
WDYT?
/Daniel
Re: svn commit: r160667 - in cocoon/whiteboard/block-deployer
Posted by Reinhard Poetz <re...@apache.org>.
Daniel Fagerstrom wrote:
> reinhard@apache.org wrote:
>
>> Author: reinhard
>> Date: Sat Apr 9 01:31:30 2005
>> New Revision: 160667
>>
>> URL: http://svn.apache.org/viewcvs?view=rev&rev=160667
>> Log:
>> support for SingleBlockLocator (--> development deployment); improve
>> exception handling; more renaming RemoteBlock --> Block; unit tests
>>
>> Added:
>>
>> cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/LocatorFactoryTest.java
>>
>>
>> cocoon/whiteboard/block-deployer/test/junit/org/apache/cocoon/blockdeployer/repository/SingleBlockLocator.java
>>
>>
>>
> The SingleBlockLocator should be in src/impl/ rather test/junit I
> assume. Now it is not found during compilation.
fixed, thanks for reviewing
(being happy that at least one person has had a look at it :-) )
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------