On May 19, 2007, at 7:07 AM, Doug Lochart wrote:
Lin,
Thanks for trying to help. I do appreciate it. I may not have
made my questions/gripes clear. So I will reiterate after your
replies.
Lin Sun wrote:
Hi, I am not a plan expert at all but I'll try answer your
questions...
What I find most useful besides reading the existing samples and
documentations, is to use the schema files (generally located at
the server_home\schema directory.) For example, I am looking at
my geronimo 2.0 server now, and the geronimo-module-{version}.xsd
is the schema for namespace "http://geronimo.apache.org/xml/ns/
deployment-{version}". You 'll want to look at the geronimo-
application-{version}.xsd for geronimo-application.xml file.
I have looked at the examples and what I have now is from them as
well as help from the forum. What I am griping about is that even
the documents are syntactically described in the xsd they are not
described verbally as to what they mean or how they are used. I
can read and use a schema but it doesn't help if I don;t know how
or why I am constructing the xml document.
I tend not to look at geronimo documentation so there may be a lot
more documentation avaliable (such as on the web site) and this is by
no means up to date on details but I hope you are aware of Aaron's
book available from http://www.chariotsolutions.com/geronimo/.
The other issue I had was that I have an EAR with a WAR and EJB-JAR
inside. Nowhere in the documentation did it cover the rules of
what plans are required. Almost all examples attacke either a WAR
or EJB alone. The one example that starts doing an EAR is never
completed.
So when I was creating mine I had a geronimo-application.xml (which
I kept outside the ear), a geronimo-web.xml in the WAR, and an
openejb-jar.xml in the ejb.jar. One forum member asked me to
remove the geronimo-web. It seemed to not break anything and I
think it may have made things go farther but again I still have no
clue what combinations (or why) of geronimo specific plans are
required in an ear.
I think I suggested removing the war, not just the war plan.
We try to provide flexibility in how you supply the plan and try to
make it so plans are not needed. There's a schema for each kind of
module plan (rar, app client, ejb, generic web, jetty, tomcat). You
can always put these in the module itself in which case you have to
name them appropriately (such as geronimo-ra.xml, geronimo-web.xml).
Alternatively for an ear you can include these "sub plans" in a
unified ear plan. If you do this you can include the unified plan in
the ear, calling it geronimo-application.xml, or you can supply it as
an external file to the deployer.
All plans (including the ear plan) start with an environment element
that describes the classloader for the component. This is somewhat
misleading for rar and ejb modules in an ear since the information in
the module environment element is merged into the ear environment to
create a single classloader description. Anyway you specify a name
(moduleId), dependencies (which are either parents of the classloader
or jars included in the classloader) and some details such as whether
the classloader is parent-first or child-first, and exceptions to the
parent/child first rule (hidden-classes and non-overridable-classes).
The moduleId for modules in an ear is useful for app clients and web
apps but is pretty much ignored IIRC for ejb and rar modules in an
ear. For a standalone module it is always important.
After the environment element there is module specific xml that is
hopefully comprehensible from the schemas.
Geronimo stores its dependencies in a maven-repo like layout, and we
refer to them using a maven-like syntax. So, just like in a pom you
have groupId to specify the organization producing the artifact,
artifactId to specify the particular artifact, type to specify the
type of the artifact, and version to specify the version of the
artifact. I don't think its advisable to end a groupId with a ., it
may end up with hard-to-interpret directory paths like
qdfrancepolicy//FrancePolicyServverEjb. On the other hand since IIUC
this ejb jar is in an ear the moduleId is ignored.
Hope this helps a bit
david jencks
Doug Lochart wrote:
openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1">
<dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/
deployment-1.1">
<dep:moduleId>
<dep:groupId>qdfrancepolicy.</dep:groupId>
<dep:artifactId>FrancePolicyServverEjb</dep:artifactId>
<dep:version>1.0</dep:version>
<dep:type>car</dep:type>
</dep:moduleId>
<dep:dependencies>
<dep:dependency>
<dep:groupId>geronimo</dep:groupId>
<dep:artifactId>tomcat</dep:artifactId>
<dep:type>car</dep:type>
</dep:dependency>
</dep:dependencies>
<dep:hidden-classes/>
<dep:non-overridable-classes/>
</dep:environment>
<enterprise-beans>
<session>
<ejb-name>FrancePolicyServer</ejb-name>
<jndi-name>qdfrancepolicy.FrancePolicyHome</jndi-name>
</session>
</enterprise-beans>
</openejb-jar>
Is the dep:groupId supposed to match the sys:groupID on the app?
If not how is it used? What does artifactid do? Does it matter
what I name it? Does the name have to correspond to another
field somewhere?
No, it needs to be dep:groupId here as you had "<dep:environment
> xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1">"
defined earlier.
This I got from an example but I still would like an explanation of
what it means. To me it looks I just use the package of the bean
as that is what the example had (with a trailing dot) but no
mention is made as what, how or why.
An artifactid is the artifact/module's unique id inside of the
repository (typical location is server_home\repository). You
need to come up with a unique id for your module. This is
actually a maven concept.
Okay, this is what I thought so when I have an EAR with an EJB and
WAR what do I have?
1 module (the application) with 2 or 3 artifiacts unique within the
module but not necessarily unique to all of the server OR
3 moules one for the ear, war, and ejb and they need to be unique
globally? Again this is the stuff that is missing a good narrative
in my opinion.
I would like to write up something covering all this stuff as I
feel I am not the only one in this boat. However I cannot write
about what I do not grasp fully.
Then there is the dep:dependency. I added geronimo/tomcat in
because I was asked to do so (thanks again by the way). I assume
it is telling geronimo that I want to use tomcat as my web
container but again I can't find any decent explanation as to
what is going on. The IoC design of this thing is real cool but
unless I am just totally stupid ( I am green with EJB ) I cannot
seem to find anything that pieces things together in any coherent
fashion.
Am I missing something? Did all of you pop in and look at the
plan docs and just suddenly realize how to do it in a day or
something?
By specifying the dependencies, your app asks the server to make
sure all the dependency modules are avail when your app starts.
I _understand_ what a dependency means _BUT_ I could not find
anything that specified what modules you need, what are supplied as
default, and how you would know if you need them. There are a lot
of things in the repository after you install geronimo. It looks
like all of geronimo is a bunch of modules working together (great
concept, I like the Spring methodology) but to me as a newbie I
think they are just part of geronimo and that I do not need to mess
with anything in there.
HTH, Lin
Thanks Lin, I hope others can also jump in a get a good discussion
going. Maybe I will get enough info and work my way through my
problems to actually write up a good overview.
Doug