I like Ajit's recommendation, the RFC (along with a framework like
Stephan's) to allow some brainstorming.
I guess I feel quite odd. I posted some stuff yesterday or the day before
on the mod_perl list about Perrin's article and then I go to sleep after
subscribing to p5ee and then wake up to find like 50 messages in my in-box.
One of these days I need to move back to the other side of the world in the
USA to keep up with the conversations. :)
Anyway, I've found that there are too many messages to respond to
individually (I would blast the list with 15 messages) so I guess I'll
respond in one big post.
==
1) Although I think some of us disagree on some things, I see some semantic
differences of opinion that I hope we take them for what they are -- just
semantic rather than philosophical. And I promise to try to not fall into
that trap myself.
When using buzzwords, it's quite easy for people to come up with different
ones to describe the same thing. :)
2) I see a lot of talking about APIs. I believe that the best thing is to
reuse what is on CPAN and at most (taking from Robin's message -- my first
direct reply!!) a P5EE::xxx wrapper api.
Those that think otherwise should sit back and ask themselves -- "Would I
have time to implement it?" because if you don't, then chances are few
other people will either. So laziness is a virtue.
I like the idea of a P5EE::xxx API but feel that it would be better
reserved for Phase "2" of the P5EE initiative (My 2nd direct reply thanks
Greg for your Buffy quote) as I believe the first complete phase is
documenting what exists.
3) Greg McCarroll had many of the first comments I saw pretty well laid
out. I hope he accepts that I am not going to requote much of his post, but
I will try to address some specific things that stood out whilst I was
taking notes:
* That p5ee should not be 100MB tarball. I agree. I think bundles would be
much better but optional bundles. It's quite possible someone could grab
the p5ee bundle, but just as well that they might just grab a subset of
p5ee in a separate bundle.
* Not replicate j2ee. Again I agree, although I believe j2ee has many
lessons to learn from. Same for .Net (well really no lessons to learn from
other than not to charge developers US$1000 to join).
* Buzzwords in j2ee making developers feel happy. I disagree with this.
Greg I apologize if this comes across harsh, it may be a semantic
difference that I am disagreeing with and hope you and others don't take it
that way.
I know I did not start the p5ee initiative, but I certainly struck a small
cord by posting on mod_perl 2 days ago that I "feel" that j2ee was better
for some of these enterprise things and I "feel" better doing them in Java.
I have been programming in Perl and Java for a while and feel I choose the
easiest tool for the Job. In my case, I actually do in some cases believe
Java is easier and has less hurdles. One of those hurdles is documentation
and standardization when it comes to enterprise level APIs as well as
finding programmers that know those APIs to help me on the project.
It's not really about buzzwords. I don't believe you really think that so
many Java programmers in the world are only using Java because of
buzzwords. There is actually real code and real benefit in Java.
I think j2ee has real promise and real benefits. I truly believe Sun has a
good thing going for it. I also believe Perl has a good thing going for it,
but for "enterprise programming" it does lack documentation,
standardization, test cases, and programmers who do "enterprise"
programming and this is a very real weakness. It doesn't make Perl a weak
language any more than it makes Java a stronger language -- just that they
may be used in different situations.
4) Ajit - Had talked about an RFC process. I believe this is correct. P5EE
has been talking about by many people before... I think I recall it even
being mentioned at ApacheCon London.
But the bottom line is that different people have different things they
want to achieve out of P5EE and so it's important to brain storm for a few
days to see what comes out.
Then solidify that brainstorming (Stephan's webpage is one such attempt)
and provide structure to further RFCing.
Of course, a formal RFC would actually have structure from the start, :)...
But I think we are getting there especially with the constructive listing
of APIs that Paul Kulchenko, Chris Winters, Walt Knowles. John
Napiorkowski, and others have done last night (I hate all of you for your
long emails posted at night causing me to read this this morning and be
late for work! :))
5) Nat -- Said some good things but a couple I want to address.
First, do I feel the need for J2EE style beans? Well, I wasn't going to
respond but I saw some negative posts on beans in response so I feel
compelled to respond to those responses.
So I will say that I would see some benefit out of beans in Perl. There are
two things that are nice about beans. One, beans specify a common get/set
method API allowing introspection to determine properties of the object.
Two, bean state can be serialized so both the code and the state are
serialized side by side. To say that someone doesn't think beans are
important -- well, on the surface they aren't .. but they are important in
the sense that they are objects with serialized state and a common API for
exposing properties.
At minimum this is useful for creating an IDE that needs to know the state
of a given object so that the IDE can get and set the properties for you
and then "deploy" that bean inside the container. Otherwise how is the IDE
or other toolkit going to know how to tell you what the properties of the
object are? In Perl there's not even a syntax to say some methods are
public versus private nor to tell the difference between a cosntructor and
normal method! It sure would be nice if there was a true convention that
would make Perl "beans".
HOWEVER -- I do not necessarily believe that Perl beans are necessary for
P5EE initiative. I just wanted to explain to some of the naysayers that
beans are useful.
Second,
Java being no brainer for email, transaction, persistence.... I don't know
if I agree with all that. email is moderately easy but the interface is
basically SMTP and that's it. The transaction API is pretty good, but the
world of persistence is fairly fragmented in Java.
I think messaging was also mentioned. Of course, messaging is still new in
Java and I know very few people who have used a messaging server in Java at
all.
So what makes these things get "perceived" to be no brainers? I would guess
it's the documentation. A thread which I'll follow on later.
6) Chris Winters --
Hey, can someone please remember to include JAAS that he suggested earlier
yesterday. Java Authentication and Authorization Service. It is very
comprehensive and quite a useful API especially for services.
I think Paul's list is the most comprehensive, so whomever is writing this
down (assuming it's Stephan), please add JAAS. Just saying
"Authentication/Identification" isn't as comprehensively covered
I also really like Walt Knowles Introspection and Personalization API. The
Introspection API is really very similar to the notion of having Perl
"beans" as introspection is already part of the Perl language.
Personalization is also quite a useful API -- I am not sure it even exists
as a standard in Java yet.
7) OK, now to end with my own comments... they may not be original, but I
don't think they were said quite this way.
a) I believe that we may become too overzealous in P5EE initiative. I see
many topics being thrown about from the concept of just beans and
exceptions all the way to object persistence frameworks.
I believe that we need to categorize these things lest we try too much. It
is POSSIBLE that some of the things would be useful to PUSH in general as a
PERL initiative to support P5EE, but I don't think it should all be P5EE.
I view these categories as
Core Language Features
P5EE Features
Application Features
Core Language Features are Perl Bean standard, Exception and Error handling
standards, Logging, Diagnostics, etc. These should all be normal CPAN
modules. They shouldn't be considered part of an enterprise initiative as
they are just features that would be useful to build on for an "Enterprise"
Perl application but other "Non-enterprise" applications should be allowed
to benefit.
Application Features are features that are too fragmented and have too many
ways to skin the cat that they should be references as part of P5EE and
supporting P5EE, but should not be part of P5EE specifically. For example,
Database Persistence and OO->DB mappings are not P5EE. Same with Web
Application toolkits like eXtropia toolkit or OpenInteract. They may
support P5EE, but again, should not be P5EE. These are individual
implementations at a higher application level.
P5EE Features are core APIs that do specific things and where there is
going to be very little resistance or hard feelings (comparatively) if one
is chosen over the other because it will be quite obvious what a good API
is and what a bad API is.
This also brings us to the nature of Perl, Perl is a community effort not a
dictatorship. Standards are great to have, but it many cases it is too late
and actually it's conceivable that we do not wish to stifle the creativity
in terms of application server frameworks and template languages and the
like. The best way is to keep P5EE focused on the core things.
b) Robin is correct about documentation. Well, this is kind of a reply I
guess (but I did promise I wasn;t necessarily going to be original)...
I believe Documentation is the total key to P5EE. After focusing on all the
APIs (which are good to inventory for the RFC anyway), we should map them
to CPAN, see what the reality is and then document them.
Basically this would be the guide to Enterprise Perl. Just as Stas has a
guide to Mod_perl and teaching people how to put together mod_perl apps,
this list should ultimately have an Enterprise Perl guide....
"I have an enterprise problem X how do I solve it"... "Go view the guide!"
would be a lovely response that we see over and over again on the mod_perl
list. I truly believe that Perl already has many good frameworks. It's just
a matter of figuring out what is useful for which "Enterprise" purposes and
then bringing the user's to those APIs.
They just aren't really well documented.
This is why I view P5EE as a multistep process with the following milestones...
1) Identify Enterprise APIs (Brainstorm)
2) RFC Them
3) Map them to current modules
4) Document them as one whole helper document about how to find a solution
to X enterprise problem (following the API list basically)
5) Identify Applications and Frameworks that use the modules identified in
3 and label them as P5EE Enabled. These frameworks would explicitly be
documented in case people want to see these APIs in use.
6) Then take a step back, look at the APIs and identify which ones would
benefit from standardization (mail is one)
7) Standardize it
8) Redocument
9) Rinse, Repeat.... #6
6-9 will take a long time ... possibly forever. So don't hold your
breath.... but it will come slowly.
10) In parallel for 6-9, should be initiatives where people say "wouldn't
it be cool to do X for the p5ee initiatve" and they will do it. eg JAAS or
a personalization API comes to mind.
11) Document
12) Rinse, Repeat #10.
Concretely,
This whole thing is a long process. But doing enterprise "meta"
documentation need not be. Ideally it would be someone like a Stas Bekman
but someone who believes in Enterprise Perl and who can take on a similar
banner of work that Stas did for the mod_perl guide.
Then more sophisticated documentation and APIs can come out of the
community that forms on this list. At that point I would see this list
splitting into TWO lists. [EMAIL PROTECTED] and [EMAIL PROTECTED]
The discussion we are having now would go on [EMAIL PROTECTED] in
the future, and [EMAIL PROTECTED] would be the defacto standard place where new
developers can come and ask questions like "I need to hook up to my Java
SOAP Server from Perl, how do I do that?"
Well, it's time for me to go to sleep again, and wake up to see another 40
p5ee mails in my inbox. :) Don't yell at me too harshly please. I am just a
person who happens to program Java but also likes Perl. Sorry if I believe
in the buzzwords...
Later,
Gunther
PS Also please add NAMING to the list of P5EE interesting APIs... As in
JNDI (Java Naming and Directory Interface)... Naming is distinctly
different from a directory and is an important highly useful part of the
Java API. I love using naming.
What is it? It's so simple it's almost stupid. It's a way of asking a
standard naming API "Give me object X" and then it will look up "X" and
then create it or give you the object if it already exists... The backend
can be anything from SOAP, LDAP, JDBC Connection Pool, RMI etc... Just
about every Servlet Container comes with a JDBC connection pool where you
set up a JDBC connection and then "NAME IT". Then to get the JDBC
connection, you just use the naming interface to get the "addressbook" JDBC
connection.
Anyway, just want to make sure naming service doesn't get forgotten since
directory service tends to just refer to a single interface to something
like LDAP.
__________________________________________________
Gunther Birznieks ([EMAIL PROTECTED])
eXtropia - The Open Web Technology Company
http://www.eXtropia.com/