I inserted my reply below.
Thanks a lot, I am happy to receive all this positive feedback lately. To be honest I was
First of all, let me congratulate you to your documentation - it is
first-class content! I was able to follow all the ideas behind the
cartridge design quite easily. Thanks a lot! IMO, we can take the
structure of your document as a kind of template for future cartridge
documentation (1 Foreword, 2 How to install, 3 How to use, 4 Features, 5
Modeling, 6 UML model constraints, 7 Naming conventions) - complete,
concise, easy to follow. We could extend it with a UML profile, too,
just for even more clarity.
afraid most users would find it too complex to get started. Anyway, I still see some room for
improvement and I will update the docs when I have the time, also, I have some ideas
to improve the cartridge and to create some additional features for AndroMDA.
anyway, Struts has quite a complex process going on in the background, I had to balance
between user friendlyness and flexibilty. considering the feedback up to now it seems
people don't how too much problems following the docs, that's good
I imported your sample model into Poseidon 2.0. The new version now shows stereotypes on action states, too. This helps understand what's going on. However, the new version has problems to keep the lines between decision or merge points and the other elements rectilinear. Looks quite ugly (at least when you're a fan of aesthetics like I am!).
yes, I know. I think Gentleware did not do a good job on Poseidon 2.0, I will not use it until
they come with a decent build. it is too slow and is always getting in my way, the 1.6 is
more stable (it has some annoyances too, but okay... I'm not complaining there :-) )
Some points arose during the review that I'd like to forward to you:
* Why do you use state diagrams for the high level workflows? They feel
right but why? :-)
:-) because it was practical to do so, I don't know the consequences in theory, but I
considered them to be the only elements left to help me out there
<aha-erlebnis>
but now that you mention it, indeed, I could use Use-Case diagrams, I would not be able
to model decision nodes, but that's okay ...I would interconnect those use-cases directly
(I guess I did not think this over properly)
</aha-erlebnis>
wow, good that you mention this... let me know what you had something else in mind
and we can add a task on SF.net
* In your document you describe your modeling constraints using a kindthe validation bpm4struts is already done in a very simplistic way, I was waiting for a generic
of EBNF. This is good because it makes people really think about what
they do. My immediate idea was: For a future release of the cartridge,
let's generate a few metamodel decorators so that the cartridge can
enforce those modeling constraints at code generation time, using
understandable error messages pinpointing the place in the model where
the constraint was violated.
framework, but I think it is a critical issue to have proper validation
verbose app = user friendlyness++ = app.usage++
as soon as something is in place I will update the validation for the cartridge
* In one of your previous emails, you said that you cannot usethe problem is that the AndroMDA core uses the ScriptHelper getName() and getPackage()
bpm4struts together with other cartridges in the same run. Why is that?
What's exactly the problem?
methods to determine file names and paths
by default this is the actual name of the model element, but in bpm4struts I allow the user
to use any character he wants,... jsps, java, xml will be generated with a consistent naming
convention because I overwrite these methods and apply some transformation on these names
(see docs - section 7) the scripthelper for bpm4struts is called StrutsScriptHelper:
<repository transformClassname="org.andromda.cartridges.bpm4struts.StrutsScriptHelper"/>
--> in the Ant task I specify a dedicated transformation class (the script helper) for bpm4struts.
But by putting bpm4struts + ejb in the same task we confuse the core since it will either render
bad file names/paths for bpm4struts or for ejb
why ? because when an AndroMDA task starts it takes one and only one ScriptHelper instance. it will use
this script helper for all cartridges used in that task. so getName() and getPackage() might have
undesired results for one of the cartridges since it expects something else (namely the result from the
script helper for which this cartridge was written)
Some points for improvement:yep, some code is generated, but it is not enough, I admit, the user has to think too much to make sure
* I really miss code generation for JSPs with input fields
he uses the proper fields (error prone), my reasoning was: JSPs will always need to be updated
manually.. but now I realize it is one of the things missing
your solution was to represent each page by a class, while I generally agree on this I think it
will complicate things too much for the end-use as he will need to synchronize action states and
classes
anyway, an alternative solution, compatible with what we have now, could be this:
the forms as they are modeled now are cleared from any attributes (optionally), and these
attributes are instead entered as tagged values on the action states (representing the JSPs),
like that the forms can be generated after the tagged values are gathered from the action states.
This is also very natural to the user, because these attributes are very close to the JSP. Instead
of needing to move from the dynamic to the static part of the model to model a class there etc...
I don't like tagged values neither, it's like using static in Java .. it's sensitive to abuse, I know...
on the other hand I cannot come up with a solution that has all the advantages of being easy and
intuitive to model and avoiding duplication and the need to synchronize
it goes without saying I am open for suggestions ... this is just what I personally had in mind
* Skeletal generation of the Application.properties fileI have been thinking about this one too... we need it, should not be a problem
since this conversion can be dependent on the client's locale setting I personally always* Back and forth String-to-datatype conversion. How could these be done?
tried to avoid doing this, however, I never gave it much thought really
for dates for example, what 'SimpleDateFormat' instance would you use to parse a Date
from a String (on client submit) ? the default one ?
if not... is it wise to put this kind of logic in a form bean ?
/*these are all questions I would really like some community feedback on*
/these are generic Struts problems, so I guess more people encountered this issue/
/
The next steps: We should release this cartridge a.s.a.p in AndroMDA
2.x.
* At the moment, this requires documentation in Anakia format - as far
as I have understood, you're already working on this.
hrmm... I was going to as soon as I have time, to give you an idea: I have another project
which has been in the freezer for almost half a year, I am not working on it alone so I
have some commitments and I will probably be allocated most of the time on that project
until the end of the year (milestone)
* We should also solve the problem that bpm4strust needs a separateyes, for now this is impossible.
AndroMDA run.
a way to achieve this is to be able to specify the transformation class in the
cartridge deployment descriptor, to enforce its use on that level, instead of
overriding a transformation class on the level of the andromda task
a lot of work indeed :-)* We should adapt the car rental system model to use bpm4struts. This would require new, adapted JSPs - I think this is the main amount of work.
I propose to start this after an iteration of two, to make sure we have a general
agreement on the cartridge's features/behaviour. to avoid redesigning the UML
each time
one thing that will change is (except for the UseCase diagrams :-) ):
currently we use tagged values in the use-case elements to indicate which controller
class to use, we should inverse this, it is the class that should point the use-case it is
implementing.
I find this cleaner as it will clear the dynamic model of any platform specific
implementation details (such as "a class implements a use-case"), for the static
model nothing really changes (except that we add a tagged value of course)
does this make sense ?
Thanks for the moment!it's my pleasure
Matthias
thanks for your time, b-bye Wouter.
------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. Does SourceForge.net help you be more productive? Does it help you create better code? SHARE THE LOVE, and help us help YOU! Click Here: http://sourceforge.net/donate/ _______________________________________________ Andromda-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/andromda-devel
