Hi Gonzalo,

Nice to see you here and being interested in Rave.

First of all, thank you for your serious feedback and suggestions!
And to be clear upfront, I recognize and experience many if not most of the pain points you report. But I might have a different view on why we have them and how some can or should be solved, or not :)

Before trying to respond in more detail below, let me make a general observation upfront which IMO is important to note.

A project like Jetspeed, or Rave, is quite different when compared to many other projects you'll find at Apache. And that difference comes from the very different and diverse audiences or type of users:
- core developers, working on base or low level features
- UI/frontend developers, working on end-user experiences or customization/theming capabilities thereof - initial or casual reviewers needing a demo or a quick (and dirty) out-of-the-box starting point to play with and prototype possible use-cases - product users like integrators, mostly using the project 'as-is', only slightly customized to their needs or tastes - downstream developers using the project embedded, as building block or platform to build a new product on top

Such a high diversity on *type* of users is not very common, and very unlike you'll typically find with other projects, like Wicket. A more fair project comparison (that is: from this perspective) would be against projects like Liferay, JBoss Portal or within Apache maybe projects like Geronimo, OFBiz, etc.

The above is not an excuse but should be taken into account why projects like Jetspeed, Rave, etc. turn out to be more complex than for instance a casual developer/user would wish for. But simplifying it for one type of audience, like (only) for such developers, easily will make life much more miserable for others. And figuring out an 'easy fix' which takes into account all or most of the needs and requirements of the difference users, isn't so easy.

All that said, I do agree building Rave today (again) is probably more complicated than needed in some areas. Or maybe some technology choices should be reconsidered (if not already under reconsideration, please subscribe to the dev@ list as we tend to more discuss these things there). So you're feedback is very much appreciated and to be considered carefully by the team.


On 02/14/2013 05:39 PM, Gonzalo Aguilar Delgado wrote:
Hello,

I recently switched my attention to this project. Please let me do a short
introduction so I can explain me better.

I'm triying to build a marketing system from 2 years on. I was looking at most
advanced arquitectures that can grow with time. One of my elections was
jetspeed. Now I know it was a big mistake. Let me introduce why.

I found that the system is complex and overbloated. To change just the theme you
have to go through a nightmare of velocity templates, jsps, and javascript all
mixed on. No one designer wanted to take it and change it. Belive me. Nor do I.
[I created a component to render with wicket, it worked and was great to build a
new gui with it but I then realized that it would be a lot of effort for an
obsolete system, this is my opinion].

To make it worse you have to deal with a tailormade build system that only works
when ran from the command line, if something goes wrong you are out of luck. If
you want to implement some feature you have to deal with "overlays". Basicly the
build system copies the original version and then does a unzip of your package
over it. This is a pain to handle.

So I was thinking to build my own system based on Gadgets, Services, and a
lightweight interface. This is where *rave* comes in.

Rave is the project I was looking for.

But when I tried to use I found almost the same problems.

[First] The system is based on plan old JSP, and Tiles?:

Please, don't make same mistakes. Use wicket. Let me explain why.

1.- You can work with talented gui designers, web specialists. Otherway you
can't. Nobody is going to take JSP and change it, nobody is going to update
tiles. It will look much better if you can get some talented designers. Will
sell a lot more :-)
2.- You can separate completly the logic form the design. Let's make UI
attractive. This is a must!
3.- Is an apache project.
4.- Is well supported.
5.- Supports html5 + ajax. This is again a must!


I kind of agree with most reasons and arguments you give above. And I don't like JSP and/or Tiles either. But replacing it with Wicket isn't the 'golden bullet' either IMO. Wicket is a cool project and very feasible for many things. But I wouldn't choose it here and then force it upon every Rave downstream projects and users. There already has been several but minor discussions (mainly on the dev@ list) about front-end and server-side technology choices. I think currently the idea is more to move in the direction of mostly state-less server-side (REST) services and leverage them from smart client-side javascript based aggregation solutions, than picking (again) another, and more state-full, server-side web framework. Note: I do like the Wicket component and hierarchical aggregation capabilities, but IMO it is more fit for dedicated application oriented solutions but less for generic platform and service orchestration.


[Second] Keep it simple.

The build system is *again* overcomplex. Why do you do all this kind of stuff?

What's the "com.googlecode.mavenfilesync" stuff? Why it's all required?
Actually, it is or was intended to 'help' Eclipse users. Optionally, not required. I'm no longer an Eclipse user though, and I don't think many Rave developers are, so to be honest I have no idea if or how that works today.


I suppose it's not. Please do not make harder to new developers help. This was
something it was done in jetspeed that kept a lot of people *out* of the 
project.
Well, certainly not intentional. Please also realize and recognize the fact that it helped a lot of *other* people to use that project. But I fully agree with your general comment. We must strive to keep it as simple and easy as possible. And backtrack when something doesn't work out, or turns out no longer to be needed or used. This might be such a case.


