[Helma-user] Suggestion: onPersist function call
Hannes Wallnoefer
hannesw at gmail.com
Wed Apr 4 09:24:12 CEST 2007
Thanks, Kris. This makes sense and looks good. I'll commit it later today.
Any other opinions?
hannes
2007/4/4, Kris Leite <kleite at imcsoftware.com>:
> Hi Hannes,
>
> Attached is a patch for the 'onPersist' function call. In version 1.6 I
> found that
> the 'onInit' was moved from the Node class to NodeManager. So I put the
> 'invokeOnPersist' in the NodeManager class to be consistent. I also
> removed
> the check for 'dbmap' in the 'onInit' section since that would only
> allow the routine
> to be activated for only database configuration. The documentation for
> 'onInit'
> indicated it was to be activated for both embedded and database persistence
> storage.
>
> Thanks,
> Kris
>
>
> Hannes Wallnoefer wrote:
> > Hi Kris,
> >
> > 2007/4/3, Kris Leite <kleite at imcsoftware.com>:
> >
> >> I had a need to do some changes on a HopObject before it was
> >> written into storage. So I made a customized version Helma 1.5.3
> >> to call 'onPersist' function when a HopObject was being written
> >> into the embedded or relational database.
> >>
> >> It would be nice if this was added as a new feature for Helma 1.6.
> >>
> >> The way I implemented it was very similar to the 'onInit()' function
> >> by making a copy of the "invokeOnInit" function in Node.java
> >> and changing the names to 'OnPersist' then adding a call to
> >> 'invokeOnPersist' in the NodeManager methods 'insertNode' and
> >> 'updateNode'.
> >>
> >> I will be happy to provide the patches if you like.
> >>
> >
> > Yes, please send a patch.
> >
> > hannes
> >
> >
> >> Thanks,
> >> Kris
> >>
> >>
> >> _______________________________________________
> >> Helma-user mailing list
> >> Helma-user at helma.org
> >> http://helma.org/mailman/listinfo/helma-user
> >>
> >>
> > _______________________________________________
> > Helma-user mailing list
> > Helma-user at helma.org
> > http://helma.org/mailman/listinfo/helma-user
> >
> >
>
> # This patch file was generated by NetBeans IDE
> # Following Index: paths are relative to: D:\jRTsrc\helma-1.6\helma\src\helma\objectmodel\db
> # This patch can be applied using context Tools: Patch action on respective folder.
> # It uses platform neutral UTF-8 encoding and \n newlines.
> # Above lines and this line are ignored by the patching process.
> Index: NodeManager.java
> *** D:\jRTsrc\helma-1.6\helma\src\helma\objectmodel\db\NodeManager.java Base (1.153)
> --- D:\jRTsrc\helma-1.6\helma\src\helma\objectmodel\db\NodeManager.java Locally Modified (Based On 1.153)
> ***************
> *** 349,355 ****
> }
> // New node is going ot be used, invoke onInit() on it
> // Invoke onInit() if it is defined by this Node's prototype
> - if (node.dbmap != null) {
> try {
> // We need to reach deap into helma.framework.core to invoke onInit(),
> // but the functionality is really worth it.
> --- 349,354 ----
> ***************
> *** 360,366 ****
> } catch (Exception x) {
> app.logError("Error invoking onInit()", x);
> }
> - }
> return node;
> }
>
> --- 359,364 ----
> ***************
> *** 421,426 ****
> --- 419,425 ----
> */
> public void insertNode(IDatabase db, ITransaction txn, Node node)
> throws IOException, SQLException, ClassNotFoundException {
> + invokeOnPersist(node);
> DbMapping dbm = node.getDbMapping();
>
> if ((dbm == null) || !dbm.isRelational()) {
> ***************
> *** 531,536 ****
> --- 530,551 ----
> }
>
> /**
> + * calls onPersist function for the HopObject
> + */
> + private void invokeOnPersist(Node node) {
> + try {
> + // We need to reach deap into helma.framework.core to invoke onPersist(),
> + // but the functionality is really worth it.
> + RequestEvaluator reval = app.getCurrentRequestEvaluator();
> + if (reval != null) {
> + reval.invokeDirectFunction(node, "onPersist", RequestEvaluator.EMPTY_ARGS);
> + }
> + } catch (Exception x) {
> + app.logError("Error invoking onPersist()", x);
> + }
> + }
> +
> + /**
> * Updates a modified node in the embedded db or an external relational database, depending
> * on its database mapping.
> *
> ***************
> *** 539,544 ****
> --- 554,561 ----
> */
> public boolean updateNode(IDatabase db, ITransaction txn, Node node)
> throws IOException, SQLException, ClassNotFoundException {
> +
> + invokeOnPersist(node);
> DbMapping dbm = node.getDbMapping();
> boolean markMappingAsUpdated = false;
>
>
> _______________________________________________
> Helma-user mailing list
> Helma-user at helma.org
> http://helma.org/mailman/listinfo/helma-user
>
>
More information about the Helma-user
mailing list