Thread: [Beankeeper-discussion] Schema changes
Brought to you by:
demonsystem
From: Shay M. <mat...@gm...> - 2009-03-01 15:27:55
|
Hi, how does BeanKeepr handle schema changes(or to be exact class structure changes)? what happens when a field is removed? what happens when a filed is added? are the table dropped in those cases? i am seeing the following messages in my log file : "could not find class (data.VReseller) to table: data_vreseller. This may only mean that a class was removed, but there are traces in the database for it, in this case, you may disregard this message: data.VReseller (java.lang.ClassNotFoundException)" what is the cause for these? i also see this error in the logs : "returning empty result list because of non-fatal symbol error. Parser said: could not find class for table name: vreseller, statement was: find vreseller where VReseller.domain=?" altghou i can see the table vreseller in the DB? Thanks, Shay |
From: Brautigam R. <de...@ne...> - 2009-03-01 18:28:58
|
Shay Matasaro írta: > Hi, > > how does BeanKeepr handle schema changes(or to be exact class structure > changes)? > what happens when a field is removed? > > what happens when a filed is added? > > are the table dropped in those cases? Currently BeanKeeper has a wired-in schema evolution algorithm to handle some simple cases. It does basically this: - class added: table is created - 1 field added: table is not dropped, field is added with default value for existing objects (usually null or 0) - 1 field is removed: table is not dropped, only if there are no other fields - 1 field renamed or type changed: handled as 1 removed, 1 added For more complex changes (like added a subclass, or class hierachy changed otherwise) a migration is probably necessary. Currently there is not automation or helper scripts for this unfortunately. > i am seeing the following messages in my log file : > > "could not find class (data.VReseller) to table: data_vreseller. This > may only mean that a class was removed, but there are traces in the > database for it, in this case, you may disregard this message: > data.VReseller (java.lang.ClassNotFoundException)" > what is the cause for these? On startup BeanKeeper consults the database for classes that were used on that database anytime in the past. It tries to see if those classes are ok or not. This message indicates, that at one point in time there were data.VReseller objects stored, but that class is currently not available to the system, so that table will not be used. This is Ok if you really removed that class. > i also see this error in the logs : > "returning empty result list because of non-fatal symbol error. Parser > said: could not find class for table name: vreseller, statement was: > find vreseller where VReseller.domain=?" > > altghou i can see the table vreseller in the DB? This means that no known class matching VReseller is being used in the database. If the previous ClassNotFoundException is for the same class, this would mean, either the class data.VReseller is really not available to BeanKeeper, or you renamed it, perhaps moved it to another package. > Thanks, > Shay Robert. |