Upload
vophuc
View
237
Download
1
Embed Size (px)
Citation preview
© 2004 EMC Corporation. All rights reserved.
Advanced DFC Programming Seminar
Dave Samuels - Staff Application ArchitectVictor Spivak - Distinguished Engineer
DevCon 2004San Ramon, CAOctober 5, 2004
© 2004 EMC Corporation. All rights reserved. 2CONFIDENTIAL
Outline of TopicsChanges to DFC 5.3 – Diagnostic Mode– Multi-Docbase Login Tickets
UCFBOF2Web Services
Miscellaneous– Aspects– Validation– Native– DFC PIA (Primary Interop Assembly)
© 2004 EMC Corporation. All rights reserved. 3CONFIDENTIAL
What you are about to see is subject to changewithout prior notice from Documentum, EMC or its affiliates. What you are about to
see is a presentation about DFC, the official application programming interface, herein after known as the Documentum API. This presentation refers to proposed future work in development.
Welcome to the Documentum Web site. Please review the following terms and conditions concerning your use of this site. By accessing, using or downloading materials from this Web site you agree to follow and to be bound by these terms and conditions. Software Licenses All Documentum and eRoom Software and Documentation ("Software”), including Software which may be downloaded from this site, eRoom.net and HTML code and/or Java applets generated by or included in eRoom Software, is copyrighted material owned by Documentum, a division of EMC Corporation or its suppliers. Any use of the Software, which is licensed, not sold, to end users is subject to the terms of a Documentum License Agreement between you and Documentum which accompanies each Software product. During the Software installation process, you will be given the opportunity to read the License Agreement for the Software you are installing, and you will be asked to accept its terms. If you cannot do so, then you may not complete the installation process. eRoom and Documentum beta Software is licensed under terms of applicable eRoom or Documentum beta license agreements. All rights, title, and interest not expressly granted are reserved.The License Agreements contain important information about the product's limited warranty (or no warranty), your remedies for non-conforming Software; and about Documentum’s limited liability. We encourage you to read the applicable License Agreement prior to ordering or installing any of our Software products.Maintenance Documentum’s Software user and server licenses may be covered by Maintenance, which is purchased in annual increments under the terms of Documentum's then current Customers Guide to Support Services and you are deemed to agree to such terms upon your purchase of Maintenance.Services From time to time, Documentum may offer various service offerings designed to assist customers with installation, customization, rapid adoption and best use of Documentum Software. A complete description of available Services can be obtained by contacting your Documentum sales representative.Standard Commercial Terms Unless otherwise agreed in writing by Documentum, full payment for non-credit card orders is due 30 days from the invoice date in US currency. Late charges of 12% per annum1.5%, or the maximum allowable by law, may be applied to late payments. The customer is responsible for all taxes, excluding taxes based on Documentum's income. Tangible products are shipped FOB Documentum's facility. There will be no cancellation of Software product orders or the initial year of Maintenance after shipment of Software, except as expressly allowed by the License Agreement or the Standard Maintenance Terms. Services may be cancelled or rescheduled as set forth in the Standard Services Terms.Your Rights to Copy Information on This Site You have our permission to print and use copies of the Documents and graphics incorporated in the Documents ("Document") at this Web site such as white papers, FAQs, knowledgebase documents, license agreements provided that: (i) all of the copyright notices appearing on such documents are included on all your copies, (ii) if a document does not contain the Documentum copyright notice below, then you will put the notice appearing below on your copy of the document, and (iii) your use of such information is limited to personal use, informational, non- commercial purposes, and documents may not be modified or altered in any way. Except as expressly provided herein, you may not use, download, upload, copy, print, display, perform, reproduce, publish, license, post, broadcast on any network or media, transmit or distribute any information from this Web site in whole or in part without the prior written permission of Documentum. The Documentum copyright notice is: Copyright Documentum, a division of EMC Corporation 1994-2004All Rights Reserved.
Trademarks Documentum, eRoom, the eRoom Logo, TrueArc, Boxcar, Bulldog, the Boxcar Logo, the Bulldog Logo, the TrueArc Logo, instinctive, eRoom Service, ePartner, ePack, Electronic Word-of-Mouth, Where Projects Get Done, the eMan Logo, EnterConnect,, the Documentum logos, Documentum RightSite, Documentum Server, Docbasic, Documentum DocPage Server, Now You Know, Uniting the World Through Content, Documentum WorkSpace, Documentum SmartSpace, Documentum ViewSpace, GMPharma, GXPharma, GSPharma, GDPharma and all other Documentum product and service names and logos are either service marks, trademarks, or registered trademarks of Documentum, a division of EMC Corporation SQL Anywhere is a trademark of Sybase, Inc. Fulcrum and SerachBuilder are trademarks of Fulcrum Technologies Corp. All other tradenames, trademarks and service marks are the properties of their respective owners. The absence of a product or service name, slogan, or logo from this list does not constitute a waiver of Documentum's trademark or other intellectual property rights concerning that name, slogan, or logo.We Don't Control the Linked Sites For your convenience, we have included various links within the Documentum Web site that allow you to leave our site. Please be aware that we have no control over, and are not responsible for, the content of such sites, and can make no representations about any site that you may access through this one. The fact that we provide a link to another site is not an indication of any endorsement or affiliation with or between Documentum and the third party hosting such site. This Site May Contain Errors We work hard to provide you with lots of useful information on this Web site. Despite our efforts, however, this Web site may contain technical inaccuracies or typographical errors. In addition, Documentum may change, update, improve or delete any of the information, programs or products contained in or described in this site at any time and without notice.No Representations or Warranties Except as may otherwise be agreed to in writing, we make no representation about the suitability of the information, products or services published on or available at this site for any purpose. As such, except as may otherwise be agreed to in writing, ALL INFORMATION, SOFTWARE, PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. DOCUMENTUM HEREBY DISCLAIMS ALL WARRANTIES WITH RESPECT TO THIS INFORMATION, SOFTWARE, PRODUCTS AND SERVICES, WHETHER EXPRESS OR IMPLIED, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.THE INFORMATION, SOFTWARE, PRODUCTS AND SERVICES CONTAINED ON THIS WEB SITE MAY BE OUT OF DATE OR INCLUDE OMMISSIONS, INACCURACIES OR OTHER ERRORS. EXCEPT WHERE EXPRESSLY PROVIDED OTHERWISE IN AN AGREEMENT BETWEEN YOU AND DOCUMENTUM, IN NO EVENT SHALL DOCUMENTUM BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES, OR DAMAGES FOR LOSS OF PROFITS, REVENUE, DATA OR USE, INCURRED BY YOU OR ANY THIRD PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT, ARISING FROM YOUR ACCESS TO, OR USE OF, THIS WEB SITE OR ANY OTHER HYPERLINKED WEB SITE. DOCUMENTUM RESERVES THE RIGHT TO MAKE CHANGES OR UPDATES TO THIS WEB SITE OR THE PRODUCTS OR PROGRAMS DESCRIBED IN THIS WEB SITE AT ANY TIME WITHOUT NOTICE. DOCUMENTUM CANNOT GUARANTEE COMPLETION OF ANY FUTURE PRODUCTS OR PRODUCT FEATURES MENTIONED ON THIS WEBSITE OR IN ANY PRESS RELEASE, AND NO RELIANCE SHOULD BE PLACED ON THEIR AVAILABILITY.
Governing Law and JurisdictionThis Web site is controlled by Documentum from its offices in Pleasanton, California, United States of America. All matters relating to your access to, or use of, this Web site shall be governed by the laws of the Commonwealth of Massachusetts. You may not access, download, use or export the information, Software, products or services contained on this Web site in violation of U.S. export laws or regulations, or in violation of any applicable local laws or regulations.FeedbackExcept where expressly provided otherwise by Documentum, all comments, feedback, information or materials submitted to Documentum through or in association with this Web site shall be considered non-confidential and Documentum's property. By submitting such comments, feedback, information or materials to Documentum, you agree to a no-charge assignment to Documentum of all worldwide rights, title and interest in copyrights and other intellectual property rights to the comments, feedback, information or materials. Documentum shall be free to use such comments, feedback, information or materials on an unrestricted basis. For questions or comments about Documentum's trademark policy, please contact [email protected].
I Accept I Decline
© 2004 EMC Corporation. All rights reserved. 4CONFIDENTIAL
ChangesSeriously, we are presenting this to you to help you realize the changes that are coming. Some of the technology presented is still under development and will likely changeSome of the technology presented will definitely change
© 2004 EMC Corporation. All rights reserved. 5CONFIDENTIAL
Goals for DFC 5.3Expand BOF infrastructure and provide great Web Service infrastructureDeliver next generation content transfer (UCF)Expanded support for Webtop, Collaboration, Records Management, ECI (searching), etc.Improve performanceMaintain quality Maintain compatibility
– Note: DFC 5.3 requires a 1.4.x JVM
© 2004 EMC Corporation. All rights reserved. 6CONFIDENTIAL
Everyone should know:DFC stands for Documentum Foundation ClassesDFC is the primary API for accessing a Documentum RepositoryDFC used in all Documentum productsBusiness Object Framework is part of DFC
© 2004 EMC Corporation. All rights reserved. 7CONFIDENTIAL
DFC provides the client APIs for accessing the Documentum repository
DocumentumRepository
Your Services
Your TBOs
Core DFC layer – Object-oriented access to server API layer
Intrinsic Business Objects
Content Pkgs Workflow Validation Virtual Document
Operations
Intrinsic Business ObjectsICollaboration IWorkflow
High-level
Middle-level
Low-level APIs
© 2004 EMC Corporation. All rights reserved. 8CONFIDENTIAL
Client access
DFC(Java)
DJCB(COM)
DFC PIA(.NET)
Java clients
VB clients
C# clients
© 2004 EMC Corporation. All rights reserved. 9CONFIDENTIAL
New to DFC in 5.3Multi-Docbase Login Tickets (Resuable)Diagnostic ModeValidation ImprovementsContent PackageNew Copy behavior options for RelationsContainer Customization ModelMACL (Mandatory ACL)Rich Text (Collaboration Service)PIA (Primary Interop Assemblies)
© 2004 EMC Corporation. All rights reserved. 10CONFIDENTIAL
Multi-Docbase Login Tickets (under development)
Old way - Login TicketsLogin Ticket used as password with LoginInfo. One Docbase, 1-time useSubconnections failCan't reconnect after timeout
New Option - Multi-Docbase Login TicketsgetLoginTicket( "*", "*" )Establishes the required, encrypted trust relationship between different Docbases
© 2004 EMC Corporation. All rights reserved. 11CONFIDENTIAL
Diagnostic ModeLogs errors related to mismanaged sessionsLogging of non-released sessions (session leaks) Accessing orphaned objectsSlight overhead– Defaults to Falsedfc.properties– dfc.resources.diagnostics.enabled=T/FRestart Process
© 2004 EMC Corporation. All rights reserved. 12CONFIDENTIAL
Diagnostic Mode - Sample 1 - Session LeakAvailable 5.2.5getSession() without a releaseSession()
private void test1 (IDfSessionManager mgr, String docbase)
throws DfServiceException, DfIdentityException, DfAuthenticationException
{IDfSession session = mgr.getSession(docbase);test2(mgr, docbase);mgr.release(session);
}
private void test2 (IDfSessionManager mgr, String docbase) throws DfServiceException, DfIdentityException,
DfAuthenticationException{
IDfSession session = mgr.getSession(docbase);}
private void test1 (IDfSessionManager mgr, String docbase)
throws DfServiceException, DfIdentityException, DfAuthenticationException
{IDfSession session = mgr.getSession(docbase);test2(mgr, docbase);mgr.release(session);
}
private void test2 (IDfSessionManager mgr, String docbase) throws DfServiceException, DfIdentityException,
DfAuthenticationException{
IDfSession session = mgr.getSession(docbase);}
Nested getSession()
Nested getSession()
Out of scope - garbage collectOut of scope - garbage collect
© 2004 EMC Corporation. All rights reserved. 13CONFIDENTIAL
Session LeakLog shows most recent getSession() as the culprit
dfc.resources.diagnostics.enabled = F
17:43:14,027 ERROR [Resource Housekeeper] com.documentum.fc.client.DfSessionManager$DfSessionManagerDisposableResource- [DFC_BOF_SESSION_LEAK] Unreleased session found in finalize "docbase=SVL_TST, refCounter=1, transFlag=false Session =com.documentum.fc.client.DfSession@12d7a10".
dfc.resources.diagnostics.enabled = F
17:43:14,027 ERROR [Resource Housekeeper] com.documentum.fc.client.DfSessionManager$DfSessionManagerDisposableResource- [DFC_BOF_SESSION_LEAK] Unreleased session found in finalize "docbase=SVL_TST, refCounter=1, transFlag=false Session =com.documentum.fc.client.DfSession@12d7a10".
dfc.resources.diagnostics.enabled = T
17:44:40,141 ERROR [Resource Housekeeper] com.documentum.fc.client.DfSessionLeakChecker -[DFC_BOF_SESSION_LEAK]
Unreleased session found in finalize "docbase=SVL_TST, refCounter=1, transFlag=false Session =com.documentum.fc.client.DfSession@3bb2b8".
com.documentum.fc.client.DfSessionLeakExceptionat svl.test.dfc.DfcTest2.test2(DfcTest2.java:55)at svl.test.dfc.DfcTest2.test1(DfcTest2.java:48)at svl.test.dfc.DfcTest2.main(DfcTest2.java:32)
dfc.resources.diagnostics.enabled = T
17:44:40,141 ERROR [Resource Housekeeper] com.documentum.fc.client.DfSessionLeakChecker -[DFC_BOF_SESSION_LEAK]
Unreleased session found in finalize "docbase=SVL_TST, refCounter=1, transFlag=false Session =com.documentum.fc.client.DfSession@3bb2b8".
com.documentum.fc.client.DfSessionLeakExceptionat svl.test.dfc.DfcTest2.test2(DfcTest2.java:55)at svl.test.dfc.DfcTest2.test1(DfcTest2.java:48)at svl.test.dfc.DfcTest2.main(DfcTest2.java:32)
Points to the actual getSession() that
doesn't have a release
Points to the actual getSession() that
doesn't have a release
© 2004 EMC Corporation. All rights reserved. 14CONFIDENTIAL
Accessing orphaned objects - available 5.3
When object is accessed against released sessionShows which "release" orphaned the objectShows which object access caused the error
...IDfSession session = mgr.getSession(docbase);IDfSysObject ysObj = (IDfSysObject)
session.getObjectByQualification("dm_document");mgr.release(session);Thread.sleep(11000);System.out.println("sysObj.getObjectName() = "
+ sysObj.getObjectName());...
...IDfSession session = mgr.getSession(docbase);IDfSysObject ysObj = (IDfSysObject)
session.getObjectByQualification("dm_document");mgr.release(session);Thread.sleep(11000);System.out.println("sysObj.getObjectName() = "
+ sysObj.getObjectName());...
© 2004 EMC Corporation. All rights reserved. 15CONFIDENTIAL
Orphaned objects - Diagnostic Mode Disabled
With Diagnostic mode disabled, error message is misleading
dfc.resources.diagnostics.enabled = F
DfException:: THREAD: main; MSG: [DM_API_E_EXIST]error: "Document/object specified by 09fc75e38000014e does not exist." ; ERRORCODE: 100; NEXT: nullat ...DfSession.convertToDfException(DfSession.java:3535)at ...DfSession.apiGet(DfSession.java:213)at ....apiGet(DfTypedObjHelperSessionBased.java:329)at ....getString(DfTypedObjHelperSessionBased.java:190)at ...DfTypedObject.getString(DfTypedObject.java:942)at ...DfSysObject.getObjectName(DfSysObject.java:49)at ...NativeMethodAccessorImpl.invoke0(Native Method)at ...NativeMethodAccessorImpl.invoke(...java:39)at ....invoke(DelegatingMethodAccessorImpl.java:25)at ...Method.invoke(Method.java:324)at ...PersObjectInvocHandler.invoke(...java:30)at $Proxy1.getObjectName(Unknown Source)at svl.test.dfc.DfcTest2.main(DfcTest2.java:36)
dfc.resources.diagnostics.enabled = F
DfException:: THREAD: main; MSG: [DM_API_E_EXIST]error: "Document/object specified by 09fc75e38000014e does not exist." ; ERRORCODE: 100; NEXT: nullat ...DfSession.convertToDfException(DfSession.java:3535)at ...DfSession.apiGet(DfSession.java:213)at ....apiGet(DfTypedObjHelperSessionBased.java:329)at ....getString(DfTypedObjHelperSessionBased.java:190)at ...DfTypedObject.getString(DfTypedObject.java:942)at ...DfSysObject.getObjectName(DfSysObject.java:49)at ...NativeMethodAccessorImpl.invoke0(Native Method)at ...NativeMethodAccessorImpl.invoke(...java:39)at ....invoke(DelegatingMethodAccessorImpl.java:25)at ...Method.invoke(Method.java:324)at ...PersObjectInvocHandler.invoke(...java:30)at $Proxy1.getObjectName(Unknown Source)at svl.test.dfc.DfcTest2.main(DfcTest2.java:36)
© 2004 EMC Corporation. All rights reserved. 16CONFIDENTIAL
Orphaned objects - Diagnostic Mode Enabled
When object is accessed against release objectShows "Caused by" - which "release" caused it
17:54:29,929 ERROR [main] ...DfSessionLeakChecker -[DFC_BOF_SESSION_ALREADY_RELEASED] An attempt of using the already released session.
com.documentum.fc.client.DfSessionAlreadyReleasedException: [DFC_BOF_SESSION_ALREADY_RELEASED] An attempt of using the already released session.
...at java.lang.reflect.Method.invoke(Method.java:324)at $Proxy1.buildCommandRoot(Unknown Source)at $Proxy1.getObjectName(Unknown Source)at svl.test.dfc.DfcTest2.main(DfcTest2.java:36)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.lang.reflect.Method.invoke(Method.java:324)at ...application.AppMain.main(AppMain.java:78)
Caused by: com.documentum.fc.client.DfSessionAlreadyReleasedException: [DFC_BOF_SESSION_ALREADY_RELEASED] An attempt of using the already released session.at svl.test.dfc.DfcTest2.main(DfcTest2.java:33)...
17:54:29,929 ERROR [main] ...DfSessionLeakChecker -[DFC_BOF_SESSION_ALREADY_RELEASED] An attempt of using the already released session.
com.documentum.fc.client.DfSessionAlreadyReleasedException: [DFC_BOF_SESSION_ALREADY_RELEASED] An attempt of using the already released session.
...at java.lang.reflect.Method.invoke(Method.java:324)at $Proxy1.buildCommandRoot(Unknown Source)at $Proxy1.getObjectName(Unknown Source)at svl.test.dfc.DfcTest2.main(DfcTest2.java:36)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.lang.reflect.Method.invoke(Method.java:324)at ...application.AppMain.main(AppMain.java:78)
Caused by: com.documentum.fc.client.DfSessionAlreadyReleasedException: [DFC_BOF_SESSION_ALREADY_RELEASED] An attempt of using the already released session.at svl.test.dfc.DfcTest2.main(DfcTest2.java:33)...
© 2004 EMC Corporation. All rights reserved. 19CONFIDENTIAL
Documentum Unified Client Facilities (UCF)Defined as...
A next generation facility for content transfer between client and application server
Main GoalsNext generation content transfer for WDK & Web ServicesApplication integration
Improve deployabilitySmallest possible client-side footprint - DFC not required–Signed applet - very small–Launches a small UCF-client runtime processPerform content analysis on server or client
© 2004 EMC Corporation. All rights reserved. 20CONFIDENTIAL
Next Generation Content TransferPrimarily for WDK-based– Will be used for all 5.3 and later client-side content transfer– Web Clients (Webtop, Web Publisher, DAM, ...)– Web ServicesPackages DFC OperationsCompatible with Web ServicesLightweight - Client doesn't need DFCContent analysis logic on serverHooks for Customization
© 2004 EMC Corporation. All rights reserved. 21CONFIDENTIAL
ArchitectureWebtop 5.3 deploys the UCF Client RuntimeNormal non-elevated user privilege to install
Deployed with the web page as a small signed applet whose job is to launch the UCF Client Runtime process
© 2004 EMC Corporation. All rights reserved. 22CONFIDENTIAL
UCF Functional Diagram (Web-environment)
DctmContentServer
HTTP Server
ApplicationServer
DFC
Browser
UCFClient Process
Client Environment
UCFServer
Component
WDK
Webtop, …
ClientFile System
Handlers
UCF applet
Application Server Content Server
© 2004 EMC Corporation. All rights reserved. 23CONFIDENTIAL
UCF Architectural ViewWebtop,
Digital Asset Manager,
Documentum Administrator
Web Publisher, Portal Content
ManagerPortlets Custom
Applications
UCF RuntimeUCF Runtime
Content Registry Service
MIME-typeRecognizer
Communication Service
Tracing/Logging Service
Notification Service
Component Registry Service
Content PkgingService
Configuration Service
UCF Kernel
Tracking/LoggingService
OS Info Service
Platform Services
UCF API
Extension Points
Custom AttachmentHandlers
Custom RequestHandlers
WDK-Based Apps Web Services Custom Apps
© 2004 EMC Corporation. All rights reserved. 24CONFIDENTIAL
UCF Platform ServicesFile System Service– Brokers file reading/writing/removal to
operating system– Will offer accelerated file store reading/writing options (DAM)MIME-type Recognizer Service– Provides analysis of content-types for both UCF requests and
responses– Does type and format analysis (compression options, etc.)Content Registry Service– Persists content meta-data on client when content is ‘resident’ there– Fully supports XML and VDMOS Info Service– Provides OS identification information– OS Info helps the modal operation of UCF based on unique client
environments
Content Registry Service
MIME-typeRecognizer
File SystemService
OS Info Service
Platform Services
© 2004 EMC Corporation. All rights reserved. 25CONFIDENTIAL
UCF Kernel ServicesComponent Registry Service– Used for registering ‘optional’
UCFcomponents such as handlers, processors, etc.
– Will have required, optional and skip registration scopesTracing/Logging Service– Very similar to existing DFC logging capabilities– Will rely on Java 1.4 logging capabilities (java.util.logging.* APIs)– Will only log client-side events, will not log any server-side information
except communcation-related Notification Service– Notifies on error conditions and progress feedback– For rich-client notification will be delivered to end-user– For WDK-client notification will be delivered to applicationContent Packaging Service– Creates content packages for transfer between client and server
Communication Service
Tracing/Logging Service
Notification Service
Component Registry Service
Content PkgingService
Configuration Service
UCF Kernel
© 2004 EMC Corporation. All rights reserved. 26CONFIDENTIAL
DeploymentUCF client libraries deployed to client as appletNo DFC required on clientApplet very small and fastUCF Client process 1/4 size of old contentTransferApplet
HTTP Server
ApplicationServer
Browser
UCFClient Process
UCFServer
Component
WDK
Webtop, …
UCF applet
Alreadyloaded?
yes, start process
no, download UCF client and start
© 2004 EMC Corporation. All rights reserved. 27CONFIDENTIAL
HandlersContent Analysis Components
Attachment HandlersAllows override of handling of attachments based on content formatPre/post processing Content Analysis componentsRequest / Respond handlers
Extension PointsCustom Attachment
Handlers
Custom RequestHandlers
© 2004 EMC Corporation. All rights reserved. 28CONFIDENTIAL
Pattern for using PackagesCreate a packagePopulate the packagepackage processor pre-preprocess (handler)DFC operation.add(package)operation.execute()package processor post-process
Content Analysis components
© 2004 EMC Corporation. All rights reserved. 29CONFIDENTIAL
PackagingKind of like Operations node set
– pkg = pkgFactory.newImportPackage()– pkg.add( objectID );– operation.add( package )
– pkgProcessor = pkgProcPkgFactory.newImportPackageProcessor(op,pkg);
– pkgProcessor.preprocess();
– operation.execute();
– pkgProcessor.postprocess();– Exit...
© 2004 EMC Corporation. All rights reserved. 30CONFIDENTIAL
UCF Sample - ICommManager / IServerSession
public class TestExportServlet extends HttpServlet{protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{try{
HttpSession httpSession = request.getSession (false);if (httpSession == null)
handleServletException ("Http Session is not initialized");
ICommManager commMgr = (ICommManager)httpSession.getAttribute ("ucf");
if (commMgr == null)handleServletException (
"UCF is not properly initialized");
// Get a handle to a UCF sessionString clientId = request.getParameter ("ID");IServerSession ucfSession = commMgr.newSession (clientId);
...
public class TestExportServlet extends HttpServlet{protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{try{
HttpSession httpSession = request.getSession (false);if (httpSession == null)
handleServletException ("Http Session is not initialized");
ICommManager commMgr = (ICommManager)httpSession.getAttribute ("ucf");
if (commMgr == null)handleServletException (
"UCF is not properly initialized");
// Get a handle to a UCF sessionString clientId = request.getParameter ("ID");IServerSession ucfSession = commMgr.newSession (clientId);
...
© 2004 EMC Corporation. All rights reserved. 31CONFIDENTIAL
Setting up a managed session and export operation
Servlet connects to the Docbase in behalf of the user
// Obtain session from another method in this servletIDfSession session = this.getSession();
// setup a docbase sessionIDfClientX clientX = new DfClientX();IDfClient client = clientX.getLocalClient();IDfSessionManager sMgr = this.getSessionManager();
...
// Obtain session from another method in this servletIDfSession session = this.getSession();
// setup a docbase sessionIDfClientX clientX = new DfClientX();IDfClient client = clientX.getLocalClient();IDfSessionManager sMgr = this.getSessionManager();
...
© 2004 EMC Corporation. All rights reserved. 32CONFIDENTIAL
Create and populate the "package" for export operation
// Create and setup the packageIDfContentPackageFactory pkgFactory =
clientX.getContentPackageFactory();
IDfExportPackage exportPackage = pkgFactory.newExportPackage();IDfClientServerFile clientServerDir =
pkgFactory.newClientServerFile();
clientServerDir.setClientFilePath(exportDir);exportPackage.setDestinationDirectory(clientServerDir);
// Create package item and add to the packageIDfExportPackageItem item =
exportPackage.add(clientX.getId(objectId));...
// Create and setup the packageIDfContentPackageFactory pkgFactory =
clientX.getContentPackageFactory();
IDfExportPackage exportPackage = pkgFactory.newExportPackage();IDfClientServerFile clientServerDir =
pkgFactory.newClientServerFile();
clientServerDir.setClientFilePath(exportDir);exportPackage.setDestinationDirectory(clientServerDir);
// Create package item and add to the packageIDfExportPackageItem item =
exportPackage.add(clientX.getId(objectId));...
// Setup the DFC operationIDfExportOperation exportOp = clientX.getExportOperation();exportOp.setSession( session);String objectId = this.getObjectId( "objectId");String exportDir = this.getDirectory("exportDirectory");
// Setup the DFC operationIDfExportOperation exportOp = clientX.getExportOperation();exportOp.setSession( session);String objectId = this.getObjectId( "objectId");String exportDir = this.getDirectory("exportDirectory");
© 2004 EMC Corporation. All rights reserved. 33CONFIDENTIAL
Create and populate the "package" for import operation
// Create and setup the packageIDfContentPackageFactory pkgFactory =
clientX.getContentPackageFactory();IDfImportPackage importPackage = pkgFactory.newImportPackage();
// Create package item and add to the packageIDfClientServerFile csFile = pkgFactory.newClientServerFile();csFile.setClientFilePath(filePath);IDfImportPackageItem item = importPackage.add( csFile );item.setDestinationFolderId(clientX.getId(destinationFolderId));
...
// Create and setup the packageIDfContentPackageFactory pkgFactory =
clientX.getContentPackageFactory();IDfImportPackage importPackage = pkgFactory.newImportPackage();
// Create package item and add to the packageIDfClientServerFile csFile = pkgFactory.newClientServerFile();csFile.setClientFilePath(filePath);IDfImportPackageItem item = importPackage.add( csFile );item.setDestinationFolderId(clientX.getId(destinationFolderId));
...
// Setup the DFC operationIDfImportOperation importOp = clientX.getImportOperation();importOp.setSession(session);String destinationFolderId =
this.getDestinatinoFolderId("destinationFolderId");String filePath = this.getFilePath("filePath");
// Setup the DFC operationIDfImportOperation importOp = clientX.getImportOperation();importOp.setSession(session);String destinationFolderId =
this.getDestinatinoFolderId("destinationFolderId");String filePath = this.getFilePath("filePath");
© 2004 EMC Corporation. All rights reserved. 34CONFIDENTIAL
pre-processing
// Do pre-processing on the export packageIPackageProcessorFactory factory =
ucfSession.getPackageProcessorFactory();
IPackageProcessor pkgProcessor = factory.newExportPackageProcessor(
exportOp, exportPackage);
// Do pre-processing on the export packageIPackageProcessorFactory factory =
ucfSession.getPackageProcessorFactory();
IPackageProcessor pkgProcessor = factory.newExportPackageProcessor(
exportOp, exportPackage);
// Do pre-processing on the import packageIPackageProcessorFactory factory =
ucfSession.getPackageProcessorFactory();
IPackageProcessor pkgProcessor = factory.newImportPackageProcessor(
importOp, importPackage);
// Do pre-processing on the import packageIPackageProcessorFactory factory =
ucfSession.getPackageProcessorFactory();
IPackageProcessor pkgProcessor = factory.newImportPackageProcessor(
importOp, importPackage);
pkgProcessor.preProcess(); pkgProcessor.preProcess();
© 2004 EMC Corporation. All rights reserved. 35CONFIDENTIAL
Operations take a "package" as a node
// Add the updated package to DFC operation and executeexportOp.add( exportPackage );exportOp.execute();
// Add the updated package to DFC operation and executeexportOp.add( exportPackage );exportOp.execute();
© 2004 EMC Corporation. All rights reserved. 36CONFIDENTIAL
Post-processing
// Do post-processing on the packagepkgProcessor.postProcess(); // Do post-processing on the packagepkgProcessor.postProcess();
// Terminate the UCF client runtimeIExitRequest exitRequest =
ucfSession.getRequestFactory().newExitRequest();
// send the terminate requestucfSession.addRequest( exitRequest );ucfSession.execute();commMgr.release (clientId);
// Terminate the UCF client runtimeIExitRequest exitRequest =
ucfSession.getRequestFactory().newExitRequest();
// send the terminate requestucfSession.addRequest( exitRequest );ucfSession.execute();commMgr.release (clientId);
© 2004 EMC Corporation. All rights reserved. 39CONFIDENTIAL
BOF2ArchitectureDynamic DeploymentModules (lightweight services)Packaging and deploymentDAB changes to support BOF2RestrictionsHow to– calling business object as COMBest Practices
© 2004 EMC Corporation. All rights reserved. 40CONFIDENTIAL
Everyone should know:DFC
– Documentum Foundation Classes– Primary client API for platform
BOF– Business Object Framework is part of DFC– Business logic that runs as part of DFC
© 2004 EMC Corporation. All rights reserved. 41CONFIDENTIAL
DFC provides the client APIs for accessing the Documentum repository
DocumentumRepository
Your Services
Your TBOs
Core DFC layer – Object-oriented access to server API layer
Intrinsic Business Objects
Content Pkgs Workflow Validation Virtual Document
Operations
Intrinsic Business ObjectsICollaboration IWorkflow
High-level
Middle-level
Low-level APIs
© 2004 EMC Corporation. All rights reserved. 42CONFIDENTIAL
Background: DFC 5.1/BOF 1.0
Business Object Framework (BOF) IntroducedFramework Version 1.0 Documentum 5.x applications
– Use BOF (out of the box)– Can be customized through BOF
Business Objects registered on all clientsBOF Object Types Introduced
– Type based Objects (TBO)Provide functionality that is specific to a repository object type (e.g. my_sop_document, …) and thus repository specific
– Service Based Objects (SBO)Provide functionality that is object and repository neutral (can be employed by any application – AutoNumber Service)
© 2004 EMC Corporation. All rights reserved. 43CONFIDENTIAL
BOF BenefitsFaster developmentAbstracts business logic from presentation layer codeEncourages reusePortable across applications
© 2004 EMC Corporation. All rights reserved. 44CONFIDENTIAL
Business Object Examples• Type-based
• Change or add behavior for a specific object type• Examples: request rendition on check-in, or create folder structure
on save
• Service-based• Provides a service, not tied to a specific type• Examples: transform an XML document, inbox, workflow manager,
autonumber
© 2004 EMC Corporation. All rights reserved. 45CONFIDENTIAL
Extensibility and ComponentizationType based Objects (TBO) Behavior specific to type
dm_documentdm_document
doctype_adoctype_a
doctype_bdoctype_b
dm_sysobjectdm_sysobject
DfDocumentDfDocument
Tbo_BTbo_B
DfSysObjectDfSysObjectsave() {}
save() {... super.save();}
Tbo_ATbo_A
dm_persistentobjectdm_persistentobject DfPersistentObjectDfPersistentObject
save() {... super.save();}save() {... super.save();}save() {... super.save();}save() {... super.save();}
© 2004 EMC Corporation. All rights reserved. 46CONFIDENTIAL
Extensibility and ComponentizationBest Practice To Promote Reuse– Declare Methods in an Interface class (e.g. ITbo_A)– Implementation class
• Extends implementation of superclass (e.g. DfDocument)• Implements the Interface class (e.g. IMySOP)• Implements the IDfDynamicInheritance interface
dm_documentdm_document
doctype_adoctype_a
doctype_bdoctype_b
dm_sysobjectdm_sysobject
DfDocumentDfDocument
Tbo_ATbo_A
Tbo_BTbo_B
DfSysObjectDfSysObject
IDfDynamicInheritanceIDfDynamicInheritance
DfPersistentObjectDfPersistentObject
ITbo_AITbo_A
ITbo_BITbo_B
© 2004 EMC Corporation. All rights reserved. 47CONFIDENTIAL
Extensibility and Componentization
Service Based Objects (SBOs)– Should only contain type-neutral business logic (e.g. AutoNumber, Inbox,
Print)– Should not have type awareness for maximum portability– Framework for creating business logic components directly called from
applications– Can work on objects from multiple repositories
IDfService
accelera.app.ISubscription(custom service)
© 2004 EMC Corporation. All rights reserved. 48CONFIDENTIAL
BOF Architecture
Client Program
DFC
fc.client Session Manager
DBO Factory
SBO access TBO access
Service B.O. Typed B.O.
Documentum Repository
Session Pool
DBO Registry
© 2004 EMC Corporation. All rights reserved. 49CONFIDENTIAL
Example SBO Service
public interface IEchoSBO extends IDfService{
public String echo (String in)}
public interface IEchoSBO extends IDfService{
public String echo (String in)}
IDfClient client = DfClient.getLocalClient();IEchoSBO sbo = (IEchoSBO) client.newService(
"acccelera.app.IEchoSBO", sessionMgr);
IDfClient client = DfClient.getLocalClient();IEchoSBO sbo = (IEchoSBO) client.newService(
"acccelera.app.IEchoSBO", sessionMgr);
public class EchoSBO extends DfService implements IEchoSBO{
public String echo (String in) {
return in;}
...other methods of DfService...}
public class EchoSBO extends DfService implements IEchoSBO{
public String echo (String in) {
return in;}
...other methods of DfService...}
© 2004 EMC Corporation. All rights reserved. 50CONFIDENTIAL
BOF 2.0 OverviewNext generation Business Object Framework
– Will ship with DFC 5.3Focus:
– Administration – Dynamic Deployment– Supported by Docapps (DAB and DAI)
Requirement:– Keep with BOF 1.0 programming model
• i.e. code fully compatible; slightly stricter packaging requirements (covered later in presentation)
– Docbase-registered modules have precedence over Dbor-registered objects.
© 2004 EMC Corporation. All rights reserved. 51CONFIDENTIAL
BOF 2.0 Administration (summary) Business objects Registered in Docbase as Modules
– No longer in client machine Properties file (DBOR is deprecated)
– TBOs in corresponding Docbase– SBOs in master Docbase
Docbase stores:– Version information– Description– Type (SBO, TBO)– Dependencies– Any file (javadocs,,zip file, etc)
Documentum Repository
© 2004 EMC Corporation. All rights reserved. 52CONFIDENTIAL
BOF 2.0 Dynamic Module Deployment (summary)The way class loaders are built drove many of our decisionsBOF object modules dynamically deploy (provisioned) to clientRequires Interfaces in separate JARSupports Java LibrariesHot DeployableIntelligent caching and "sandboxing "Classpath = statically provisioned
Documentum Repository
Dynamic DeploymentDynamic Deployment
© 2004 EMC Corporation. All rights reserved. 53CONFIDENTIAL
ModuleOne or more pieces of logicOne or more jars– Implementation Jar– Public interface jar (including public classes)
public interface IFoo BusinessObject{
void bar() throws MyException{...}
}
public interface IFoo BusinessObject{
void bar() throws MyException{...}
}
In this example, MyException is considered as one of the public classes
In this example, MyException is considered as one of the public classes
© 2004 EMC Corporation. All rights reserved. 54CONFIDENTIAL
Example SBO Module
public interface IEchoModule extends IModule{
public String echo (String in)}
public interface IEchoModule extends IModule{
public String echo (String in)}
IDfClient client = DfClient.getLocalClient();EchoModule module = (IEchoModule) client.newModule(
docbaseName, "echoModule", sessionMgr );
IDfClient client = DfClient.getLocalClient();EchoModule module = (IEchoModule) client.newModule(
docbaseName, "echoModule", sessionMgr );
public class EchoModule implements IEchoModule{
public String echo (String in) {
return in;}
}
public class EchoModule implements IEchoModule{
public String echo (String in) {
return in;}
}
© 2004 EMC Corporation. All rights reserved. 55CONFIDENTIAL
Shared Java Libraries - SandboxedOptional "sandboxing" is controlled via a setting for each
SBO1SBO1 SBO2SBO2
JDOMJDOM
Xalan 1Xalan 1 Xalan 2Xalan 2
JDOMJDOM JDOMJDOM
SBO1SBO1 SBO2SBO2
© 2004 EMC Corporation. All rights reserved. 56CONFIDENTIAL
BOF 2.0 Packaging and DeploymentCreating a Documentum Business Object will involve the following steps: 1) Implementing the business object. This includes tasks such as:
a) Defining the interface and implementation. b) Implementing the IDfBusinessObject methods and its business logic.
2) Packaging and deploying the business object in Docapps! You can either:
a) They can take advantage of the Documentum Application Builder (DAB) UI which will lead you through the process (Uses ANT tasks for deployment)
b) Write the XML config file on your own and execute the task as a command prompt program (ANT tasks)
3) Distributing the business object to pertinent Docbases (TBO) or to the master Docbase (SBO) through the Documentum Application Installer (DAI).
Note: Dependent Jars - see your "import" listNote: Dependent Jars - see your "import" list
© 2004 EMC Corporation. All rights reserved. 57CONFIDENTIAL
Hot DeploymentIDfClient.newModule() - specify Docbase - causes a concurrency checkIDfClient.newService() is also hot-deployable from master Docbase
Hot-deployability doesn't allow changing the interface2 options
– Extend the interface– Restart the DFC client process
public interface IFoo BusinessObject{
void bar() throws MyException{`...}
}
public interface IFoo BusinessObject{
void bar() throws MyException{`...}
}
© 2004 EMC Corporation. All rights reserved. 59CONFIDENTIAL
• JAR files for the business object’s implementation and interface.
• Named for the respective business object (either service name or type name, e.g. “mySBO”)
• Java Libraries JARs can be stored in repository
• Dependent interface jars. Interfaces to any used business object must be in a JAR and stored with the referencing business object in the “External Interfaces” folder.
• Dependent interface jars
Organization in Repository
Be sure to use proper naming convention
Be sure to use proper naming convention
mySBO.jarmySBOImpl.jarjavadoc.zipruntime environment.xml
mySBO
JDOMjdom.jar
myTBO.jar
External Interfaces
Miscellaneous
ModulesSystem
Docbase
SBO
TBO
Aspect
readme.txt
© 2004 EMC Corporation. All rights reserved. 60CONFIDENTIAL
Interface &Implementation
JARs
Module:Name, Type,
Version
© 2004 EMC Corporation. All rights reserved. 61CONFIDENTIAL
Path to Javadoc
Name, Version
Interfaces
Min DFC andJVM Versions (for reference)
© 2004 EMC Corporation. All rights reserved. 62CONFIDENTIAL
File pathwhen
deployed
Name/Value properties
Message logged
client-sidepost download
Nameswhen
deployed
© 2004 EMC Corporation. All rights reserved. 63CONFIDENTIAL
Third PartyJARs
DependentBusinessObjects
© 2004 EMC Corporation. All rights reserved. 64CONFIDENTIAL
Provider,Contact,
Description
Supportingdocuments:README,
license, etc.
© 2004 EMC Corporation. All rights reserved. 65CONFIDENTIAL
Ant build script
<taskdef name="BOFPackaging" classname="com.documentum.bof.ant.BOFPackaging" classpathref="classpath"/><target name="compileAndJar"
description="compiles source and jar"><javac srcdir="." destdir="./build/classes"
classpathref="classpath" target="1.4" source="1.4"/><jar jarfile="./build/lib/echo.jar">
<fileset dir="./build/classes"><include name="**\EchoSBO.class"/><exclude name="**\IEchoSBO.class"/>
</fileset></jar><jar jarfile="./build/lib/iecho.jar">
<fileset dir="./build/classes"><include name="**\IEchoSBO.class"/><exclude name="**\EchoSBO.class"/>
</fileset></jar>
</target>...
<taskdef name="BOFPackaging" classname="com.documentum.bof.ant.BOFPackaging" classpathref="classpath"/><target name="compileAndJar"
description="compiles source and jar"><javac srcdir="." destdir="./build/classes"
classpathref="classpath" target="1.4" source="1.4"/><jar jarfile="./build/lib/echo.jar">
<fileset dir="./build/classes"><include name="**\EchoSBO.class"/><exclude name="**\IEchoSBO.class"/>
</fileset></jar><jar jarfile="./build/lib/iecho.jar">
<fileset dir="./build/classes"><include name="**\IEchoSBO.class"/><exclude name="**\EchoSBO.class"/>
</fileset></jar>
</target>...
© 2004 EMC Corporation. All rights reserved. 66CONFIDENTIAL
Deployment via ANT script
<target name="package" depends="compileAndJar"><BOFPackaging moduleName="EchoSbo"
moduleType="SBO" implTech="Java" minDFCVersion="5.3" description="Will Echo anything" contactInfo="[email protected]" docAppName="EchoApp" >
<primaryClass name="com.documentum.Echo"/><addToPackage versionPolicy="minor">
<jarFileSet dir="./build/lib" jarType="2" minVMVersion="1.4.1" downloadable="true">
<include name="echo.jar"/></jarFileSet><jarFileSet dir="./build/lib" jarType="1"
minVMVersion="1.4.1" downloadable="true"><include name="iecho.jar"/>
</jarFileSet></addToPackage>
</BOFPackaging></target>
<target name="package" depends="compileAndJar"><BOFPackaging moduleName="EchoSbo"
moduleType="SBO" implTech="Java" minDFCVersion="5.3" description="Will Echo anything" contactInfo="[email protected]" docAppName="EchoApp" >
<primaryClass name="com.documentum.Echo"/><addToPackage versionPolicy="minor">
<jarFileSet dir="./build/lib" jarType="2" minVMVersion="1.4.1" downloadable="true">
<include name="echo.jar"/></jarFileSet><jarFileSet dir="./build/lib" jarType="1"
minVMVersion="1.4.1" downloadable="true"><include name="iecho.jar"/>
</jarFileSet></addToPackage>
</BOFPackaging></target>
© 2004 EMC Corporation. All rights reserved. 67CONFIDENTIAL
Service Based Objects (SBO)Special type of moduleDon’t have repository affinityReside in "master" Docbase
– Connects to "master" Docbase using credentials located in the dfc.properties file.Properties of note in dfc.properties:
Property Descriptiondfc.sbo.host Indicates name of repository
containing SBOs
dfc.sbo.host.username User name for an account that the system administrator will set up. We recommend READ permission to SBOs only.
dfc.sbo.host.password Clear or encrypted password. (Encryption requires DMCL setup with encryption key. [crippled user account?])
© 2004 EMC Corporation. All rights reserved. 68CONFIDENTIAL
Alternative SBO DocbasesA module can be downloaded from a specified Docbase(alternative to using the SBO master Docbase)New IDfClient method:IDfModule IDfClient.newModule( hostDobase, sMgr, moduleName )Downloads the SBO from the specified host Docbaseinstead of the master DocbaseIDfModule is a marker interface with no methods
© 2004 EMC Corporation. All rights reserved. 69CONFIDENTIAL
Restricted SBO DocbaseA module can be downloaded from a specified Docbase(alternative to using the SBO master Docbase)
When the module needs access to multiple Docbasesimplement the IDfMultipleDocbaseModule interface
public interface IDfSingleDocbaseModule extends IDfModule{
void setSessionManager( IDfSessionManager sMgr, String docbaseName);
}
public interface IDfSingleDocbaseModule extends IDfModule{
void setSessionManager( IDfSessionManager sMgr, String docbaseName);
}
public interface IDfMultipleDocbaseModule extends IDfModule{
void setSessionManager( IDfSessionManager sMgr );}
public interface IDfMultipleDocbaseModule extends IDfModule{
void setSessionManager( IDfSessionManager sMgr );}
© 2004 EMC Corporation. All rights reserved. 70CONFIDENTIAL
BOF2 RegistryIDfDbor is a deprecated interface– Will still work– Docbase-registered business objects take precedenceInstead, useIDfMasterDocbaseRegistry = IDfClient.getGlobalRegistry() – This connects to the master Docbase using the userid, password, and
Docbase specified in the dfc.properties file.
© 2004 EMC Corporation. All rights reserved. 71CONFIDENTIAL
BOF2 Best PracticesPackage and deploy business objects in DocappsNever change an interfaceCasting interface to class = check against an interface-only jarExtending SysObjectsCache CoherencyConcrete classes - don't use
© 2004 EMC Corporation. All rights reserved. 74CONFIDENTIAL
Web Service support Business logic should be abstracted from UI
– Simplification– Reuse– Migration when UI technology changes
Plugging into SOA– Documentum isn’t your only platform– As SOA becomes more common Documentum must integrate
seamlessly
We saw commonality in what customers wanted to do with ECM and Web Services and we wanted to make this easier to implement.
© 2004 EMC Corporation. All rights reserved. 75CONFIDENTIAL
Web Services SupportDocumentum Platform Release 5.3
– DFC includes Web Services Framework– Leverages BOF SBOs
• Authoring• Deployment
Web SBO Web SBO Programming Programming
ModelModelContentContent
er (UCF)er (UCF)DevelopDevelopmentment
ToolsToolsWeb Service Web Service
Runtime (Axis 1.2)Runtime (Axis 1.2).NET.NET friendly friendly
WSDLWSDLTransfTransf
© 2004 EMC Corporation. All rights reserved. 76CONFIDENTIAL
AssumptionsRemote-procedure-call (JAX-RPC) style interactions
– Marshalling is done in XML / SOAPPoint-to-point interactions
– Not involving complicated routing Intra-corporate biasClient-side web service framework neutrality
– At minimum, Java and .NET
Explicit non-goal:– Dynamic provisioning of web services
• The publication of a BOF service as a web service requires deliberate design-time intervention and explicit manual publication.
© 2004 EMC Corporation. All rights reserved. 77CONFIDENTIAL
Web Services RoadmapExamples: Plugging into SOA
– Timeframes vary• Some underway already
Web SBO Web SBO Web SBO Programming Programming Programming
ModelModelModelDevelopmentDevelopmentDevelopment
ToolsToolsToolsWeb Service Web Service Web Service
Runtime (Axis 1.2)Runtime (Axis 1.2)Runtime (Axis 1.2)ContentContentContent
Transfer (UCF)Transfer (UCF)Transfer (UCF).NET friendly.NET friendly.NET friendly
WSDLWSDLWSDLWeb Services FrameworkWeb Services Framework
Library Library Library OperationsOperationsOperations
WSBOsWSBOsWSBOsAdministrationAdministrationAdministration
WSBOsWSBOsWSBOsQuery Query Query WSBOWSBOWSBO
SearchSearchSearchWSBOWSBOWSBO
Many Many Many More…More…More…Web Services LibraryWeb Services Library
WSRPWSRP(Portlets)(Portlets)
Authoring Authoring IntegrationsIntegrations BPSBPS EAIEAI .NET .NET
ApplicationsApplications
© 2004 EMC Corporation. All rights reserved. 78CONFIDENTIAL
Web Services Framework OverviewCode generator
– Included with Documentum Application Builder (DAB)Packager
– Included with Documentum Application Builder (DAB)Manual Deployment
– Placing generated WAR on application server • (e.g. in the WebApps directory on Tomcat)
Runtime support classes– Servlet that needs to be hosted in a web container
© 2004 EMC Corporation. All rights reserved. 79CONFIDENTIAL
Deployment steps
Development Machine1) Implement BOF
service
2) Code generateand packagethrough DAB
3) Package compiled classes with DAI
Production Machines4) Distribute BOF
Service & WebService extension
via DAI
5) Run deploy tool to publish to runtime
environment
4) Distribute BOF service to repository
via DAI
5) Manually deploy WAR to application
server
© 2004 EMC Corporation. All rights reserved. 80CONFIDENTIAL
How does code generation work? (slide 1 of 2)1) Reflects on a service-based business object for signatures2) Constructs an aggregate interface comprising the method
signatures from all implemented interfaces, explicitly excluding IDfService and its superclasses. – Marshals arguments and return types in XML-based SOAP format– Supported datatypes mapped to JAX-RPC friendly types for input
arguments and return values.3) Generates a concrete wrapper class implementing the
contrived interface.4) Generated class is presented to the Axis infrastructure for
skeleton/WSDL generation. – Documentum type mappings and SOAP header manipulations
influence the WSDL generation.– Header definitions included in the WSDL. This facilitates automatic
stub generation for clients.
© 2004 EMC Corporation. All rights reserved. 81CONFIDENTIAL
InterfacesSignatures:
– In general, only support services with interfaces compliant to JAX-RPC
– For example:• Java primitive types and their wrappers• String• Calendar• “value types”
– Concrete classes with a public, no-argument constructor, and data accessibility via getters and setters, so long as the data are also JAX-RPC friendly. May be nested.
– Non-sparse arrays are also acceptableNo support for arbitrary interfaces
– other than BOF exceptions to this rule
© 2004 EMC Corporation. All rights reserved. 82CONFIDENTIAL
ReliabilityDepends solely on the reliability of the underlying BOF service
© 2004 EMC Corporation. All rights reserved. 83CONFIDENTIAL
Supported EnvironmentsThe web services framework requires a servlet container environment as host (such as Tomcat).We should support most, if not all, web service client environments that can take WSDL as the service definition.
© 2004 EMC Corporation. All rights reserved. 84CONFIDENTIAL
VersioningCompatible interface extensions to the underlying BOF service require a new manual web service deployment.Supports BOF 2.0 dynamic deployment of JAR.WS client code continues to function as expected
© 2004 EMC Corporation. All rights reserved. 85CONFIDENTIAL
InteroperabilityWS-I Basic Profile interoperability standard
– mandates document/literal style (schema-centric) SOAP messagesAdditional standards considered over time.
– Notably, any emerging as .NET evolves.
© 2004 EMC Corporation. All rights reserved. 86CONFIDENTIAL
Content TransferThe following types (in parameters or return values) suggest content transfer:
– javax.activation.DataSource– java.io.File– java.io.Reader– java.io.InputStream– (or the corresponding array types)
Code generator produces web service definition using SOAP attachment technology (possilbly)
– MIME, not DIME (as the latter is being phased out)Support for UCF is also planned
– This would require some optional client-side code to establish an inbound UCF connection
© 2004 EMC Corporation. All rights reserved. 87CONFIDENTIAL
Repository Credentials ServiceInitial use
– Create a new session manager instance, attach the Docbasecredentials, and save the session manager instance in a registry for later recovery.
– Generate a unique token to act as a key to the session manager instance. This key will be returned to the caller.
Subsequent use– Existing token is presented along with new or amended credentials. – The existing session manager instance will be recovered and
augmented/updated with the new credentials.
Optionally supports expiration periodSupports passing token to other Web Services
– Finds Session Manger based on token
© 2004 EMC Corporation. All rights reserved. 88CONFIDENTIAL
SecurityRepository credentials not passed in clear text (by default)SSL support
– Acceptable in a point-to-point environmentWS-Security support
– Planned– Cost: More complex client involvement would be required– Benefits: Digital signature support, partial encryption, etc.
© 2004 EMC Corporation. All rights reserved. 89CONFIDENTIAL
DAB SupportDAB support Services only (SBO's)Click on "Expose as Web Service" checkboxWAR file is generated
© 2004 EMC Corporation. All rights reserved. 90CONFIDENTIAL
DAB SupportAfter deploying the generated was to our web server the Echo Web service is available athttp://myhost:8080/dfcws/services/echo (configurable), To obtain the wsdl, just point your favorite IDE tohttp://myhost:8080/dfcws/services/echo?wsdl
© 2004 EMC Corporation. All rights reserved. 91CONFIDENTIAL
SampleIn C# you could write the following
Echo.IEchoWSService echoService = new Echo.IEchoWSService();String echo = echoService.echo("my string");Echo.IEchoWSService echoService = new Echo.IEchoWSService();String echo = echoService.echo("my string");
© 2004 EMC Corporation. All rights reserved. 92CONFIDENTIAL
Web Services Best PracticesDon't expose PersistentObjects via SBO interface– Instead, pass ID aroundDesign for "remotability"Multiple simultaneous use
© 2004 EMC Corporation. All rights reserved. 95CONFIDENTIAL
MiscellaneousAspectsNativeValidationSearchDocumentum Programmable Interop Assemblies (PIA)
© 2004 EMC Corporation. All rights reserved. 97CONFIDENTIAL
Agenda
• Current Object Model• New Object Model (Aspect based)• Aspect as first class facility• Open Issues• Implementation Details• Future Extensions
© 2004 EMC Corporation. All rights reserved. 98CONFIDENTIAL
Current Object ModelDocbase object types define object attributesBOF 1.0 TBO defines object type custom behavior
a_extended_properties – Allows attachment of additional attributes to an object– Does not allow attaching a custom behavior per object instance– Business logic is implemented in an applicationapplication_code – protects objects that need a custom behavior
TBO = Object Type attributes + [behavior]
© 2004 EMC Corporation. All rights reserved. 99CONFIDENTIAL
Limitations of current modelDoes not allow customization of object behavior across object types– Based on object location, format, an attribute valueEmbraces non-interoperable applicationsServer and DFC do not provide built-in support for extended properties
© 2004 EMC Corporation. All rights reserved. 100CONFIDENTIAL
New Aspect-based Object ModelIntroduces a new concept – AspectsAspect is an extension of dm_sysobject "instance"Includes additional attributes and behaviorA client attaches an aspect to an object "instance"A SysObject may have several aspects
Each Aspect component is optional
SysObject Instance = TBO + [Aspects]Aspect = [attributes] + [behavior]
© 2004 EMC Corporation. All rights reserved. 101CONFIDENTIAL
Aspect RequirementsAspect implementation should be compatible with existing clients that are not aware of aspects. No code modification is required for existing client to use object instances with attached aspects.Aspect implementation should be compatible with TBO. Aspect custom behavior should augment type-specific behavior, but not replace it.Aspect is a natural object extension and all object operations are applicable for object extensions -- aspect attribute access, updating extended objects, querying extended attributes should follow the existing programming model for a sysobject.
© 2004 EMC Corporation. All rights reserved. 102CONFIDENTIAL
Additional Aspect RequirementsAspects should be a first class facility in the Documentum platform. All platform components should respect aspects.Aspect implementation should be efficient and robust. A client should not be able to manipulate aspects directly.The Documentum development tools should provide a facility for defining aspects, attaching custom behavior, etc.
© 2004 EMC Corporation. All rights reserved. 103CONFIDENTIAL
Persistent Modeldm_sysobject – 2 new attributes– r_aspect_id (possibly)– i_aspect_namedm_aspect (new type) – base object type for all aspectsdm_aspect_type (new type) – describes aspect– Name– Version– Object_type– Descriptiondm_aspect_relation– Parent aspect– Child aspect– Relation type
© 2004 EMC Corporation. All rights reserved. 104CONFIDENTIAL
Persistent Data Model Diagram
wcm
dm_aspectdm_sysobject
(r_aspect_id)
Id 1Id 2
i_aspect_name
Name 1Name 2
Aspectattributes
DBOR WcmAspect
DfAspect
registered
© 2004 EMC Corporation. All rights reserved. 105CONFIDENTIAL
RuntimeDFC provides explicit methods for aspect manipulationThe instantiation of a SysObject with attached aspects is transparent to the existing clients.A client that has no knowledge about a particular aspect will operate with an implementation object that honors its custom behavior. Attaching or detaching aspects requires changing underlying object implementation. A compound object could be implemented with the dynamic proxy (Java 1.3) facility complemented by the dynamic inheritance mechanism introduced in the DFC 5.2.
© 2004 EMC Corporation. All rights reserved. 106CONFIDENTIAL
dm_document
my_sop
DfDocument
TBO Impl. class
ISOP
DFC Aspect model
aspect_2
aspect_1 Aspect 1 Impl. classAspect 2 Impl. class
IAspect1
IAspect2
RegisteredAspects
Compound Object
Aspect 2Impl. class
TBO Impl. classISOP
IAspect1
IAspect2Aspect 1Impl. class
© 2004 EMC Corporation. All rights reserved. 107CONFIDENTIAL
DFC Dynamic ImplementationSysobject underlying implementation
DfDocument
TBO imp class
Aspect 1 imp class
IDfDocument int
Aspect 2 imp class
ITBO int
IAspect 1 int
IAspect 2 int
Dynamic Proxy
© 2004 EMC Corporation. All rights reserved. 108CONFIDENTIAL
GuidelinesDo not use concrete persistent classes
– Session.getObjectXxx() methods will return objects that implement IDfPersistentObject interface, but they will not be castable to DfPersistentObject class
Do not use DMCL pass through APIDo not use DQL Update/Delete commands on objectsRe-factor existing applications that use getObjectWithInterface() into Aspect-based interfaces
© 2004 EMC Corporation. All rights reserved. 109CONFIDENTIAL
Aspect as first class facilityThe access methods (set/get/append/find/remove/validate ) to the aspect attributes is the same as access to the type-specific attributes.All operations that could be performed on a sysobject are extended for supporting the notion of aspects.– Fetching sysobjects with aspects – Saving, checkin and checkout sysobjects with aspects – Destroying sysobjects with aspects – Auditing – Querying sysobjects with aspects Aspects and data dictionary
© 2004 EMC Corporation. All rights reserved. 110CONFIDENTIAL
Intrinsic to other API on platformBusiness logic implementation and eCS Aspects and XML applications Aspects in the distributed environment Aspects in the WDK Development and deployment tools Aspects and Web Cache
© 2004 EMC Corporation. All rights reserved. 111CONFIDENTIAL
Phased ReleaseCurrent plans:– 5.3 release will include the first phase of Aspect implementation –
behavior– 5.3 release will not support aspect specific attributes – No XML application support, Web Cache, etc.– No DQL extensions– Aspect in 5.3 is provided only for internal teams – Collaboration
Services, Record Manager
© 2004 EMC Corporation. All rights reserved. 114CONFIDENTIAL
BenefitsMulti-Docbase searchNew Query BuilderNext generation Smart Query + WDK
© 2004 EMC Corporation. All rights reserved. 115CONFIDENTIAL
DQL execution improvementsSped up full-text queriesSearch for content-less objectsCustomizable full-text indexing hooksSingle Box Search
© 2004 EMC Corporation. All rights reserved. 116CONFIDENTIAL
Documentum Enterprise Content Integration Services
Provides access to the global content in just one queryEnhances existing solutions in place without imposing change
Find, assimilate, synthesize, share and integrate information
Adapts to changes of the information space
Coexists with any kind of IT infrastructure
© 2004 EMC Corporation. All rights reserved. 117CONFIDENTIAL
ECI 5.3 Architecture
Docbases
PortalWebtop
DFC 5.3
WDK 5.3
ECI Services 5.3
Lexis NexisLotus Domino
ECI Client 5.3 ECI Portal 5.3
WWW
Access to external contents
© 2004 EMC Corporation. All rights reserved. 118CONFIDENTIAL
WDK Search ComponentsSingle box search
– Multi-docbases
Results and Status– Wait screen – Results– Status– Status refreshed– Status stopped– Enter credentials from status– No results
Advanced and Revise– Advanced from results (revise a
search)– Advanced from browsing– Advanced cleared
Preferences– Search locations - favorite
repositories– Search locations - selected
specifically– Favorite repositories– Favorite repositories (admin)
Changing Sources– Change sources – Check box selected – Authenticate repository– Repository added to list – Navigate into repository and
breadcrumb – Navigate into a cabinet and
breadcrumb
Saving a Search – My saved searches– Properties of a saved search– All saved searches
© 2004 EMC Corporation. All rights reserved. 119CONFIDENTIAL
DCTM 5.3 Extended SearchQuery Building in DFC
import com.documentum.fc.client.search.*;
// InitializationIDfSearchService searchService =
client.newSearchService(session);
IDfMetadataMgr metadataMgr = searchService.newMetadataMgr();IDfQueryMgr queryMgr = searchService.newQueryMgr(metadataMgr);
// Creation of the queryIDfQueryBuilder queryBuilder = queryMgr.newQueryBuilder();queryBuilder.addSelectedSource("dm_notes");queryBuilder.addSelectedSource("AmazonBooks");`
// Definition of the constraintsIDfExpressionSet exprSet = queryBuilder.getRootExpressionSet();exprSet.addFullTextExpression("singleton Java");
exprSet.addSimpleAttrExpression("title", IDfValue.DF_STRING,IDfSimpleAttrExpression.SEARCH_OP_CONTAINS,false, false, “design patterns”);
import com.documentum.fc.client.search.*;
// InitializationIDfSearchService searchService =
client.newSearchService(session);
IDfMetadataMgr metadataMgr = searchService.newMetadataMgr();IDfQueryMgr queryMgr = searchService.newQueryMgr(metadataMgr);
// Creation of the queryIDfQueryBuilder queryBuilder = queryMgr.newQueryBuilder();queryBuilder.addSelectedSource("dm_notes");queryBuilder.addSelectedSource("AmazonBooks");`
// Definition of the constraintsIDfExpressionSet exprSet = queryBuilder.getRootExpressionSet();exprSet.addFullTextExpression("singleton Java");
exprSet.addSimpleAttrExpression("title", IDfValue.DF_STRING,IDfSimpleAttrExpression.SEARCH_OP_CONTAINS,false, false, “design patterns”);
© 2004 EMC Corporation. All rights reserved. 120CONFIDENTIAL
DCTM 5.3 Extended SearchQuery Execution in DFC
// Synchronous executionIDfQueryProcessor syncProcessor =
searchService.newQueryProcessor(queryBuilder);
// -1 == no timeoutIDfResultsSet results = syncProcessor.blockingSearch(-1);
manipulator = service.newResultsManipulator(metadataMgr);
IDfResultsSet sortedResults = manipulator.sortBy( results, "date", true);
// Synchronous executionIDfQueryProcessor syncProcessor =
searchService.newQueryProcessor(queryBuilder);
// -1 == no timeoutIDfResultsSet results = syncProcessor.blockingSearch(-1);
manipulator = service.newResultsManipulator(metadataMgr);
IDfResultsSet sortedResults = manipulator.sortBy( results, "date", true);
© 2004 EMC Corporation. All rights reserved. 122CONFIDENTIAL
Collaboration ServicesPackaged with DFC 5.3Additional license for comment thread and notes– Remainder is intrinsic to 5.3 platform
Rich TextNotesCommentsDiscussion ThreadsWorkspaces
© 2004 EMC Corporation. All rights reserved. 123CONFIDENTIAL
Collaboration ServiceTBO dmc_notepage (rich can store rich text)Service for attaching discussion ICommentManager– Manages attaching discussions and comments to SysObjectsService for attaching rich text property to any SysObjectIRichTextManagerService for 'relating' dmc_topic discussions to any SysObjectITopic - Folder subtype– replying to comments and deleting commentsIComment - Sysobject subtype– Setting title, rich text to body of comment
© 2004 EMC Corporation. All rights reserved. 125CONFIDENTIAL
ValidationDramatic performance improvementsMigration at install timeIntegration with DABIDfValidationModule interface available for you to implement your own custom validation upon CREATE or ALTER type.– Currently only works with single attributes, not repeating attributes
© 2004 EMC Corporation. All rights reserved. 126CONFIDENTIAL
Things to avoidByte version of string manipulation functionsIf you are using MessageFormat / NumberFormat - like methods, avoid formatting arguments that make use of the regional settings (such as "ddddd", "dddddd", "ttttt")You will need to express date literals used in expressions in canonical format to successfully couple with Java (2004/01/07; 2004/01/07 13:51:23; 13:51:23)
© 2004 EMC Corporation. All rights reserved. 128CONFIDENTIAL
Primary InteropAssembly
DFC(Java)
DJCB(COM)
DFC PIA(.NET)
Java clients
VB clients
C# clients
© 2004 EMC Corporation. All rights reserved. 129CONFIDENTIAL
Using the DFC PIA
Install ‘Documentum DFC PIA.msi’– Requisite version of DFC– .NET Framework 1.1– Updates GAC and creates private reference PIA
Integrate DFC into your applications– Reference DFC PIA– Call DFC functionality
• IntelliSense• Object Browser
© 2004 EMC Corporation. All rights reserved. 130CONFIDENTIAL
DFC Integration within Visual Studio .NET
Full IntelliSense support
© 2004 EMC Corporation. All rights reserved. 131CONFIDENTIAL
DFC Integration within Visual Studio .NET
Full Object Browser support
© 2004 EMC Corporation. All rights reserved. 132CONFIDENTIAL
Updating the DFC PIA
You are in control– Documentum recommends– Enterprise decides
Publisher provides guidance– “Publisher policy” (e.g. 5.2.5 5.3)
Customer/partner decides– Automatically redirect custom code to new release– Remain fixed on original foundation
<publisherPolicy apply="no"/>