DirXML Move Proxy Driver
Novell Cool Solutions: Feature
Digg This -
Posted: 28 Sep 2001
With DirXML 1.0, moves will fail unless you are running the driver on the master of both the source and destination container. This was addressed in DirXML 1.1 but not completely. Until it is completely resolved you will need to use the Move Proxy Driver.
The move proxy was designed as a means of getting around the current DirXML limitation that prevents move operations from occurring through DirXML unless the server running the DirXML driver holds the master replica of the source object and the destination container. This move proxy still has the limitation that it must run on the server holding the master replica of the items to be moved and the destination container, but does implement a proxy mechanism whereby Drivers running on other servers can delegate moves that need to be performed to the proxy driver.
Theory of Operation
The Move Proxy Driver is based on the DirXML Flat File driver.
The move proxy monitors events that add a value to a new attribute called 'moveProxyTrigger' on its subscriber channel. It then generates a move on its own publisher channel that will move the object the value was added to to the container specified by the value. The proxy uses the Flat File driver along with a few stylesheets and appropriate filters to do its job.
The Subscriber Event Transformation Rule looks for modify event that adds a value to the moveProxyTrigger attribute and converts it to a custom event that contains the dn of the object to be moved and the dn of the container to move it to. All other events are blocked.
The Output Transformation looks for the custom event generated by the event transformation rule and converts it to a delimited text record containing the relevant dn's. This record is written to a file by the flat file driver subscriber channel.
The flat file driver publisher channel monitors the same directory and extension that the subscriber writes, so it picks up the files written by its own subscriber.
The Input Transformation converts the delimited text record to a move operation and removes the value from the moveProxyTrigger.
- Add a new attribute to the schema called 'moveProxyTrigger'. The attribute should be distinguished name syntax, single valued, and synchronize immediate.
- Add the new attribute to the schema classes that may need to be moved. Alternatively you could also add an Aux Class and add the attribute to it, but this will mean that the drivers that want to take advantage of the proxy will also need to add the aux class to objects it is interested in moving.
- Create a new DirXML-Driver on the server holding the master replica, using moveproxy.xml as the pre-configured driver.
- Create a directory on the server that will dedicated for the use of this driver. The only purpose for this directory will be to hold the files created by the FlatFile driver.
- Edit the Driver Parameters and set the Destination file path and source file path to the directory just created. For NetWare, the path would be entered in the form: <VOL>:\<Dir>\<Dir> (note no beginning or ending slashes). These two directory settings MUST be the same directory.
- Edit the file extensions to whatever extension you want to use. As above, these two settings MUST be the same.
- Edit the Subscriber and Publisher filters to include the classes that you want to be able to be moved and the moveProxyTrigger for each of those classes. Do not add any other attributes for those classes.
- Copy ncf3d.jar (DirXML Flat File driver) to the nds\lib directory on Win32 or the SYS:\SYSTEM\LIB directory on NetWare. If running on Win32 you will have to restart DHOST in order for the new jar file to be recognized.
- Set the desired driver startup option and start the driver. Once it has been configured and you are satisfied with its operation, Automatic is a perfectly acceptable setting.
Configuring other drivers to use the proxy
In order for other drivers to take advantage of the proxy, they need to add the dn of the destination container to the moveProxyTrigger attribute of the object to be moved. This would usually be done in the Event Transformation Rule on the Publisher Channel. The Publisher Channel object will need to have its filter modified to add the moveProxyTrigger added as an attribute for all the schema classes added in Installation, #2.
Due to the way moves are handled internally by NDS and the way processing of changes is handled by NDS and DirXML, using the MoveProxy driver will cause extra processing than if the move was handled by the original driver (say, the PeopleSoft driver's EventXForm Style Sheet). This is because the server where the original driver is installed would be holding the master replica of all involved partitions and there would be no NDS replica synchronization from that server's point of view.
But since the server that the MoveProxy driver is loaded on holds different replicas than the server holding the original driver, extra processing will be created when the changes made by the MoveProxy driver synchronize through the tree (the original driver will see a change on the object and will start processing to replicate the change back through its Subscriber channel). When this happens, it is normal to see "Unknown Class" errors and error events - these are due, again, to the way in which NDS handles an object move. These jobs should be cancelled by the DirXML engine during its internal optimization process. If desired, an Event Transformation Style Sheet can be written to trap these jobs and send them to the bit bucket.
If necessary, you can do it without using the flat file driver. Just keep all the masters on one server. This adds some complexity because you have more than one driver per tree, so how would you handle moves between, for example, US and UK?
The best shot you have is to have a single driver per tree and either place the master on that server or use the Move Proxy. Having multiple drivers per tree makes it almost impossible to complete all moves (specifically between the different GEOs).
Novell Cool Solutions (corporate web communities) are produced by WebWise Solutions. www.webwiseone.com