Hi Thomas, Hi Benni,

finally I found the time to take a closer look at the DBGenerataor and what you 
are doing there looks very promising already.

So far most conversation has been on the empire-db-user mailing list. I would 
recommend moving it to the empire-db-dev mailing list. I am not sure, whether 
Thomas is subscribed to this list and if he has received Benjamin's last 
message (see below).

At the moment the database connection is hard-coded in DbCodeGenerator::main 
which is obviously not a good idea but should be easy to fix. Thanks Benni for 
mavenizing the project - Thomas are you happy with that?

As far as the generated code is concerned we should first decide what is 
absolutely necessary and what are individual extensions that possibly could be 
added manually later. I for example do not find the necessity to generate the 
interfaces IRecord and IBaseRecord (besides the "I"- prefix is not commonly 
used in Java). Once the Record class has been generated e.g. anyone can 
manually extend it and generate an interface for the class.

What I would recommend to generate is the following:

- The database class, but only with the definition and without all the 
connection stuff. A database may be used in more than one instance with 
different connections and thus it's not necessarily a singleton.

- A base table class that goes between DBTable and the actual individual table 
classes. The name should be configurable (if it is XXXDatabase it should be 
XXXTable). This class can be empty at first so that the user can add methods 
there. I always create such an in-between table class in my projects and I use 
it for auto-setting fields like user-names or create-timestamps. It's very 
convenient.

- The individual table classes, possibly with an option to generate top level 
classes (individual files) or to create them as nested classes inside the 
database class (if this is possible).

- A base record class as you have done, but the class signature should be as 
follows:

                public class XXXRecord<T extends XXXTable> extends DBRecord

  Using generics here brings a real advantage, as the base record class can 
then use properties and methods of the base table class.

- The individual record classes. Personally I don't like and need the access 
methods for simple attributes and the finder methods (they make it look like 
OR-Mapper beans and people may use them like that). The purpose of these 
classes should be mainly to override methods like getFieldOptions, update and 
delete.

 
These are my suggestions. I would appreciate if you would be willing to work 
with us any possibly donate your code to the ASF so that we can supply it with 
a future release of Empire-db. In this case we could add the code to our svn 
repository so that you can all conveniently work on it.

What do you think?

Regards,
Rainer


Benniven wrote:
> re: automatic empire-db driver configuration | mavenizing
> 
> Hi there,
> 
> i added the code to the Database.vm template so that it can
> automatically configure the desired EmpireDB driver.
> I used jetty's XMLConfiguration class to do that. I also mavenized the
> project, so that it is easier to get it running.
> Please let me know what you think of it.
> 
> Modified files:
>     Database.vm
>     Database.java
>     DbCodeGenerator.java
> 
> New files:
>     database-configuration.xml
>     pom.xml
> 
> thanks in advance
>     benni
> 
> WARNING:
>     I currently use HSQL for testing. I therefore had to modify all the
> database meta-data retrieving code in the file Table.java.
>     e.g. the line:
>            ResultSet fkRs = dbMeta.getImportedKeys(schema, null ,
> tableName);
>     was changed to:
>            ResultSet fkRs = dbMeta.getImportedKeys(null, schema,
> tableName);

Reply via email to