create or replace package xml_event_pkg as
/**
* Handle the event of adding new content into the repository.
*/
PROCEDURE handlePostLinkTo (eventObject DBMS_XEVENT.XDBRepositoryEvent);
/**
* Handle the event of updating content on the repository.
*/
PROCEDURE handlePreUpdate (eventObject DBMS_XEVENT.XDBRepositoryEvent);
/**
* Handle the event of removing content from the repository.
*/
PROCEDURE handlePreDelete (eventObject DBMS_XEVENT.XDBRepositoryEvent);
end xml_event_pkg;
με μια ενδεικτική υλοποίηση:
PROCEDURE handlePostLinkTo (eventObject DBMS_XEVENT.XDBRepositoryEvent) as
XDBPathobj DBMS_XEVENT.XDBPath;
ResPath VARCHAR2(1000);
XDBResourceObj DBMS_XDBRESOURCE.XDBResource;
ResDisplayName VARCHAR2(100);
BEGIN
XDBResourceObj := DBMS_XEVENT.getResource(eventObject);
XDBPathobj := DBMS_XEVENT.getPath(eventObject);
ResDisplayName := DBMS_XDBRESOURCE.getDisplayName(XDBResourceObj);
ResPath := DBMS_XEVENT.getName(XDBPathObj);
...
το πακέτο DBMS_XDB παρέχει διάφορες συναρτήσεις και διαδικασίες που μπορούμε να αξιοποιήσουμε για το περιεχόμενο μας, να το λάβουμε σε μορφή BLOB, CLOB, XML, να διαβάσουμε metadata του, κτλ. Προκειμένου να ενεργοποιήσουμε σε έναν δεδομένο κατάλογο τον event listener που μόλις φτιάξαμε, κατασκευάζουμε ένα XML έγγραφο παραμετροποίησης και εκτελούμε τον εξής κώδικα:
DECLARE
b BOOLEAN := FALSE;
BEGIN
b:= DBMS_XDB.createFolder('/public/resconfig');
COMMIT;
b := DBMS_XDB.createResource(
'/public/resconfig/appfilelistener-uploadFolder.xml',
'<ResConfig xmlns="http://xmlns.oracle.com/xdb/XDBResConfig.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/XDBResConfig.xsd
http://xmlns.oracle.com/xdb/XDBResConfig.xsd">
<event-listeners set-invoker="false">
<listener>
<description>File listener</description>
<schema>XMLREPOS1</schema>
<source>XML_EVENT_USER_EVT_PKG</source>
<language>PL/SQL</language>
<events>
<Post-LinkTo/>
<Pre-Update/>
<Pre-Delete />
</events>
</listener>
</event-listeners>
<defaultChildConfig>
<configuration>
<path>/public/resconfig/appfilelistener-uploadFolder.xml</path>
</configuration>
</defaultChildConfig>
</ResConfig>',
'http://xmlns.oracle.com/xdb/XDBResConfig.xsd',
'ResConfig');
DBMS_RESCONFIG.appendResConfig('/uploadFolder',
'/public/resconfig/appfilelistener-uploadFolder.xml',
DBMS_RESCONFIG.APPEND_RECURSIVE);
commit;
END;
Έχουμε σχεδόν τελειώσει με την παραμετροποίηση του DB repository μας. Ας ανοίξουμε τα κανάλια διάθεσης περιεχομένου στους τελικούς μας χρήστες, ενεργοποιώντας τους FTP και WebDAV listeners της βάσης:
begin
DBMS_XDB.setFTPPort(2100);
DBMS_XDB.setHTTPPort(8080);
end;
Τώρα οι χρήστες μας είναι σε θέση να προσθέσουν περιεχόμενο, να διαχειριστούν φακέλους και αρχεία, όπως σε ένα τυπικό σύστημα αρχείων. Στο επόμενο άρθρο θα εστιάσουμε στις ευκολίες προγραμματισμού και στο περιβάλλον διαχείρισης του XML DB.
No comments:
Post a Comment