Kaloyan,
I just want to make
sure that you are aware that the EMF models tend to be extremely unsafe in multi
threaded use. We’ve been flushing out and fixing bugs for a long time now and
there are still more being found every day. Posting the contents of relevant
annotations into the EMF model would drastically increase the number of writers
and make the problem much worse. That’s not to say that this isn’t a valid
approach, but it would be wise to make the relevant EMF models provably
thread-safe as part of this effort.
-
Konstantin
From:
wtp-dev-bounces@xxxxxxxxxxx [mailto:wtp-dev-bounces@xxxxxxxxxxx] On Behalf Of Raev, Kaloyan
Sent: Tuesday, November 14, 2006 5:55
AM
To:
wtp-dev@xxxxxxxxxxx
Subject:
[wtp-dev] Java EE 5 models design overview
Hello,
This is a follow up of the WTP 2.0
Requirements meeting held on 26 Oct:
http://wiki.eclipse.org/index.php/2006-10-26_wtp-requiremements-minutes
I
want to present an overview of my vision how Java EE 5 models should be
implemented in WTP.
Currently, there are J2EE 1.4 models
implemented in WTP. These are EMF models generated from the deployment
descriptors' XML Schemas of the J2EE 1.4 specification. Overview of the J2EE 1.4
models is presented in the following page:
http://www.eclipse.org/webtools/jst/components/j2ee/api/j2ee_models_overview.html
Java EE 5 models should be
implemented in a similar way. The EMF models should utilize the new deployment
descriptors' XML Schemas from the Java EE 5 specification. Additional complexity
to the models is added by the fact that the Java EE 5 specification uses Java
Annotations in addition to the deployment descriptors. Therefore, the
problematic shifts on how to integrate these annotations to the EMF model.
It
was a natural approach that I had a look to the JEM (Java EMF Model) project.
JEM contains functions for modeling Java classes in EMF. Unfortunately, JEM does
not cover Java Annotations at the moment and there is no plan for the future
yet:
http://dev.eclipse.org/newslists/news.eclipse.tools.ve/msg05989.html
There are to approaches to model
Java Annotations:
1. Extend JEM with new features to
cover Java Annotations and integrate both EMF models (the other one is the one
generated from the XML Schemas).
2.
Implement custom utility to parse and index Java Annotation from the source
files and make the EMF model (made from XML Schemas) to use it.
Due
to the lack of any documentation in the JEM project, approach 1. is feasible
only long-term. This is why I want to concentrate on approach 2.
Now, the Java EE 5 models problem
can be split in the following tasks:
1. Build an EMF model
based on the deployment descriptors' XML Schemas.
2. Parse
Java Annotations from the Java files.
3. Index the parsed
annotations in a way they can be easily retrieved.
4. Make the
EMF model to be influenced by the available annotations.
5. Update
Java Annotation with changes on the EMF model.
Task 1. Build an EMF model based on
the deployment descriptors'' XML Schemas.
This can be done easily
with the available toolset provided by the EMF project. The EMF model is
generated by the XML Schemas for the Java EE 5 deployment descriptors. A problem
appears if we want to split the generated classes in separate packages for
better structure:
http://www.eclipse.org/newsportal/article.php?id=20770&group=eclipse.tools.emf#20770
However, this problem is solvable at
least with manual refactoring of the generated classes.
Task 2. Parse Java Annotations from
the Java files.
Here Java files can be:
- Java Class files in JAR
library in the classpath;
- Java source files in the
Eclipse project.
Java Annotations from the Java Class
files can be easily parsed using the Sun's Java Reflect API.
Java Annotations from the Java
source files can be parsed using the Java DOM/AST API provided by the Eclipse
JDT Core project. The latter API models the Java source code as a structured
document. There, annotations are treated as member modifiers (like public,
private, static, final, etc.). There is a function that checks if a modifier is
an annotation.
The
parser utility will listen to events to trigger the parsing process:
-
ResourceChangeListener/Event - notifies for resource changes in the workspace:
project open/close, files added/deleted, etc;
-
ElementChangedListener/Event - notifies for changes in the Java Editor. The
parser will be notified that the user has changed a java file in the editor and
it has to be reparsed for changes in the annotations.
Task 3. Index the parsed annotations
in a way they can be easily retrieved.
The parser will update
an appropriate structure with the added or removed annotations. The structure
should allow quick and flexible way to retrieve the indexed annotation. For
beginning even an ArrayList that holds references to the
org.eclipse.jdt.core.dom.Annotation objects is enough. Annotation objects hold
references to the parent Java members and parent workspace resources and that
should be all the information we need. Of course, the ArrayList is far away from
the optimal solution and it should be optimized later with a better structure.
Task 4. Make the EMF model to be
influenced by the available annotations.
The generated EMF model
from the deployment descriptors' XML Schemas will be modified in a way that it
not only looks into the XML data, but also looks up the Annotation Model utility
for the corresponding annotation. If there are such annotations indexed, the EMF
model will update it state appropriately. The Annotation Model utility also has
to provide notification framework, so the EMF model to register a listener and
be notified with events on changes in the annotation model.
5.
Update Java Annotation with changes on the EMF model.
Properties
in the EMF model now declared in two sources: XML files and Java Annotations.
When this property is changes it has to be updated in the same source. If the
property is declared in XML then its new value has to be updated again in the
XML file. If the property is declared as a Java Annotation it has to be updated
again in the same Java Annotation.
To
achieve the above, the EMF model has to be changed in a way that it remembers
the source type of each property.
Updating Java
Annotation will be done again using the Java DOM/AST API.
This is the overview for the moment.
I want to here your comments. Especially, I want to hear your opinion about the
"Extending JEM" <--> "Custom Annotation Model utility" dilemma. Due to the
lack of documentation, my knowledge to JEM is not enough and I cannot estimate
the effort to extend it with Java Annotation support. This is why I prefer the
latter approach that I have described in more details.
There are no comments about the UI
from my side for the moment. Here your comments would be also interesting. Do we
stick to the Deployment Descriptor node in the Project Navigator? What features
would be needed there for future enhancements?
Greetings,
Kaloyan
Raev
Senior
Developer
NW AS JS TOOLS JEE
(BG)
SAP
Labs Bulgaria
T
+359/2/9157-416
mailto:kaloyan.raev@xxxxxxx
www.sap.com