It must be handled/deployed in eclipse/netbeans or whatever ide easily. I found
that maven cargo:deploy worked but I cannot start the application because
something failed in the configuration. Since everything was packed into wars I
had to:
    1.- Deploy it.
    2.- Look at it failing bad.
    3.- Try to fix it over the deployed instance.
    4.- Copy changed to the main project.

Well I wasn't able to inmediatly track it down. Because of the complexity of the
build system. When I try deploy it with eclipse, some files are missing. I don't
know why they appears when I do maven cargo:deploy. Where are they?
This is a very specific question, but without more specific information impossible to answer. Please raise a separate issue or question if you still need or want this answered.

Also please note that the mavenfilesync plugin configuration you mentioned above was provided exactly because of this use-case (automatically synchronize Eclipse file changes into the cargo deploy env).

Concerning the 'whatever' IDE support in general.
While I agree this really is a pain point, other than providing, checking in and maintaining IDE specific configurations, it is very difficult to generalize and standardize how to manage and debug a multi-war build/deploy configuration across IDEs. Single war projects typically are much easier, could use an embedded servlet engine even, but this is not our 'minimal' setup. We need at least two, three or even more webapps running concurrently (Shindig, Rave and optionally Wookie, other gadgets apps).


Of course I cannot debug because the cargo deployment is outside my eclipse
config. So I have to move things around to make them run from the vm instance
it's running inside eclipse.

Having 5 wars deployed for just a demo seems to be a lot. I'm sure there is a
explanation. But nothing seems to be obvious.

Well for this it should be obvious.
Our multi-war deployment setup is the logical consequence of a portal platform where gadget/widget services like Shindig and Wookie are serviced through an separate (web) application, and necessarily so. They might also be running on a different host. In practice and in production they most likely are. So while it *might* be possible to 'merge' (or worse: overlay) multiple of these wars into one for IDE development/debugging convenience, its a non-realistic/practical case. And IMO also technically undesirable (dependency conflict hell).

Anyway, it doesn't mean it cannot be made easier, but I expect it'll require more IDE specifics then. And we'll then have to deal with many different solutions, for Eclipse, Netbeans, IntelliJ IDEA, etc.
And it needs volunteers willing to set this up, and maintain it...


There is a ROOT context that seems to be the portal, because has a lot of html
and jps, but it can't be because there is already a portal context, so What's
this for?
That's Shindig which is deployed by default (because its 'easier') to ROOT.
You'll find the mapping and deployment configuration in the cargo plugin.


There is also a cargocpc context. That seems todo nothing... Can it be?
The cargocpc is a minimal app injected by cargo to help the plugin to be notified about the startup/shutdown of the container. Its the lightest possible app and should really not cause any side-effect or be in the way. So it is used and needed, but only during development and local cargo deploy.


Also wookie is deployed. Since it looks good because the project rely on wookie
for the gadgets, it's not. It seems to have a dependency on the persistence
libraries deployed with the project that makes it fail on start. [Maybe the
previous config fault?]
I agree the Wookie integration isn't ideal yet. Which also has been raised before on the dev@ list, just need some more attention to improve upon. And as we have several Wookie committers also on the Rave team, further discussing this and coordinating on it should be not a problem. And further input and proposal to improve it much appreciated.


In my opinion if wookie is not tightly integrated it should run completly
decoupled. If it can't be decoupled then do it right: Embed the system with a
connector an deploy it with the rest.
I agree we need to 'fix' the Wookie deployment and (database) management issues.
But also note that this concerns the demo and/or development setup only. And for those purposes I think integrating with Wookie, and demonstrating it, is very relevant, although using Wookie is optional and should remain so.

It might be possible maybe to provide some different development 'profiles' to include/exclude some components like Wookie. But we use Maven primarily, still, and Maven profiles are typically not recognized or appreciated well by IDEs either. But if you suggestions how to solve such things, please let us know!



----------------
----------------
So for me it leads to two things:

1.- Keep things easy and lightweight. [Wicket = +Designers]
2.- Let others to get hands dirty in the project without much hassle. [Easy to
build = More developers]


Hope you have this into account.

I think we will :)


Looks promising! I will surely fork it to see if I can contribute something.
Great, looking forward to it!


Thanks a lot!

PS: Just for reference in JIRA I missed the list in first place... ;-)
https://issues.apache.org/jira/browse/RAVE-892

I think I'll close that issue as it is more appropriate to discuss these things on the mailing list (and maybe better dev@ in this case).
JIRA really shouldn't be used for open discussions IMO.

Reply via email to