Error message

  • Warning: array_slice() expects parameter 1 to be array, null given in tikal_meetup_events() (line 194 of /opt/tikal/htdocs/prd/sites/all/modules/custom/tikal_meetup/tikal_meetup.module).
  • Warning: Invalid argument supplied for foreach() in include() (line 7 of /opt/tikal/htdocs/prd/sites/all/modules/custom/tikal_meetup/article_pages_events.tpl.php).

Hi,

For a client I need to support the following using either Hibernate or some other variant maybe using CGLIB or ASM or freemaker:

The system should support update of the database schema and Hibernate mapping at runtime. Meaning, if I have a Hibernate entity "Animal" with properties A and B I should support the addition and deletion of properties during runtime. e.g. after the transformation the Entity can have property A deleted and property C added. This means of course that :

1-The Entity *Class* itself should be re-generated in memory on the fly with **JPA annotations** for each field. I started testing using CGLIB and one other option is FreeMaker for generating a java source file and then compiling it at runtime.

Recommendations are highly regarded.

2-After that I need somehow to unload the existing "Animal" instances, stop all pending transactions which reference those classes and then

3-Use the newly generated "Animal" Class, load it into the correct ClassLoader and then generate matching RDBMS schema using "ddl2hbm".

4- I guess should also re-initialize the hibernate session factory which is loaded with wrong Class definitions.

there is also a need to be able to generate ORM entities completely from scratch: meaning, I don't even know the name of the table and the types and number of the fields.

Dynamic update of the database schema and in-memory hibernate mapping is not straightforward to develop. Which mechanism would I use for blocking access to the system until a database schema update has been performed?
How would you approach this issue? would you use CGLIB/ASM/Javaassist? some other API that you know is working for some other Client?
I am not sure I want the Bytecode rout, see for instance: http://code.google.com/p/google-guice/source/browse/trunk/src/com/google...

Please reply only if you have a knowledgeable answer :)