hi
I did some testing on the precommit method im MMObjectbuilder. I
extended the class and added some logging on mthods commit()
precommit() and insert():
public class Aflevering extends BasicBuilder{
private static Logger log =
Logging.getLoggerInstance(Aflevering.class.getName());
public boolean commit(MMObjectNode node){
log.info("voor methode commit. nodenumber:
"+node.getStringValue("number"));
boolean result = super.commit(node);
log.info("na methode commit"+node.getStringValue("number"));
return result;
}
public MMObjectNode preCommit(MMObjectNode node){
log.info("methode precommit, nodenummer:
"+node.getStringValue("number"));
return node;
}
public int insert(String owner, MMObjectNode node) {
log.info("voor methode insert, node
is:"+node.getStringValue("number"));
int result = super.insert(owner,node);
log.info("na methode insert, node is: "+result);
return result;
}
}
then i made a node through a wizard. the logging:
11:27:32,695 INFO nl.vara.ceportal.builders.Aflevering - voor methode
insert, node is:45002
11:27:32,695 INFO nl.vara.ceportal.builders.Aflevering - methode
precommit, nodenummer: 45002
11:27:32,695 INFO nl.vara.ceportal.builders.Aflevering - methode
precommit, nodenummer: 45002
11:27:32,726 INFO nl.vara.ceportal.builders.Aflevering - na methode
insert, node is: 45002
11:27:32,726 INFO nl.vara.ceportal.builders.Aflevering - voor methode
commit. nodenumber: 45002
11:27:32,726 INFO nl.vara.ceportal.builders.Aflevering - methode
precommit, nodenummer: 45002
11:27:32,805 INFO nl.vara.ceportal.builders.Aflevering - na methode
commit45002
then i made a node with the taglib. the logging:
11:28:22,756 INFO nl.vara.ceportal.builders.Aflevering - voor methode
insert, node is:-1
11:28:22,756 INFO nl.vara.ceportal.builders.Aflevering - methode
precommit, nodenummer: -1
11:28:22,756 INFO nl.vara.ceportal.builders.Aflevering - methode
precommit, nodenummer: 45003
11:28:22,803 INFO nl.vara.ceportal.builders.Aflevering - na methode
insert, node is: 45003
What interests me is that creating a node with the wizards there is no
call to precommit() while the node is still virtual (no number), and
even when insert() is called for the new node the nodenumber is allready
there. Using the taglib this is not the case, insert() is called with a
virtual node with number -1.
To my knowledge testing the nodenumber in precommit is the only way to
know if the node is a new node or not. Of corse i can overwrite commit()
to do the stuff i want to do to new nodes, but it is still surprising
and unexpected that creating nodes in different ways can have different
behavour.
Ernst
_______________________________________________
Developers mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/developers