Front cover WebSphere Portal 4.12 Collaboration Services Hints and Tips for performing a successful installation Use of the Collaborative Components API and tags Sample collaborative portlets William Tworek Vince Fertig Daniel de la Fuente Martinez Margaret O’Connell Michael Renner ibm.com/redbooks Redpaper International Technical Support Organization WebSphere Portal 4.12 Collaboration Services August 2002 Note: Before using this information and the product it supports, read the information in “Notices” on page vii. First Edition (August 2002) This edition applies to WebSphere Portal Extend, v4.12 © Copyright International Business Machines Corporation 2002. All rights reserved. Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. Contents Notices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . The team that wrote this Redpaper . . . . . . . . . . . . . . . . . . Become a published author . . . . . . . . . . . . . . . . . . . . . . . . Comments welcome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....... ....... ....... ....... ...... ...... ...... ...... . . . ix . . . ix . . . xi . . . xi Chapter 1. Introduction to WebSphere Portal. . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Introduction to WebSphere Portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 What is the WebSphere Portal family . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.1 WebSphere Portal Enable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.2 WebSphere Portal Extend. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.3 WebSphere Portal Experience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 The WebSphere Portal infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.1 WebSphere Portal runtime process flow . . . . . . . . . . . . . . . . . . . . . . . 8 Chapter 2. Installation, configuration, and deployment planning . . . . . . 11 2.1 The installation process. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.1 The Setup Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1.2 Install approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.1.3 Hints/tips for using the Setup Manager . . . . . . . . . . . . . . . . . . . . . . . 14 2.2 Installing manually. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 Integration with Lotus collaboration technologies . . . . . . . . . . . . . . . . . . . 22 2.3.1 Lotus Domino integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.2 Lotus Sametime integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.3.3 Lotus QuickPlace (2.08) integration . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.3.4 Lotus Discovery Server integration . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.4 Testing your WebSphere Portal Extend install . . . . . . . . . . . . . . . . . . . . . 30 2.4.1 Verifying Domino integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.4.2 Verifying people awareness and menu services . . . . . . . . . . . . . . . . 32 2.5 Deploying the collaborative portlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.6 Deploying the Collaborative Components (API) . . . . . . . . . . . . . . . . . . . . 34 2.7 Installed components of WebSphere Portal Extend . . . . . . . . . . . . . . . . . 36 2.7.1 Key files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.7.2 Log files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.7.3 Registry entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.7.4 Directory structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.8 Collaborative portal deployment planning . . . . . . . . . . . . . . . . . . . . . . . . . 40 © Copyright IBM Corp. 2002. All rights reserved. iii 2.8.1 2.8.2 2.8.3 2.8.4 General WebSphere Application Server considerations . . . . . . . . A test and proof-of-concept environment . . . . . . . . . . . . . . . . . . . A more typical production environment. . . . . . . . . . . . . . . . . . . . . Collaboration technology considerations (LDAP and SSO) . . . . . .. .. .. .. 40 40 41 43 Chapter 3. Collaborative portlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.1 An introduction to key portlet concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.1.1 What a portlet is . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.1.2 Portlet modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.2 Introduction to the collaborative portlets . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.2.1 Included collaborative portlets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.2.2 Other collaborative portlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.2.3 Downloading collaboration portlet updates (portlet catalog) . . . . . . . 53 3.2.4 A sample use of the collaboration portlets . . . . . . . . . . . . . . . . . . . . 54 3.3 The Notes portlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.3.1 NotesView portlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.3.2 NotesMail portlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 3.3.3 MyNotes portlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.3.4 Notes Discussion and Teamroom portlets . . . . . . . . . . . . . . . . . . . . 69 3.3.5 Common features of the Notes portlets . . . . . . . . . . . . . . . . . . . . . . 70 3.4 iNotes portlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.5 Sametime portlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.6 Quickplace portlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 3.7 Bookmark and Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.7.1 Bookmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.7.2 Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.8 Collaborative portlet deployment considerations. . . . . . . . . . . . . . . . . . . . 79 3.8.1 Do not forget browser limitations. . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.8.2 Consider enabling caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.8.3 Notes on Domino compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.8.4 Setting myportal addresses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Chapter 4. Collaborative Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.2 Overview of the Collaborative Components . . . . . . . . . . . . . . . . . . . . . . . 85 4.2.1 Infrastructure objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.2.2 Java service objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.2.3 Subordinate objects for DominoService . . . . . . . . . . . . . . . . . . . . . . 86 4.2.4 Tag language descriptors for custom tags . . . . . . . . . . . . . . . . . . . . 86 4.3 Developing a basic collaborative portlet . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.3.1 Software prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.3.2 Setting up WebSphere Studio Application Developer . . . . . . . . . . . . 88 4.3.3 Writing a basic collaborative Hello portlet . . . . . . . . . . . . . . . . . . . . . 90 iv WebSphere Portal 4.12 Collaboration Services 4.3.4 Deploying the Collaborative Hello portlet . . . . . . . . . . . . . . . . . . . . . 95 4.4 Advanced collaborative portlet samples . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.4.1 PeopleSample portlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.4.2 MenuSample portlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.4.3 An advanced collaboration sample . . . . . . . . . . . . . . . . . . . . . . . . . 107 4.4.4 Deploying Advanced Collaboration portlets . . . . . . . . . . . . . . . . . . 115 4.5 Best practices for collaborative portlet development. . . . . . . . . . . . . . . . 119 4.5.1 Debugging recommendations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 4.5.2 Portlet deployment considerations . . . . . . . . . . . . . . . . . . . . . . . . . 120 4.5.3 Portlet performance considerations . . . . . . . . . . . . . . . . . . . . . . . . 121 Appendix A. Collaborative Components: classes/methods . . . . . . . . . . 125 CalendarDayInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 ColumnInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 CSCredentials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 CSEnvironment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 CSFactory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 DiscoveryServerService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 DominoService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 EntryInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 PeopleService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 QPService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 RowInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 ViewInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Appendix B. Collaborative Components: tag libraries . . . . . . . . . . . . . . 153 People Service tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Menu Library tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Appendix C. Additional material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Locating the Web material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Using the Web material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Related publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Related IBM Redbooks/Redpapers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Product documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Referenced Web sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 How to get IBM Redbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Contents v vi WebSphere Portal 4.12 Collaboration Services Notices This information was developed for products and services offered in the U.S.A. IBM may not offer the products, services, or features discussed in this document in other countries. Consult your local IBM representative for information on the products and services currently available in your area. Any reference to an IBM product, program, or service is not intended to state or imply that only that IBM product, program, or service may be used. Any functionally equivalent product, program, or service that does not infringe any IBM intellectual property right may be used instead. However, it is the user's responsibility to evaluate and verify the operation of any non-IBM product, program, or service. IBM may have patents or pending patent applications covering subject matter described in this document. The furnishing of this document does not give you any license to these patents. You can send license inquiries, in writing, to: IBM Director of Licensing, IBM Corporation, North Castle Drive Armonk, NY 10504-1785 U.S.A. The following paragraph does not apply to the United Kingdom or any other country where such provisions are inconsistent with local law: INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THIS PUBLICATION "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Some states do not allow disclaimer of express or implied warranties in certain transactions, therefore, this statement may not apply to you. This information could include technical inaccuracies or typographical errors. Changes are periodically made to the information herein; these changes will be incorporated in new editions of the publication. IBM may make improvements and/or changes in the product(s) and/or the program(s) described in this publication at any time without notice. Any references in this information to non-IBM Web sites are provided for convenience only and do not in any manner serve as an endorsement of those Web sites. The materials at those Web sites are not part of the materials for this IBM product and use of those Web sites is at your own risk. IBM may use or distribute any of the information you supply in any way it believes appropriate without incurring any obligation to you. Information concerning non-IBM products was obtained from the suppliers of those products, their published announcements or other publicly available sources. IBM has not tested those products and cannot confirm the accuracy of performance, compatibility or any other claims related to non-IBM products. Questions on the capabilities of non-IBM products should be addressed to the suppliers of those products. This information contains examples of data and reports used in daily business operations. To illustrate them as completely as possible, the examples include the names of individuals, companies, brands, and products. All of these names are fictitious and any similarity to the names and addresses used by an actual business enterprise is entirely coincidental. COPYRIGHT LICENSE: This information contains sample application programs in source language, which illustrates programming techniques on various operating platforms. You may copy, modify, and distribute these sample programs in any form without payment to IBM, for the purposes of developing, using, marketing or distributing application programs conforming to the application programming interface for the operating platform for which the sample programs are written. These examples have not been thoroughly tested under all conditions. IBM, therefore, cannot guarantee or imply reliability, serviceability, or function of these programs. You may copy, modify, and distribute these sample programs in any form without payment to IBM for the purposes of developing, using, marketing, or distributing application programs conforming to IBM's application programming interfaces. © Copyright IBM Corp. 2002. All rights reserved. vii Trademarks The following terms are trademarks of the International Business Machines Corporation in the United States, other countries, or both: AIX® DB2® IBM® Perform™ Redbooks™ Redbooks(logo)™ SP™ Tivoli® TME® WebSphere® xSeries™ The following terms are trademarks of International Business Machines Corporation and Lotus Development Corporation in the United States, other countries, or both: Domino Designer® Domino.Doc® Domino™ iNotes™ K-station™ Lotus Discovery Server™ Lotus Notes® Lotus® Notes® QuickPlace™ Sametime® SmartSuite® Word Pro® The following terms are trademarks of other companies: ActionMedia, LANDesk, MMX, Pentium and ProShare are trademarks of Intel Corporation in the United States, other countries, or both. Microsoft, Windows, Windows NT, and the Windows logo are trademarks of Microsoft Corporation in the United States, other countries, or both. Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States, other countries, or both. C-bus is a trademark of Corollary, Inc. in the United States, other countries, or both. UNIX is a registered trademark of The Open Group in the United States and other countries. SET, SET Secure Electronic Transaction, and the SET Logo are trademarks owned by SET Secure Electronic Transaction LLC. Other company, product, and service names may be trademarks or service marks of others. viii WebSphere Portal 4.12 Collaboration Services Preface The WebSphere Portal Family consists of three packaged offerings: the Portal Enable offering is the base offering; Portal Extend and Portal Experience add more functionality. WebSphere Portal Extend allows your portal users to act on information and applications accessed by collaborating with other portal users. This Redpaper discusses the collaborative capabilities included in the WebSphere Portal Extend offering. It covers: An introduction to the WebSphere Portal Family and the concept of collaborative portlets Installation and deployment-oriented topics for getting a collaborative Portal Extend environment up and running Details about the Collaborative Portlets available out-of-the-box with Portal Extend Details and best practices for the use of the Collaborative Components API and Tags available with Portal Extend, including several sample Collaborative Portlets that leverage this API. This Redpaper is primarily intended for technologists involved with collaborative WebSphere Portal projects. However, the introductory content in each chapter may be useful to managers who are responsible for such projects. The team that wrote this Redpaper This Redpaper was produced by a team of specialists from around the world working at the International Technical Support Organization, Cambridge Center. William Tworek is a Project Leader with the International Technical Support Organization, working out of Westford, Massachusetts. He manages projects that produce Redbooks on various topics involving IBM and Lotus Software technologies. Prior to joining the ITSO, he was an IT Architect in the consulting industry working for Andersen Consulting/Accenture, followed by IBM Software Services for Lotus. His areas of expertise include system integration and systems infrastructure design. Vince Fertig is an IT Architect with IBM Software Services For Lotus in Cambridge MA. He has over 13 years of experience in the IT industry. His areas of expertise include object-oriented analysis and design, multi-threaded © Copyright IBM Corp. 2002. All rights reserved. ix client/server applications, and systems programming. His recent areas of focus have been in designing and developing solutions involving Domino, Sametime, and WebSphere. Daniel de la Fuente Martinez is an IT Architect with IBM Software Service for Lotus, based in Spain. He holds a degree in information technology from Polytechnician University of Madrid, and recently received his MBA from IESE business school in Madrid. He leads the development group in ISSL Spain, supporting the sales and delivery process in the Banking and Public Administration sectors. He has published several technical articles about Domino and related technologies. Margaret O’Connell is an Advisory Software Engineer currently working on the Lotus NextGen efforts to develop collaborative components for J2EE. Margaret has been with the IBM Software Group for more than six years. She was the team lead for the architecture and development of the Lotus Collaborative Components (LCC) deliverable for WebSphere Portal Server, version 4.1. Before working on LCC, Margaret worked on the Lotus SmartSuite, eSuite, and K-station products. Margaret holds a Masters degree in Mathematics from Boston College. Michael Renner is an IT Specialist with IBM Switzerland. He joined Lotus as a systems engineer responsible for global accounts in EMEA. He current ly supports the sales team with technical know-how, and provides product presentations and demonstrations on the current Lotus products for customers. Along with two colleagues, he runs the Swiss Lotus Technology Center, specializing in portals and LDS, software engineering (software development on Domino and Java), and system integration (LEI) in Switzerland. Michael worked with Domino for four years before joining Lotus. We would also like to thank the following people for their contributions to this project: Chris Reckling, Senior Product Manager, Dynamic Workplace Solutions Lotus Software, IBM Software Group Gregg Cherbonneau, Marketing Manager, Advanced Collaboration, Lotus Software, IBM Software Group Andrew Gawin, Product Specialist - Lotus Software, IBM Software Group Dan Collins, Product Specialist - Lotus Software, IBM Software Group Doug McDonald, Staff Software Engineer, Portal Solutions - Lotus Software, IBM Software Group Mary Shaheen, Staff Software Engineer, Portal Solutions - Lotus Software, IBM Software Group x WebSphere Portal 4.12 Collaboration Services Thangaraj Veerappan, Advisory Software Engineer, Portal Solutions - - Lotus Software, IBM Software Group Eric Portner, SeniorSoftware Engineer, Portal Solutions - Lotus Software, IBM Software Group Zhouwen Lu, Staff Software Engineer, Portal Solutions - Lotus Software, IBM Software Group Mary Carbonara, Information Developer, KM Applications - Lotus Software, IBM Software Group William Drake, Consulting IT Architect - IBM Software Services for Lotus The authors of the Portlet Development Guide Working with the Portlet API, Stephan Hesmer, Peter Fischer, Ted Buckner, Ingo Schuster. Material from this guide was used in producing this Redpaper. The authors of the WebSphere Portal Extend InfoCenter. Material from the InfoCenter was used in producing this Redpaper. Become a published author Join us for a two- to six-week residency program! Help write an IBM Redbook dealing with specific products or solutions, while getting hands-on experience with leading-edge technologies. You'll team with IBM technical professionals, Business Partners and/or customers. Your efforts will help increase product acceptance and customer satisfaction. As a bonus, you'll develop a network of contacts in IBM development labs, and increase your productivity and marketability. Find out more about the residency program, browse the residency index, and apply online at: ibm.com/redbooks/residencies.html Comments welcome Your comments are important to us! We want our papers to be as helpful as possible. Send us your comments about this Redpaper or other Redbooks in one of the following ways: Use the online Contact us review redbook form found at: ibm.com/redbooks Send your comments in an Internet note to: Preface xi redbook@us.ibm.com xii WebSphere Portal 4.12 Collaboration Services 1 Chapter 1. Introduction to WebSphere Portal IBM WebSphere Portal provides a single point of access to applications, application content, processes, and people in your network. In order to provide this unified access, WebSphere Portal implements rich and valuable functions. This chapter presents an overview of the IBM WebSphere Portal offerings, and briefly introduces the architecture and wide variety of functionalities of the WebSphere Portal components. The rest of this paper then specifically discusses the Lotus Software Collaborative Components and Collaborative Portlets that are part of the WebSphere Portal Extend - as introduced in 1.2.2, “WebSphere Portal Extend” on page 5. © Copyright IBM Corp. 2002. All rights reserved. 1 1.1 Introduction to WebSphere Portal IBM WebSphere Portal allows you to establish customized portals for your employees, Business Partners, and customers. As illustrated in Figure 1-1, the framework architecture implemented in this product provides a unified access point to internal and external Web applications as well as portal access to other legacy applications. In this way, users sign on to the portal and receive personalized Web pages. Figure 1-1 Horizontal and vertical portals The personalized single point of access to all necessary resources reduces information overload, accelerates productivity, and increases Web site usage. In addition, portals do much more; for example, they provide additional valuable functions such as security, search, collaboration and workflow. A portal delivers integrated content and applications, plus a unified, collaborative workplace. Indeed, portals are the next-generation desktop, delivering e-business applications over the Web to all kinds of client devices. IBM WebSphere Portal Version 4.1 has been designed in response to the following set of fundamental business objectives: A single point of access to all resources associated with the portal domain Personalized interaction with the portal services Federated access to hundreds of data types and repositories, aggregated and categorized Collaboration technologies that bring people together Integration with applications and workflow systems IBM as well as some industry analysts have coalesced around the concept of horizontal and vertical portals. Horizontal portals are the primary infrastructure upon which a portal is built. Vertical portals are built upon the horizontal layer and represent a specific portal instance, usually defined by a major topic or domain. 2 WebSphere Portal 4.12 Collaboration Services As illustrated in Figure 1-2, the horizontal portal infrastructure consists of several modular subsystems including the following: Presentation layer - a Web user interface plus pervasive device support Personalization - the ability to serve dynamic response to the user based on personal profiles Collaboration - tools that allow e-mail, team rooms, shared places, etc. to be exchanged Portlets - a framework for easily attaching software modules (portlets) and services Applications and workflow - integration of legacy and new applications Search and navigation - categorizing repositories of content and searching them for relevant information Publish and subscribe - the ability to author new content and publish it to subscribers Administration and security - basic Web site services such as page designers, performance monitors, cluster services, and metadata management Integration - metadata sharing, XML, connectors, standards, EAI Figure 1-2 WebSphere Portal architecture Chapter 1. Introduction to WebSphere Portal 3 WebSphere Portal provides additional services such as single sign-on, security, Web content publishing, search and, personalization, collaboration services, enterprise application integration, support for mobile devices, and site analysis. Note: WebSphere Portal provides an extensible framework for interacting with enterprise applications, content, people, and processes. Self-service features allow end users to personalize and organize their own view of the portal, to manage their own profiles, and to publish and share documents with their colleagues. 1.2 What is the WebSphere Portal family IBM WebSphere Portal provides three offerings: Enable, Extend, and Experience, each designed to provide the infrastructure you need to build and deploy highly scalable portals. These three offerings share a common framework (the portal server) plus additional products and services. The Enable offering is the base offering for the Portal offerings; Extend and Experience add more functionality. 1.2.1 WebSphere Portal Enable The IBM WebSphere Portal Enable offering lets you quickly build highly scalable portals that simplify and speed your access to personalized information and applications. Portal Enable provides common services including: Connectivity and integration to allow access to enterprise data, external data, or even your trading partners’ applications Presentation and administration to enable computing desktop customization to match your own work patterns and needs WebSphere Portal WebSphere Portal provides personalization, user management, security, and other services for constructing the portal site. WebSphere Personalization The WebSphere Personalization offering provides personalization technologies for targeting Web content to meet user needs and preferences: Rules-based personalization, where the business manager defines a set of business rules that determine which Web content is displayed for a particular user. 4 WebSphere Portal 4.12 Collaboration Services Recommendations, using advanced statistical models and other matching techniques to extract trends from the behavior of Web site visitors. This approach adapts to changing trends in visitor interests without creating new business rules. Campaign management, for e-mail and Web-based promotions, such as enrollment offers or product introductions. Web Content Publisher Provides a browser-based interface that enables nontechnical users to create, contribute and manage content on portals and Web sites in a simple and controlled manner. Features such as template management, workflow management, versioning, and access control allow you to publish content quickly and efficiently, providing end users access to the most up-to-date information when they need it. WebSphere Studio Application Developer These are professional developer tools for creating, testing, debugging, and deploying portlets, servlets, and other assets related to portals and Web applications. 1.2.2 WebSphere Portal Extend The WebSphere Portal Extend offering allows portal users to act on information and applications accessed by collaborating with other portal users. This offering includes all capabilities of the Enable offering, plus integrated team room, instant messaging, extended search, community and Web site analysis capabilities. Lotus Collaborative Components Lotus Collaborative Components are building blocks (APIs and JSP tag libraries) for integrating the functionality of Lotus Domino, Lotus Sametime, Lotus QuickPlace, and Lotus Discovery Server into the portal. Developers can leverage the features of Lotus Domino, Lotus QuickPlace, Lotus Sametime, and Lotus Discovery Server by using these components to add user interface extensions to their portlets and portal pages. Lotus collaborative portlets The collaborative portlets for Lotus advanced collaboration software included the WebSphere Portal Extend and WebSphere Portal Experience offerings have advanced built-in features that allow portal users to take actions on documents or user names that appear in a portlet. A portal user can see, directly from the portlet, if other users are online and then select from a menu of options to interact with those users. Based on the context Chapter 1. Introduction to WebSphere Portal 5 of the portlet, document actions allow users to take actions directly from the portlet with or without launching the entire application. For example, Lotus Notes e-mail portlets make any e-mail author's name live with online awareness and menu options without altering the underlying e-mail application. Collaborative portlets are available for all Lotus advanced collaboration technologies, including: Lotus Notes/Domino, iNotes, Sametime, QuickPlace, Discovery Server, and Extended Search. Bookmarks Bookmark capabilities are also included with the Extend offering. In the portal environment, bookmarks are links to any Web address. Portal users can store personal bookmarks, or bookmarks for the entire team. They are stored on the server instead of on the browser, allowing them to be seen by all members of a shared portal page. Bookmarks can be used to point to important news articles or important information relevant to the team. IBM Lotus Extended Search IBM Lotus Extended Search provides parallel, distributed, heterogeneous search capability across Notes domains, legacy data stores, and the Internet—from within the Notes environment or via a Web browser. The result is single-point access to a variety of data stores including Domino 4.5 and higher, relational databases (IBM DB2, Oracle, Sybase, MS SQL Server, MS Access), Domino.Doc, MS Index Server, MS Site Server, MS Exchange and over 18 Web search sites. Previously released as Domino Extended Search, IBM Lotus Extended Search 3.7 works across a number of Web application servers including Domino, WebSphere, Microsoft IIS and IBM HTTP Server. IBM Tivoli Web Site Analyzer IBM Tivoli Web Site Analyzer is an enterprise-level Web analytics tool that transforms random Web data into valuable e-business intelligence. It provides a clear picture of the overall health and integrity of the e-business infrastructure supporting business outcome management. By capturing, analyzing, storing and reporting on Web site usage, health, integrity, and site content, IBM Tivoli Web Site Analyzer can shed light on visitor site interactions and the site's overall performance. You can leverage this insight to optimize the site for increased customer loyalty and e-business effectiveness. 6 WebSphere Portal 4.12 Collaboration Services Lotus Discovery Server Integration Another concept that is key to WebSphere Portal Extend offering is the Lotus Discovery Server integration. It is this integration, not the Discovery Server product itself, that is packaged with WebSphere Portal. When using Lotus Discovery Server with WebSphere Portal Extend or WebSphere Portal Experience, certain features are automatically enabled inside the portal. Examples of integration include additional menu options that appear when you click on a user name in a portlet, allowing you to perform actions such as searching for all documents by the user selected, or launching a profile of the user that is maintained and stored with the Discovery Server. 1.2.3 WebSphere Portal Experience The Portal Experience offering includes all products in the Extend offering and adds additional tools and functionality including advanced collaboration, content management, and security policy management, creating the most comprehensive portal offering on the market. Features include: Advanced collaboration features for e-meetings, application sharing, and whiteboarding (whiteboards are used in teleconferencing applications) enable effective online collaboration, as well as the ability to take team rooms offline. Data storage for a broad spectrum of digital information including facsimiles, images, PC files, XML files, and multimedia. Content infrastructure for applications including call center, high-volume claims processing, and accounts payable. Folder management and document workflow. Sample Java applications, as well as advanced application development tools. Security policy management tools for e-business and distributed applications. IBM Content Manager This offering provides data store capabilities for a broad spectrum of digital business information, for example scanned images, facsimiles, PC files, XML files, and rich multimedia and Web content. Content Manager also provides folder management and document workflow. It provides the content infrastructure for applications from call centers, high-volume claims processing, and accounts payable, to e-commerce catalogues and e-learning. Chapter 1. Introduction to WebSphere Portal 7 IBM Tivoli Access Manager Tivoli Access Manager provides security policy management tools for e-business and distributed applications. It is a policy-based access control solution for e-business and enterprise applications. 1.3 The WebSphere Portal infrastructure IBM WebSphere Portal provides a framework that breaks the different portal components into portlets to accommodate the aggregation and display of diverse content. Each portlet is responsible for accessing content from its source (for example, a Web site, database, or e-mail server) and transforming the content so that it can be rendered to the client. From a user’s perspective, a portlet is a small window in the portal that provides a specific service or information. From an application development perspective, portlets are pluggable modules that are designed to run inside a portlet container of a portal server. The portlet container provides a runtime environment in which portlets are installed and used. Portlets rely on the portal infrastructure to access user profile information, participate in window and action events, communicate with other portlets, access remote content, look up credentials, and store persistent data. The Portlet API provides standard interfaces for these functions. The portlet container is not a stand-alone container like the servlet container. Instead, it is implemented as a thin layer on top of the servlet container and reuses the functionality provided by the servlet container. For more information about portlet API, refer to the Portlet Development Guide at: ftp://ftp.software.ibm.com/software/webserver/portal/V41PortletDevelopmentG uide.pdf 1.3.1 WebSphere Portal runtime process flow After installation, the portal developer develops and deploys the portal to users. The developer alters the layout and appearance of the default portal page by selecting a theme and skins that WebSphere Portal provides, or by creating a page layout that matches a corporate standard. A portlet programmer writes and registers additional portlets by using the portlet API. After the portal recognizes user data, a user can log on to the portal. If a user attempts a logon, the incoming request passes through an authentication layer 8 WebSphere Portal 4.12 Collaboration Services that provides controlled access to the portal. If the logon is authenticated, a single sign-on component stores user information for later use by other programs that require authentication, and user information is placed in a data store, such as an LDAP directory or a relational database. Based on the user information, the portal framework retrieves the portal page layout and customization data from storage. WebSphere Portal processes the layout by generating markup for the portal page and rendering the portlets that are accessible to the user. Figure 1-3 illustrates the runtime process flow in WebSphere Portal. Figure 1-3 WebSphere Portal process flow (runtime) Chapter 1. Introduction to WebSphere Portal 9 10 WebSphere Portal 4.12 Collaboration Services 2 Chapter 2. Installation, configuration, and deployment planning This chapter describes the installation and setup process for WebSphere Portal Extend. The goal of the chapter is not to provide step-by-step procedures and screen shots, but rather to highlight the key points and crucial considerations required for a successful installation and deployment. In general, this chapter discusses: Hints and tips for installation and configuration of a single WebSphere Portal Extend server Considerations for a real world/multi-server deployment Crucial steps for successful integration with required Lotus collaboration technologies (that is, Domino, Sametime, and QuickPlace). All of the suggestions, hints/tips, and considerations discussed in this chapter are based on a Microsoft Windows 2000-based server infrastructure. While we have made every effort to discuss many of the concepts in a platform-independent fashion, some Windows 32-specific aspects may exist. Therefore, should you be performing your installations on AIX, Linux, or any of the other portal server platforms, you should leverage other documentation sources specific to those platforms in addition to this chapter. © Copyright IBM Corp. 2002. All rights reserved. 11 2.1 The installation process This section focuses on installing the WebSphere Portal Server software itself. The following sections in this chapter will then discuss the deployment and integration concerns required to successfully leverage this installation for a full collaboration environment. 2.1.1 The Setup Manager The WebSphere Portal software now comes with a fully automated installation tool called the Setup Manager. Tip: The setup manager can be found on CD1 of WebSphere Portal CDs, and is launched by running install.bat on a Windows 2000 platform. This tool is a Java application, and thus when starting the installation process the tool must first check to see if you have a resident Java Virtual Machine under which it can run. If none is located, it first installs the latest IBM JVM prior to starting the Setup Manager (Java) GUI. Once started, the Setup Manager GUI then allows you to select the software to install, and prompts you to enter any needed configuration parameters and settings based on the installation choices you have selected. See Figure 2-1 on page 13. 12 WebSphere Portal 4.12 Collaboration Services Figure 2-1 Setup Manager install component choices As the Setup Manager installs the various packages you have selected, it will occasionally prompt you for additional WebSphere Portal CDs. It does not require the CDs themselves. You can copy the CDs to the local drive or a network share giving a separate subdirectory for each CD—and simply provide the full path to the CD contents when prompted. 2.1.2 Install approaches There are actually several approaches to leveraging the automated capabilities of the Setup Manager to assist in your installation: You can actually use the Setup Manager to install all needed products for the portal to run in one step. Thus, it can install DB2, WebSphere Application Server, the Portal Server code itself, etc.—all with minimal human involvement. The setup manager will prompt you to reboot as needed and required throughout the process. Setup Manager can also be used to install all software, but in multiple steps. That is, you can first install DB2 utilizing the Setup Manager. Then, once this is complete, perform full reboots and testing of the DB2 installation to verify Chapter 2. Installation, configuration, and deployment planning 13 that it is functioning properly. After you are confident that DB2 is successfully installed, you can run Setup Manager again to install WebSphere Application Server (WAS). Again, after full rebooting and testing, run the Setup Manager again to continue installing other components. Setup Manager will always detect which software and versions you have already installed in your server, and will take this into account when presenting you with installation options. You can also perform a basic install of a WebSphere Application Server on your own, should your organization already have a ghost image or other easy method for building such a base server. You would then use the Setup Manager to update the DB2 and WebSphere fixpacks, and then install the Portal Server code itself. In our testing we performed installations with all three approaches. The approach you choose should probably be based on your familiarity with the WebSphere Portal Server software. The first approach, allowing Setup Manager to install everything in one step, is the most automated and requires the least amount of involvement. However, it does take several hours to complete, even on the dual processor IBM xSeries we utilized in our testing. Therefore, if you made any mistakes entering parameters, you will not really know of the mistakes until several hours later. Thus, if you are newer to the WebSphere Portal Server, you may want to take the second approach of using Setup Manager in little steps. This allows you to become familiar with the tool, while also testing after each step to verify that things are working as expected. Finally, if you are an experienced WebSphere Application Server administrator and have lots of experience with that platform, you may wish to utilize your existing procedures and processes to more quickly get the base WAS up and running. In this case we would still recommend that you let the Setup Manager verify that you have the correct DB@ and WAS fixpacks installed, as these are crucial to the successful operation of the portal. 2.1.3 Hints/tips for using the Setup Manager In general, the Setup Manager is pretty straightforward to use. However, at times we did run into strange issues and failed installs. The following hints/tips will hopefully help you to skip past some of the issues we initially encountered. Be sure you have the correct key The first item that you need to provide during the installation is the install key, which is a long alphanumeric number similar to a serial number. You are prompted for this key every time you run the Setup Manager, and it uses this key to determine what capabilities of WebSphere Portal you are licensed for, and 14 WebSphere Portal 4.12 Collaboration Services thus what installation choices you should have. It is important that you are sure the key that you give the install process is an Extend or Experience install key, or you will not be given the choice to install the Lotus Collaborative Components. Be sure to select Lotus Collaborative Places & Components If you want to install the Portal Collaboration Places and Components, you need to install them at the same time you choose to install the Portal Server. You cannot install them during separate runs of the Setup Manager, as the portal “extend” components/install cannot be run on an existing install of a portal “enable”. The Collaboration Places and Components choice is what installs all Portal “extend” hooks for your portal server. Thus, if you enter an Extend key, but then choose to install only the Portal Server, the Enable version of Portal Server will be installed. If you enter the Extend key and choose to install Portal Server and the Collabortive Places and Components, the Extend version of Portal Server will be installed. Use the standard install process We highly suggest that you utilize the “standard install” choice in Setup Manager. The quick install will not allow you to make all of the choices required for an enterprise install with collaboration, and the advanced install leaves all the individual product settings up to you. The standard install is a nice interim step between the two, which automates most install steps, but still allows you to choose key configuration settings. Keep an eye on the processor utilization On the Windows platform, it is important to use the Task Manager/Performance Monitor and watch the CPU loads during the installation process of the various processes. Several times during the installation process you are prompted to enter a value, insert a new CD, verify that WebSphere has restarted/etc. We found it crucial to a successful install using the Setup Manager to verify that the CPU utilization of any Java processes has leveled off prior to continuing with the installation. In most installs, depending on your installation point, there will actually be up to four or five Java processes shown in the task manager at various points. Chapter 2. Installation, configuration, and deployment planning 15 Figure 2-2 Multiple Java processes during portal setup Continuing before CPU utilization has leveled off could mean that a required process is still loading, and the installation process will fail. Keep an eye on the available memory The installation process consumes a lot of resources, and memory is one of the resources you should ensure is abundant. We increased the virtual memory in our test servers to be sure that the system would have enough memory for all of the Java processes started during the installation process. In our tests, the Setup Manager itself would utilize over 150 MB for its Java process at some points, and this is in addition to the memory requirements of the various WebSphere Application Server processes that are started during the installation process. As an example, Figure 2-2, taken during one of our installations, shows the Setup Manager utilizing over 80 MB, while the Portal Server is utilizing 200+ MB. We recommend a minimum of 512 MB of physical memory installed on your server to simply run the installation process, and greater than 512 MB if you are going to utilize the Setup Manager to install all software in one automated step. These memory recommendations are just for the installation process—additional 16 WebSphere Portal 4.12 Collaboration Services memory would be highly recommended for actually running the server after install. Testing LDAP access and syntax LDAP syntax and access errors will account for the majority of your failed installations. Therefore, before you fill in the LDAP setup specifics when prompted by Setup Manager, it is good to test if you have LDAP access to your LDAP directory via an LDAP request from the browser on this server. You should write in your browser in the URL address field: ldap://myldapserver.myco.com/cn=myuser,o=myorg You should then receive a results window with the data retrieved from the LDAP server about that user. If you have an error, you should first verify your IP setup (DNS, hosts files, etc.) as well as verify that you are using the correct LDAP port (that is, 389), in case your organization utilizes a different port for your LDAP server. Additionally, you should check the syntax of the users you are entering. The fully distinguished syntax for a given user may vary based on your LDAP setup. For example, the syntax for wpsadmin in a Domino LDAP server might be “cn=wpsadmin,o=ibm”, while the syntax for the same user in a Secureway LDAP directory might be “uid=wpsadmin,u=ibm,c=com”. You should use the above process to verify that you are using the correct syntax prior to giving that syntax to the Setup Manager. We recommend that you test all three entries that WebSphere uses during the installation (wpsadmin, wpsbind, and wpsadmins), to be sure that you can reach them with the right format. Tip: Do not leave a blank “suffix” for your organization when prompted by Setup Manager, because WebSphere Portal needs this information to properly set up groups and memberships. Be careful when rebooting your machine During the installation process you have to reboot your machines several times, one after the DB2 installation, another after the DB2 fixpack installation, after the WAS and Fixpack2 installation, and finally when you finish the Portal installation. We recommend that you manually stop the WebSphere and DB2 services prior to rebooting each time as appropriate. We always stopped first WebSphere Admin services, then the IBM HTTP Server and Admin services, each time looking at the processes monitor to verify that all theJjava processes for WebSphere, and apache processes for IHS, had finished. Chapter 2. Installation, configuration, and deployment planning 17 We experienced some corruption problems with the WebSphere environment when we just rebooted the machine without ensuring that the Java processes had enough time to shut down successfully. Testing your environment during installation There are several points when you can test your environment during the installation. We found it very important to perform these interim tests to verify the success of the installation processes, and identify any issues early on. One such point is just after you have finished the installation of the WebSphere Application Server. Prior to continuing the installation, you can launch the WebSphere administrative console, start the “default server”, and try to access one of the examples of the default server from your browser. We always used a snoop servlet to see if WebSphere was functioning properly: http://myserver.myco.com/servlet/snoop Tip: Be sure to stop the default server within the WebSphere Administration Console after performing this test, because this saves several MB of crucial system memory for the next portion of the install. The other important point to test your environment is when you are near the end of installation and the window shown in Figure 2-3 on page 19 appears. 18 WebSphere Portal 4.12 Collaboration Services Figure 2-3 An important point at which to test your rinstall At this point, you should be able to test whether you have already successfully installed the Portal Server engine. To do that, you should start Admin Console and check if the security is enabled. Usually if you are using the Setup Manager to install all the products, it should set up the security for you and you just have to add to the Admin Role the wpsadmin and wpsbind users and the wpsadmins group, as you can see in the window message. We had some scenarios where Setup Manager could not properly set up the security, and we were forced to set up the WebSphere global security settings manually. If this is the case you must reboot Admin Server and HTTP Server after making the security changes, and then start the Portal Server Application Server from the WebSphere Admin Console—before pressing OK to continue the install. Chapter 2. Installation, configuration, and deployment planning 19 The URL you can test is the homepage of your WebSphere Portal installation: http://myserver.myco.com/wps/portal Then you should have the following window (Figure 2-4) with no portlets inside because the installation of the portlets will be the next step in your installation process. This will happen when you press OK in Figure 2-3 on page 19. Figure 2-4 Successful portal test, prior to portlet deployment Finally, when you have finished your installation, you will have the following window (Figure 2-5) telling you that you have successfully finished your installation. Figure 2-5 Installation complete message That is the moment to test your environment again with the same Web address you used before: http://myserver.myco.com/wps/portal Then try to log in with the key icon you have in the top right corner of your page as wpsadmin (Figure 2-6 on page 21). Then you will be able to access Administration Portal, and Work With Pages PageGroups. 20 WebSphere Portal 4.12 Collaboration Services Figure 2-6 Default portal home page 2.2 Installing manually It is possible to install all the components of your WebSphere Portal environment via a more manual process, not leveraging the Setup Manager. Instead, you install each component via its own install process, install all fixpacks/patches, and then run the more basic Portal Installer found on CD7 of your WebSphere Portal CDs. We chose to desribe only the use of Setup Manager in this paper, because we found this install process to be less problematic. For assistance with performing a full manual install, reference the IBM Redpaper WebSphere Portal V4.1 Windows 2000 Installation, REDP3593 at: http://publib-b.boulder.ibm.com/Redbooks.nsf/9445fa5b416f6e32852569ae006bb6 5f/fedd3307ed1bb86485256c300054252d?OpenDocument Chapter 2. Installation, configuration, and deployment planning 21 2.3 Integration with Lotus collaboration technologies After you have successfully set up your WebSphere Portal Extend Server, you then need to verify that all required integration with the Lotus Collaborative technologies is enabled to enable you to take advantage of the full collaborative capabilities in the Portal Extend family. 2.3.1 Lotus Domino integration Portal administrators must enable a Domino server to make all the features of the Collaborative Portlets and Collaborative Components available to Portal users. From the Portal perspective, there are two types of Domino servers: the Domino Directory server itself, and any Domino Server that will act as a Domino data source. The Domino Directory server must be LDAP-enabled. Domino LDAP is required to look up various user values and attributes, such as mailfile, mailserver, etc. Some of the Collaborative portlets use these values to locate the appropriate Domino data source server to use. Any Domino data source servers must have HTTP, LDAP, and Domino IIOP enabled. – The Domino HTTP is used to access Domino data via Domino XML (i.e. DXL) – Domino IIOP is used to prepopulate some of the lists shown in the edit mode of the Collaborative portlets. If you do not install, configure, and enable these Domino capabilities, then Collaborative capabilities will still work in some cases. For example, the Domino server names will not appear in the server selection lists in the Notes View portlet or the QuickPlace portlet, and the My Lotus Notes portlets will not be able to find the Notes mail server for authenticated Portal users. However, you can type the server name, database name, and view name in the text fields for these configuration parameters. Additionally, it is important to note that the Collaborative Components person and menu tags also do not require Domino. Portal settings to support Domino You must enable the Domino Directory server either during Portal Server installation, or later using the portal collaborative environment properties file: <WASROOT>\lib\app\config\CSEnvironment.properties The following entries in this file are specific to Domino integration: 22 WebSphere Portal 4.12 Collaboration Services CS_SERVER_DOMINO_DIRECTORY.enabled=true CS_SERVER_DOMINO_DIRECTORY_1.hostname=issl2.lotus.com These variables enable the Domino Directory, which is needed to work with Collaboration services. You must have the enable variable set to true and your hostname must be the same that you have in the Fully Qualified Internet host name in the Server document of your LDAP-enabled Domino Server. Domino server settings to support the portal You should verify the followings settings in your general Domino server configuration. All of these settings/values can be found on your Domino server document. On the Basics Tab of the Server document, check that the Fully Qualified host name is filled in. On the Ports Tab, check that the Net Address of the TCP/IP port is set to either the numerical IP address of the server, or its fully qualified host name (preferred). On the Internet Protocols Tab, HTTP sub-tab, check that the Host Name field contains the fully qualified host name for the server. The “Allow HTTP Clients to Browse Databases” field should be set to “yes” to allow the selection of databases from within the properties tab of the Notes portlets. Domino LDAP-specific settings As described earlier, even if you have Portal server setup to utilize an external LDAP server for authentication and authorization purposes, you must have Domino LDAP enabled to take full advantage of all of the Portal Extend collaboration capabilities. Here we briefly describe the steps you should perform to check if you have the LDAP configuration right: Check the Domino Directory ACL In the names.nsf file for the users wpsadmin and wpsbind and the wpsadmins group: they must be managers and have the Group Creator, Group Modifier, User Creator and User Modifier roles. And they also may delete documents. You have to remember that this is only for the installation process. After that you have to plan which groups you are going to use for Portal Users. You can manage these groups from the Portal Administration portlet but you have to modify the ACL manually to be sure those groups have reader access. LDAP field list settings Chapter 2. Installation, configuration, and deployment planning 23 Within the names.nsf file you must ensure that the MailFile and MailServer “person” fields, and the http_HostName “server” fields are selected as available (i.e. shown) via LDAP. The LDAP fields list and LDAP write access settings are maintained in a Global Configuration document in the Servers\Configurations view. Tip: You must select “yes” for “Use settings as the default settings for all servers” within a Global Configuration document in order for the LDAP tab and field list to show. SingleSignOn settings To allow SingleSignOn (SSO) access—so that users that sign onto the WebSphere portal can utilize Domino-based collaboration portlets without being prompted for authentication—you must enable the IBM LTPA capabilities included in both WebSphere and Domino. Domino imports the LTPA token generated by WebSphere, and this token would be used for all Domino servers within the Domino domain. The following list can be used to enable and test an SSO configuration in your Domino or WebSphere environment: With Domino Release 5 you can only import an LTPA token from WebSphere, so the first thing to do is to generate the LTPA in the WebSphere Administration console. Once you have your LTPA file, create a Web Configuration document for the servers you want to enable SSO, click Web in the action bar, and select Create Web SSO Configuration. Enter the IP domain name in the TokenDomain field, which must be the same that you wrote in the WebSphere Administration console when you generated the LTPA token. Add the names of the Domino servers that will participate in the SSO domain in the Domino Server Names field. You do not need to enter the names of the WebSphere servers. You should receive a success message. If you do not, repeat the earlier steps for importing the key. Pay attention to the path, filename, and password. Manually change the value in the LDAP Realm field to hostname\:389 once you have imported the LTPA token. This was the standard port that WebSphere added to your domain name. The backslash is important to have SSO working between WebSphere and the collaboration servers. Save the configuration document. 24 WebSphere Portal 4.12 Collaboration Services Open the server document of the Domino server. Change to the Internet Protocols tab and go to the Domino Web Engine sub-tab. Then change the Session Authentication setting to Multi-Server. Restart your Domino server. You will see in the Domino console a message stating that the LPTA settings have been successfully started. For more details on the LPTA token setup, see the redbook Domino and WebSphere Together . This book discusses the various domain/hostname, realm, and token expiration issues that can often plague LPTA setups. Domino IIOP settings Some of the Collaborative portlets and Collaboration Services use IIOP to access the Domino server and get information from databases. To set up Domino IIOP settings, do the following: Load the IIOP task to your Domino console or add it to the notes.ini file of your Domino server and restart the server. If you are using the IBM HTTP server as Web server in your WebSphere Portal environment, the collaborative portlets and components go to this server to get the diiop_ior.txt file to open IIOP sessions with the Collaboration servers. You have to copy this file from your Domino server to the IBM HTTP server directory. The file is located under: C:\Lotus\Domino\Data\domino\html It should be copied into: C:\IBM HTTP Server\htdocs Tip: If you are using different collaboration servers in your environment using SSO between them, you can check that all the diiop_ior.txt files have the same content. This is because when you set up the Web SSO Configuration and run the DIIOP tasks, the IOR is common for all the servers in the environment. 2.3.2 Lotus Sametime integration Sametime provides real-time collaboration to the Portal environment. You can set up the Sametime server on top of a Domino server or use an external LDAP directory. The following guidelines are provided to assist you in enabling this Sametime integration. Portal settings to support Sametime You must enable the Sametime hook either during Portal server installation, or later using the portal collaborative environment properties file: Chapter 2. Installation, configuration, and deployment planning 25 <WASROOT>\lib\app\config\CSEnvironment.properties The following entry in this file is specific to Sametime integration: CS_SERVER_SAMETIME.enabled=true The Sametime variable must be set to “true” if you have a Sametime server in your Portal environment and you expect to use people awareness in your portlets. The HostAddress.xml file then contains the values that actually point to the Sametime server, as follows: <WASROOT>\PortalServer\app\wps.ear\wps.war\peopleawareness\hostAddress.xml <?xml version="1.0" encoding="UTF-8" ?> <sametime> <hostaddress>itso-sametime3.ibm.com</hostaddress> <httpPort>80</httpPort> </sametime> Sametime settings to support WebSphere Portal Sametime Installation: If you tried to install Sametime Server 2.5 on top of Domino 5.0.10, the window error shown in Figure 2-7 appears: Figure 2-7 Sametime 2.5 on Domino 5.0.10 error message You can avoid this error if you get the nstring.dll file from a previous Domino server release and replace it. The file is located in the Domino directory. After the process installation, remember to replace the file again before starting the server, or the server will crash. Additionally, you should install Sametime fixpack1 on top of your Sametime 2.5 installation. Your Domino directory will now show two new directories, 2.5PF1 and 2.5PF1-Data. STLinks installation: This step is only required for integration with Sametime 2.5 or earlier servers, and is not required for Sametime 3.0. To allow for Sametime 2.5 integration, install Sametime Links in the same directory as you 26 WebSphere Portal 4.12 Collaboration Services have Sametime 2.5 installed. To test if stlinks is running, you can check the following Web address, where you can find examples that show how to use Sametime links in your applications, plus good developer documentation for the toolkit. http://yourserver/sametime/toolkits/st30linkstk/index.html Restart the Sametime server. We recommend that you reboot the entire machine. Sametime.ini: You need to modify Sametime.ini in order to allow portlets that reside in the Portal Server Machine to access Sametime functions. Then you must add one of the two following variables to the Sametime.ini file, which is located in the Domino directory: VPS_BYPASS_TRUSTED_IPS=1 or VPS_TRUSTED_IPS= IPAddress,IPAddress,... The first one is used to allow all the machines to ask for the Sametime services. The second one is to restrict access to Sametime services to only the listed IPs. 2.3.3 Lotus QuickPlace (2.08) integration After you install QuickPlace you have to do some setup in your QuickPlace server in order to integrate with your WebSphere Portal installation. Portal settings to support QuickPlace You must enable the QuickPlace connection either during the WebSphere Portal server installation, or later using the portal collaborative environment properties file: <WASROOT>\lib\app\config\CSEnvironment.properties The following entries in this file are specific to QuickPlace integration: CS_SERVER_QuickPlace.enabled=true CS_SERVER_QuickPlace_1.hostname=YourQuickPlace.yourco.com You must have the Enable variable set to true and your hostname must be the same as in the Fully Qualified Internet hostname of your QuickPlace server. The QuickPlace server entered here is used by the portlets, and by the Collaborative Components API during its initialization, as the default QuickPlace server. Thus if no QuickPlace server is defined during the API call or in the portlet edit menu, it falls back to this QuickPlace server as the default. Chapter 2. Installation, configuration, and deployment planning 27 QuickPlace settings to support WebSphere Portal Shut down the server and browser. You now need to create a domcfg.nsf file in the Domino Data directory. You can use the domcfg.nsf file found in the Lotus Developers domain, or on the online support site. You have to set up the DIIOP task for this server, because the QuickPlace portlet uses the IIOP to get information about QuickPlace databases. You can check 2.3.1, “Lotus Domino integration” on page 22 to do it. In the Server Document on the Internet Protocols tab you must check Yes in “Allow HTTP clients to browse databases”. That is because the QuickPlace portlets need to browse the QuickPlace databases you have in your server to present the “picklist” of QuickPlaces to the user when configuring the portlet. Tip: The above settings are only required on your QuickPlace server to allow the “picker” feature in the QuickPlace portlets edit mode that enables browsing of QuickPlaces on a given server. If these capabilties are not enabled, the QuickPlace portlets can still be used to access QuickPlaces by manually entering server and place names—and the QuickPlace Collaborative Components can still be used to create QuickPlaces. 2.3.4 Lotus Discovery Server integration There are three types of integration with Discovery Server that must be configured: 1. The Find button 2. Discovery Server portlets 3. Discovery Server Collaborative Components API The Find button WebSphere Portal, in the Extend and Experience versions, includes a Find button, which can be defined to open the Discovery Server K-map for all portal searches. Figure 2-8 on page 29 shows the Find button as it appears on the standard portal theme. 28 WebSphere Portal 4.12 Collaboration Services Figure 2-8 The detault WebSphere Portal Find button No real installation setup or configuration is required for this integration. Rather, the Web address of the Discovery Server KMAP should be configured as the Find URL within Portal Administration - Portal Setup of the portal, as shown in Figure 2-9. Figure 2-9 Setting the URL for Find Collaborative Portlets and Collaborative Components API To support the Discovery Server portlets and the API, you must enable the Discovery Server connection either during the WebSphere Portal Server installation, or later using the portal collaborative environment properties file: <WASROOT>\lib\app\config\CSEnvironment.properties The following entries in this file are specific to Discovery Server integration: CS_SERVER_DISCOVERY_SERVER.enabled=false CS_SERVER_DISCOVERY_SERVER_1.hostname=YourLDSServer.yourco.com You must have the Enable variable set to true and your hostname must be the same that you have in the Fully Qualified Internet host name of your Discovery Server. Chapter 2. Installation, configuration, and deployment planning 29 2.4 Testing your WebSphere Portal Extend install After you have completed your WebSphere Portal install, and installed/integrated all of the Lotus Collaborative technologies, the best way to test if you have configured and set up your Portal environment correctly is to see how it works on one of the supplied collaborative portlets. We recommend using the NotesView Portlet because it utilizes many of the key components required. You can create a new portal page from WebSphere Portal, or just reuse an existing page. Then add the NotesView portlet to the page and click Edit. 2.4.1 Verifying Domino integration The following window then appears, and you should see in the Servers List of the portlet the list of the servers you have in your Domino Directory. From a technical point of view, the portlet opens a Notes Session via LDAP and retrieves the server’s information. Thus, if this functionality is not working properly, you know to troubleshoot your Domino Directory configuration. Figure 2-10 Setting up the Notes View portlet Then select your Database and View. For our testing we used the names.nsf database, with the people view, with a blank in the field category. If the database listing does not show up, then you should verify that you have the “Allow HTTP users to browse databases” choice enabled, because this is how this list is populated (that is, via HTML/XML). If the view list does not show up, then this is a potential Domino IIOP issue, as the view list lookup functions over IIOP. 30 WebSphere Portal 4.12 Collaboration Services Once you have selected the Database and View, press Next and you will have the window shown in Figure 2-11, where you can set up the following: The number of rows to appear per screen Alternate row colors An icon to create new documents (if you check this you have to set up which form to use for creating new documents) Whether to view documents in Lotus Notes or in the browser Restriction: The option to view documents in the Notes client only works with Internet Explorer browsers, as it functions via a small ActiveX control that launches the Notes client and passes the database and document details to it. Non-IE browser users will view documents in their browser via Domino HTTP. A default categorized view: All expanded/All collapsed Columns Here you can define: – Which column will use people awareness to highlight if the people are online, and use the menu actions with them. – Which column you want to launch the document selected. – Which columns you want to hide from the view presented by the portlet. Tip: You should be careful which column you set for people awareness, and which column is used to launch the document. For example, the people awareness should contain people names only; the portlet cannot pull names that are included within other text. Additionally, if the same column is identified for both people awareness and document selection, then you will lose the ability to open documents—because the people awareness takes precedence. The direction for default sorting: Ascending/Descending Chapter 2. Installation, configuration, and deployment planning 31 Figure 2-11 Setting up the Notes View portlet 2.4.2 Verifying people awareness and menu services Once you have completed setting up the portlet, you should open the portlet page in a window and verify the functioning of the portlet. The column that you identified for people awareness should be green or red, showing the online status of document authors. This verifies that people awareness is functioning properly. If this is not working, then you may either have a Sametime configuration issue, or it is possible that you have a username/authentication issue. For example, the user ID with which you log into the portal must be a valid user to the Sametime server. Additionally, you should click on the people names or e-mail addresses for a menu action for a user—or click the menu icon (the first icon in the row) for menu 32 WebSphere Portal 4.12 Collaboration Services actions for documents. This verifies the functionality of the collaboration menu services. You will have a menu action in the column names with one action for the not-connected people (send e-mail) and two actions for the people who are online (chat and send e-mail). Figure 2-12 Notes View portlet -document actions Figure 2-13 Notes View portlet - people actions Now that you have some idea what collaboration components and services are, you just have to test the power of collaboration in your portal environment. The next two sections give you the tools to develop real collaboration portlets and get all the advantages to integrate the WebSphere and Domino applications. 2.5 Deploying the collaborative portlets After you have finished installing WebSphere Portal Extend, you may then need to “deploy” several of the collaborative portlets for use in your portal. Portlets that are installed on your server, but not deployed into the Portal server, can be found in: <WASROOT>\portalserver\install Chapter 2. Installation, configuration, and deployment planning 33 After the portlets have been deployed, the .war files are moved to: <WASROOT>\portalserver\deployed and the contents of the .war files are expanded to: <WASROOT>\appserver\installedapps\*.war Deployed portlets The following portlets are deployed for you as part of the installation process, assuming that you selected to install the Productivity Portlets in the Setup Manager: QuickPlace2.war - provides QuickPlace in an iframe portlet. Webpage.war - provides the Web Page portlet for launching an Internet or intranet Web page in a scrollable iframe, addressable by Web addresses. Notes2.war - provides portlets to Lotus Notes/Domino: – – – – – – – Notes View Notes Mail My Notes To Do My Notes Mail My Notes Calendar Notes Discussion Notes Teamroom Bookmarks.war - provides the Bookmarks popup that lists the favorite Web site links for a page group (i.e., place). Portlets requiring deployment There are other collaborative portlets that are not deployed by default. You must manually install, configure, and maintain these portlets, as described in the Portlet Administration section in the WebSphere Portal Infocenter. Some examples of other collaborative portlets you may consider deploying are: iNotes.war - portlets providing an iframe wrapper of the iNotes interface (including the iNotes calendar, todo, and notebook capabilities) Sametime .war - a simple Sametime client launching portlet Quickplace.war - a simple QuickPlace launching portlet 2.6 Deploying the Collaborative Components (API) The core capabilities of the Lotus Collaborative Components are built into the WebSphere Portal Extend install; this includes: The six-key API jar files installed in <WASROOT>\AppServer\lib\app 34 WebSphere Portal 4.12 Collaboration Services The CSEnvironment.properties file installed in <WASROOT>\AppServer\lib\app\config Other key files installed as part of the wps.ear enterprise application in <WASROOT>\PortalServer\app\wps.ear However, the Collaborative Components JSP samples are contained in the Collaborative Components enterprise application (cs.ear), and this application must be deployed before the JSP samples can be utilized. This enterprise application also includes all the API and properties files, in addition to their installed locations as described above. During the WebSphere Portal Extend install, this enterprise application file is copied to: <WASROOT>\AppServer\installableApps\cs.ear by the Setup Manager. To use the supplied JSP-based samples, you need to install this enterprise application into the WebSphere Application Server environment. To install/deploy the Collaborative Components enterprise application, follow these steps: 1. Ensure that SSO is enabled on the server where the Collaborative Components enterprise application (cs.ear) file is located—either the Application server or the Portal server. 2. Open the WebSphere Administrative Console. 3. Stop the default server if it is running, by right-clicking this server and saying Stop. This server is found in the Administrative Domain topology under Notes\Yourserver\ApplicationServer\. 4. Click Console -> Wizards -> Install Enterprise Application. 5. Click Browse and select the cs.ear file. The default location is: <installation_drive>:\WebSphere\Appserver\InstallableApps. Click Next in the series of screens that follow. When the screen that prompts you to select a “host” appears, select Default Server and then click Finish. Chapter 2. Installation, configuration, and deployment planning 35 Note: If you are not installing Collaborative Components with Portal Server and you want a standalone installation, ensure that an Alias of *:9080 has been automatically set for the default host. (In the WebSphere Advanced Administrative Console topology view, select Virtual Host and click Properties on its popup menu to view the Aliases specified. If you do not see an Alias of *:9080, add this Alias by editing the properties of the Virtual Host.) The samples are then accessed/run by using the address: http://yourserver.yourdomain.com/cs/index.jsp 2.7 Installed components of WebSphere Portal Extend This section lists the key files, and their locations, as they are installed after you have successfully completed your collaborative portal server installation. 2.7.1 Key files The Collaborative Components classes and tag libraries—installed for use by the Portal server The default location for the JAR files is: <WASROOT>\AppServer\lib\app While the default location for the TLD tag library files is: <WASROOT>\PortalServer\app\wps.ear\wps.war\WEB-INF\tld The Collaborative Components API Javadoc HTML files The default location is: <WASROOT>\PortalServer\app\wps.ear\wps.war\doc\Javadoc\CollabServices A directory of files related to people awareness, including the hostAddress.xml file required for Sametime integration. The default location is: <WASROOT>\PortalServer\app\wps.ear\wps.war\peopleawareness A people awareness tag language descriptor file, people.tld The default location is: <WASROOT>\PortalServer\app\wps.ear\wps.war\web-inf\tld A directory of files related to menus 36 WebSphere Portal 4.12 Collaboration Services The default location is: <WASROOT>\PortalServer\app\wps.ear\wps.war\menu A menu tag language descriptor file, menu.tld The default location is: <WASROOT>\PortalServer\app\wps.ear\wps.warwps.war\web-inf\tld A set of CS The CSEnvironment.properties file The default location is: <WASROOT>\AppServer\lib\app\config The Collaborative Components enterprise application, cs.ear The default location prior to deploying this enterprise application via the WebSphere Administrative Console is: <WASROOT>\AppServer\installableApps\cs.ear After deploying this application, the contents of cs.ear are unzipped into a cs.ear subdirectory at: <WASROOT>\AppServer\installedApps\cs.ear\ The cs.ear file contains the following key files: – Collaborative Components JSP samples <WASROOT>\AppServer\installedApps\cs.ear\cs.war\*.jsp – The Collaborative Components Java class files: cs.jar, commres.jar, kdsapi.jar, kdsw.jar, ncsow.jar, stcommsrvrtk.jar <WASROOT>\AppServer\installedApps\cs.ear\cs.war\WEB-INF\lib – The Collaborative Components tag library files: menu.tld and people.tld <WASROOT>\AppServer\installedApps\cs.ear\cs.war\WEB-INF\tld The collaborative portlets, as described in 2.5, “Deploying the collaborative portlets” on page 33 2.7.2 Log files Errors detected during the installation of Lotus Collaborative Places and Components on the Portal server are recorded in the log file, whose location is: WebSphere\PortalServer\extendInstall.log Chapter 2. Installation, configuration, and deployment planning 37 2.7.3 Registry entries System Registry entries verifying the installed version are: For the Windows platform in the Windows Registry: HKEY_LOCAL_MACHINE\Software\IBM\WebSphere Portal Server\4.1: "Extend" "4.1.2.0" For AIX in the AIX ODM: FileSet: wpsExtend Level: 4.2.0.0 In Solaris in the Solaris PK Registry: Name: wpsExtend Abbreviation: wpsExtend 4.1.2.0.DSP=4.1.2.0 Package Instance: IBMWPSExt In Linux the AppServer/extendVersion.txt file will show: "wpsExtend.version=4.1.2.0". 2.7.4 Directory structure After the install, the Portal server subdirectory on your server should have the directory structure shown in Figure 2-14 on page 39. 38 WebSphere Portal 4.12 Collaboration Services wp_root | + _uninst | +-- app | +-- WCMPznPublish.ear | | | +-- wms.ear application | | | +-- wps.ear | | | | | +-- META-INF | | +-- wps.war | | | | | +-- doc Untitled Root directory for Portal Server Files used to uninstall Portal Server Root directory for Content Organizer enterprise application Root directory for WebSphere Member Services enterprise Root directory for portal enterprise application Metadata for portal enterprise application Root directory for portal Web module WebSphere Portal InfoCenter and Javadoc | | +-- dtd Document Type Definitions (DTDs) for Portal Server | | +-- html HTML files for the portal | | +-- images Graphics for the portal | | +-- menu Files for MenuService | | +-- META-INF Metadata for the portal Web application | | +-- peopleawareness Files for PeopleService | | +-- screens Java Server Pages for the portal | | | +-- markup_name Subdirectory for each markup type | | | | | +-- skins Skins for portlets | | | +-- markup_name Subdirectory for each markup type | | | | | +-- themes Themes for the portal | | | +-- markup_name Subdirectory for each markup type | | | | | +-- WEB-INF Resources for the Portal Server Web application | | | | | +-- conf Portal configuration directory | | +-- tld Tag Library Descriptors | | | +-- wsproxy.ear Root directory for Web services proxy enterprise application | | | +-- META-INF Metadata for Web services proxy enterprise application | | | +-- wsproxy.war Root directory for Web services proxy Web module | | | +-- META-INF Metadata for Web services proxy Web module | | | +-- WEB-INF Resources for Web services proxy Web module | +-- bin Portal configuration interface and other portal utilities | +-- deployed Copies of the .ear and .war files for installed portlet applications. | WebSphere Application Server uses copies of these files in the | was_root\installedApps directory. | +-- install Scripts, logs and other files used to install Portal Server | +-- license Product license agreement files (multiple languages) | +-- log Portal Server log files | +-- migration Tools and instructions for migrating Portal Server Version 2.1 | to Version 4.1 | +-- src Source files for User, Group and related resources | +-- wms Resources for WebSphere Member Services Figure 2-14 Directory structure for the Portal server subdirectory Chapter 2. Installation, configuration, and deployment planning 39 2.8 Collaborative portal deployment planning At the core of WebSphere Portal is the Java-based Portal Server, which runs as an application server on top of WebSphere Application Server. The information in this section is provided as an introduction to the topologies that WebSphere Application Server supports, and the ones that apply to running the portal, and more specifically the considerations crucial for a collaborative WebSphere Portal Extend environment. 2.8.1 General WebSphere Application Server considerations The number of machines that WebSphere Portal requires, and where these machines will be placed, varies depending on customer requirements. Use the information in this section as an introduction to WebSphere topologies as related to the portal. Refer to the following documentation for detailed information on general planning for any WebSphere Application Server environment: WebSphere Application Server Infocenter The WebSphere Application Server InfoCenter provides details about the topologies that WebSphere Application Server supports. http://www-3.ibm.com/software/webservers/appserv/doc/v40/aee/index.html WebSphere 4.0 Advanced Scalability, SG24-6192 This redbook provides topics related to workload management, load balancing, and overall scalability. Advantages related to using server groups and clones, and separating the Web server and database servers, are discussed. http://publib-b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg246192.html ?Open WebSphere 4.0 Advanced Edition Handbook, SG24-6167 This redbook provides instructions related to installing and managing WebSphere Application Servers. http://publib-b.boulder.ibm.com/Redbooks.nsf/RedbookAbstracts/sg246167.html ?Open 2.8.2 A test and proof-of-concept environment For many test and proof-of-concept installations, the number of servers can be kept to a minimum. In such a minimal installation DB2, IBM HTTP Server, and the Portal Server (running on top of WebSphere Application Server) can all be installed and run on one server, while the Lotus based collaborative technologies 40 WebSphere Portal 4.12 Collaboration Services (that is, Lotus Domino, Sametime, and QuickPlace) can all run on a second server. In fact, we successfully installed all needed components—DB2, WAS, WPS, Domino, Sametime, and QuickPlace—on one server, with 1GB of memory. However, getting Lotus QuickPlace, Domino, and Sametime to run happily on the same server is sometimes problematic. Additionally, such a setup is not very realistic for your production environment, and thus does not allow for a real-life test of the integration/installation process for the collaborative technologies. Therefore, in our environment we placed each of the main Lotus technologies on their own servers so that we could more realistically test the collaboration components. Following this strategy, our four-server test environment for this Redpaper looked as follows: WPSServer: WebSphere Application Server w/Webpshere Portal Server, IBMDB2, IBM HTTP Server DominoServer: Lotus Domino R5 QuickPlace Server: Lotus QuickPlace Sametime Server: Lotus Sametime Should one also desire to test the clustering and scalability capabilities of the Portal Server, we would suggest splitting the WPSServer into a separate server for each component as well. 2.8.3 A more typical production environment The basic single WebSphere machine configuration can be extended by distributing WebSphere Portal over multiple machines, and by making more efficient use of the processing power of each machine in the configuration. WebSphere Application Server supports a wide variety of ways to deploy the portal in multi-machine environments. Commonly used topologies fall into one of the following broad categories. Multi-tiered topologies The components (the Web server, application server, databases, and so forth) are physically separated onto different machines. Vertical scaling topologies Additional WebSphere Portal processes are created on a single physical machine by using models and clones. Chapter 2. Installation, configuration, and deployment planning 41 Horizontal scaling topologies Additional WebSphere Portal processes are created on multiple physical machines by using models and clones. HTTP redirector products such as Network Dispatcher can also be used to implement horizontal scaling. HTTP server separation topologies The Web (HTTP) server is located on a different physical machine than WebSphere Application Server and WebSphere Portal. Requests can be redirected to the portal through a variety of methods. Demilitarized zone (DMZ) topologies Firewalls can be used to create demilitarized zones—machines that are isolated from both the public Internet and other machines in the configuration. This improves portal security, especially for sensitive backend resources such as databases. Note: It is important to remember that, in any topology, many resources and settings defined in WebSphere Application Server, like Global Security Settings, Data Sources, and so on, are shared across all applications, including the portal instance. These examples are not intended to be an exhaustive list of WebSphere topologies that you can create. Instead, they are intended to suggest various ways that you can set up your portal in a multi-machine environment. A typical “production” WebSphere Portal environment will often look like the environment depicted in Figure 2-15 on page 43. 42 WebSphere Portal 4.12 Collaboration Services Figure 2-15 A typical “production” WebSphere Portal Server environment 2.8.4 Collaboration technology considerations (LDAP and SSO) There are two main considerations involved when planning for a “collaborative portal” infrastructure: Single-sign-on/authentication aspects, and LDAP server/directory integration. The single-sign-on aspects are essentially dependant upon the specific LDAP directory configuration you choose. Overall, WebSphere Portal Server supports any standard LDAP server for authentication and authorization. This authentication/authorization LDAP server is the server defined during a standard WebSphere Application Server install—the LDAP server defined in the WebSphere Global Security settings. It is the LDAP directory that is used to verify your login to the portal, etc. Additionally, the collaborative portlets themselves also use an LDAP server to look up various user attributes such as “mailfile” and “mailserver”. This collaboration LDAP server is specified separately in the CSEnvironment.properties file, as described in “Portal settings to support Domino” on page 22. Note: It is important to note that the menu and person tags do not require LDAP, or Domino LDAP, to function. These two features of the Collaborative Components can be leveraged in any environment. Chapter 2. Installation, configuration, and deployment planning 43 These two LDAP values can be set to point to the same LDAP server, or two different LDAP servers, depending on your environment and configuration. Thus, there are really three LDAP server configurations to consider for a collaborative WebSphere Portal Extend environment: Lotus Domino LDAP The easiest configuration to use to ensure the full capabilities of the collaborative portlets, is to utilize the LDAP services in Lotus Domino itself for all WebSphere portal and collaboration capabilities. Chances are that any organization that is choosing to utilize the Lotus Domino-based collaboration capabilities in WebSphere Portal Server already has Lotus Domino deployed in their environment, which can be leveraged for this purpose. Setup guidelines: – Enable LDAP on your Domino server, if not already enabled. – Use Domino LDAP values during your WebSphere install for all WebSphere global security and portal settings. – “Show” the user attributes through Domino LDAP as described in “Domino server settings to support the portal” on page 23 (“Domino LDAP settings”). – Use the Domino LDAP server hostname for the CS_SERVER_DOMINO_DIRECTORY_1.hostname value in the CSEnvironment.properties file. – Enable LPTA between Domino and your WebSphere Portal Server as described in “Domino server settings to support the portal” on page 23 (“Single-sign-on settings”). Pros: – Easiest setup—no LDAP schema changes are required. – Minimal single-sign-on configuration—users are authenticated against Domino for both their initial authentication into the portal server, and for authentication via the collaborative portlets as they access Domino. Domino LPTA handles the SSO aspects. Cons: – Scalability concerns of Lotus Domino LDAP server – Most major organizations already have an existing enterprise LDAP directory as an authentication standard for Web applications, and will require you to hook into that. non-Domino LDAP If an non-Domino LDAP server is used, such as the IBM Secureway eDirectory, then there are some additional setup steps involved. However, the 44 WebSphere Portal 4.12 Collaboration Services usage of Domino Directory Assistance should minimize any single-sign-on concerns. Setup guidelines: – Enable Domino to utilize LDAP Directory Assistance for HTTP authentication. This will ensure that portlet users’ credentials are verified against the same LDAP server utilized when they logged into WebSphere. – Use the third-party LDAP (Secureway, etc.) values during your WebSphere install for all global security settings. – Extend the schema of your third-party LDAP (Secureway, etc.) directory to include the user attributes required for collaborative capabilities: mailserver, mailfile, and sametimeserver. – Use the third-party LDAP (Secureway, etc.) hostname for the CS_SERVER_DOMINO_DIRECTORY_1.hostname value in the CSEnvironment.properties file. – Enable LPTA between Domino and your WebSphere Portal Server as described in “Domino server settings to support the portal” on page 23 (“Single-sign-on settings”). Pros: – This option may better fit into larger organizations’ directory strategy. – Still a minimal single-sign-on configuration—users are authenticated against the third-party LDAP server for both their initial authentication into the portal server, and for authentication with the collaborative portlets as they access Domino. Domino via Domino Directory Assistance integration to the external LDAP. LPTA still handles the SSO aspects, in conjunction with Domino Directory Assistance. Cons: – Some organizations will not want to modify their LDAP schema with the required collaboration-oriented user attributes (mailserver, mailfile, sametimeserver, etc). If this is the case, then some of the collaborative capabilities will not function. – Making the required schema modifications can be tricky and require some level of testing. Chapter 2. Installation, configuration, and deployment planning 45 Important: As of the writing of this Redpaper, there is a known bug in the “my” collaboration portlets that do not allow them to function when the non-Domino directory option is used. This error occurs due to a problem with how the “my” portlets look up some of the user attributes such as “mailserver” and “mailfile”. However, all other collaboration portlets continue to function in this configuration. Domino LDAP plus non-Domino LDAP If an organization is hesitant to modify their enterprise LDAP schema to support the collaborative attributes required, and already has a non-Domino LDAP directory populated with users for authentication alongside their Domino directory populated with Notes users—then a two-directory approach may make sense. Setup guidelines: – Enable LDAP on your Domino server, if not already enabled. – “Show” the user attributes through Domino LDAP as described in “Domino server settings to support the portal” on page 23 (“Domino LDAP settings”). – Use the Domino LDAP server hostname for the CS_SERVER_DOMINO_DIRECTORY_1.hostname value in the CSEnvironment.properties file. – Use the third-party LDAP (Secureway, etc.) values during your WebSphere install for all global security settings. – Instruct your users to utilize the credential vault capabilities of the Notes portlets to provide Single-sign-on type capabilities. Thus, users’ credentials will be verified against the third-party LDAP directory for authentication to the portal. Then the collaborative portlets will use the credentials supplied by the users in the credential vault for authentication. Note: As of the writing of this Redpaper, the Notes portlets supporting credential vault capabilities where not available in the installation CDs. Rather, these updated portlets must be downloaded from the IBM Portal Catalog as described in 3.2.3, “Downloading collaboration portlet updates (portlet catalog)” on page 53. – Enable LPTA between Domino and your WebSphere Portal Server as described in “Domino server settings to support the portal” on page 23 (“Single-sign-on settings”). 46 WebSphere Portal 4.12 Collaboration Services Pros: – This option provides for full collaborative capabilities, with minimal to no changes required to existing directories. – This option may make sense for organizations that have not yet implemented an overall directory strategy, and still have separate directories for Web authentication, Domino authentication, etc. Cons: – Single-sign-on is not transparent to end users, as they must set up their credential vault. Users’ credentials will be verified against the third-party LDAP directory for authentication to the portal. The collaborative portlets will use the credentials supplied by the users in the credential vault to authenticate to Domino as they access Domino. – Sametime integration, and people awareness, are more difficult to maintain. It requires user IDs to be common between the Domino and third-party LDAP directory. – Overall, this is a more complicated and error-prone setup to maintain. Sametime single sign-on concerns Another directory integration/SSO aspect to consider for a collaborative portal deployment concerns the people awareness capabilities. For this to function properly, both your portal infrastructure and your Lotus Sametime infrastructure must be enabled for the same authoritative LDAP directory (Domino LDAP, or any third-party LDAP). This is required so that the user name you use to log in to the portal is recognized as a valid user to your Sametime infrastructure. Other LDAP and single-sign-on concerns Single-sign-on and Directory Integration aspects are one of the most complex parts of any enterprise-wide deployment of technology. It is not possible for us, in this small Redpaper, to cover all the various combinations of LDAP directories, customer authentication routines, etc., that can come into play when you are combining all of the technologies involved in a WebSphere Portal Extent collaborative portal. Therefore, you should always include an ample amount of time in any deployment project plan to address these aspects. Other potential issues to consider in your planning: Does your organization utilize a custom authentication routing on your HTTP servers, or Domino servers (that is, DSAPI)? How will this affect the single sign-on and people awareness features you desire? Does your organization utilize a third-party centralized security management application such as Tivoli Access Manager for e-Business (formerly known as Tivoli Policy Director)? Chapter 2. Installation, configuration, and deployment planning 47 Tip: When investigating your SSO setup, it may be helpful to track the cookies set by the servers. The following cookies apply: On hitting WPS on myportal, your client gets the WASReqURL token for your portal domain, expiring at the end of the session. After pressing the login button, the token LtpaToken for the single-sign-on (SSO) domain is stored, also expiring at the end of the session. The third token just following is JSESSIONID, which is also valid for the portal domain, expiring at the end of the session. To view the tokens as they are set in Internet Explore, change the cookie settings in Start -> Settings -> Control Panel -> Internet Options from Enable to Prompt. The change is made on the security tab by clicking Custom Level and scrolling down to Cookies. 48 WebSphere Portal 4.12 Collaboration Services 3 Chapter 3. Collaborative portlets This chapter provides an overview of the collaborative portlets provided with WebSphere Portal Extend. The following topics are covered: Key concepts behind portlets, and the portlet user interface Capabilities and functions Key technologies and files Suggestions and considerations for deployment © Copyright IBM Corp. 2002. All rights reserved. 49 3.1 An introduction to key portlet concepts There are many good sources of general information about the concept of portlets. However, in case the reader is new to this, we include some concepts here that will be important for reading the rest of this chapter. 3.1.1 What a portlet is Portlets are the heart of WebSphere Portal. They are small portal applications, usually depicted as a small box in the Web page. Portlets are developed, deployed, managed, and displayed independent of other portlets. Administrators and end users compose personalized portal pages by choosing and arranging portlets, resulting in customized Web pages. However, portlets are more than simple views of existing Web content. A portlet is a complete application, following a standard model-view-controller design. Portlets have multiple states and view modes, plus event and messaging capabilities. Portlets run inside the portlet container of the Portal Server component, similar to the way a servlet runs on an application server. The portlet container provides a runtime environment in which portlets are instantiated, used, and finally destroyed. Portlets rely on the WebSphere Portal infrastructure to access user profile information, participate in window and action events, communicate with other portlets, access remote content, look up credentials, and store persistent data. 3.1.2 Portlet modes Portlet modes allow a portlet to display a different user interface, depending on the task required of the portlet. A portlet has several modes of display that can be invoked by icons on the portlet title bar: View, Help, and Edit. A portlet is initially displayed in its View mode (Figure 3-1 on page 51). As the user interacts with the portlet, the portlet may display a sequence of view states, such as forms and responses, error messages, and other application-specific states. Help mode provides user assistance. Edit mode provides a page for users to change portlet settings. For example, a weather portlet might provide an Edit page for users to specify location. Users must be logged in to WebSphere Portal to access Edit mode. 50 WebSphere Portal 4.12 Collaboration Services Figure 3-1 Entering Edit mode of a portlet, with other “mode” icons shown Each portlet mode can be displayed in normal, maximized, or minimized states. When a portlet is maximized, it is displayed in the entire body of a page, replacing the view of other portlets. When a portlet is minimized, only the portlet title bar is displayed on the page. 3.2 Introduction to the collaborative portlets The collaborative portlets provided with WebSphere Portal Extend fall into two categories: New portlets Several portlets are provided with WebSphere Portal Extend that allow for interaction with newer Lotus collaborative technologies. For example, the Extend package includes portlets for utilizing the advanced capabilities of the iNotes interface. No such portlets are provided in the Enable package. Enhanced portlets In addition to new portlets in WebSphere Portal Extend, other portlets are included that are simply enhanced versions of the portlets provided in WebSphere Portal Enable. These enhanced portlets introduce advanced features over the basic portlets provided in Enable. The advanced features allow portal users to take actions on documents or user names that appear in a portlet. A portal user can see if other users are online directly from the portlet, and then select from a menu of options to interact with those users. The “interaction” can be as simple as e-mailing the user, or more advanced such as starting an instant chat, or viewing a user’s Lotus Discovery Server “expertise” profile to find out what else the person knows. The available contact or interaction options that will show up in the menu vary based on the capabilities for which you have enabled your collaborative portal. See 2.3, “Integration with Lotus collaboration technologies” on page 22 for more details on enabling the various capabilities. Chapter 3. Collaborative portlets 51 Additionally, based on the context of the portlet, document actions allow users to take actions directly from the portlet with or without launching the entire application. They can open the document, create a new document, etc.—depending on the current portlet context, and a given portlet’s capabilities. 3.2.1 Included collaborative portlets Table 3-1 briefly lists and defines the collaborative portlets that are provided on the installation CDs with WebSphere Portal Extend v4.12. The remaining sections in this chapter then describe each of these portlets in some additional details. Table 3-1 Collaborative portlets provided in WebSphere Portal Extend 52 Portlet Name Portlet Description iNotesMailPortlet iNotesCalendarPortlet iNotesContactsPortlet iNotesNotebookPortlet iNotesToDoPortlet Provides iframe-based access to iNotes enabled Domino servers and mail files. It includes access to the Welcome, Mail, Calendar, To Do List, Contacts, and Notebook iNotes functions. MyNotesMailPortlet MyNotesCalendarPortlet MyNotesToDoPortlet Displays users’ mail, calendar, and to-dos from their traditional Lotus Domino mail file. The “my” name designates the fact that these portlets autodetect a user’s mail file settings—and thus do not need to be configured individually for each user. NotesMailPortlet Displays any view in a traditional Notes mail database. NotesDiscussionPortlet Displays a Notes database built with the Notes Discussion database template. NotesTeamroomPortlet Displays a Notes database built with the Notes Teamroom database template. NotesViewPortlet Displays any view in any Notes database. In-line Quickplace Portlet Displays a QuickPlace inside an iframe. QuickplacePortlet Launches a designated QuickPlace in a separate browser window. This portlet is also included in WebSphere Portal Enable. WebSphere Portal 4.12 Collaboration Services Portlet Name Portlet Description SametimePortlet Launches the Sametime Connect Java client. This portlet is also included in WebSphere Portal Enable. WebPagePortlet Displays any Web page inside an iframe. Not quite a “collaborative” technology, but included with WebSphere Portal Extend, as it is based on the same technology as the QuickPlace and iNotes iFrame portlets. 3.2.2 Other collaborative portlets In addition to the collaborative portlets provided out of the box with WebSphere Portal Extend, many other portlets to Lotus collaborative technologies are available for download from the IBM Portlet Catalog. Some of these, as of the writing of this paper, include: Lotus Discovery Mini-Search Portlet Lotus Discovery Search Results Portlet Lotus Discovery K-map Portlet IBM Lotus Extended Search Portlets MyiNotes - these portlets autodetect the users’ mail file settings—and thus do not need to be configured individually for each user. Configurable iNotes - one portlet that is configurable for the various iNotes views. Additionally, while this chapter discusses leveraging the provided collaborative portlets, Chapter 4, “Collaborative Components” on page 83 discusses the usage of the Collaborative Components API to create your own collaborative portlets. You are not limited by the portlets provided out of the box! Rather, you are only limited by your imagination and creativity. 3.2.3 Downloading collaboration portlet updates (portlet catalog) IBM maintains a central store for all WebSphere Portal portlets at: http://www-3.ibm.com/software/webservers/portal/portlet/catalog This site should be checked regularly for updates to the existing portlets, as well as to download any new collaborative portlets that may be made available. Chapter 3. Collaborative portlets 53 3.2.4 A sample use of the collaboration portlets In this section, we demonstrate some of the capabilities of the Notes portlets by using a portal place/page-group called Collaboration, as shown in Figure 3-2. Figure 3-2 Our sample “Collaboration” portal place The first page of our Collaboration place, starting at the top left, has the MyNotesMail portlet showing the inbox, the MyNotesCalendar portlet, the NotesToDo portlet, and the NotesView portlet showing the address book. . Note: The NotesViewPortlet is viewing a custom view that we created in the Public directory (i.e., pubnames.ntf) to allow for people awareness—because none of the default views in this database displayed the names in a format that matched our Sametime user names. To show the other portlets, there is also a “Production” teaming page in our sample Collaboration place—with the Notes Discussion, Notes Teamroom and Sametime Connect (Java) launcher portlets; see Figure 3-3 on page 55. 54 WebSphere Portal 4.12 Collaboration Services Figure 3-3 Our sample Collaboration place, production/teaming page The last page in our Collaboration place is called QuickPlace, and it shows the two QuickPlace portlets that are available. To the left on this QuickPlace page there is the QuickPlace In-Line portlet displaying a specific area of a defined QuickPlace. The other portlet is the one from the Enable offering. It displays a dialog box that lists the QuickPlaces the user has defined. The user selects a QuickPlace from the list and clicks Go. The selected QuickPlace is launched in a separate window. Figure 3-4 Collaboration place, QuickPlace page Chapter 3. Collaborative portlets 55 In addition to the portlets highlighted above, it is also important to show the advanced collaboration we included in our environment. Since our portal infrastructure has a Lotus Discovery Server available, all of the people services (i.e., the pop-up menu on people columns) become automatically expanded with two additional commands to choose from, as shown in Figure 3-5. Figure 3-5 LDS Enhanced People menu The choice to Show Profile will present you with the persons profile as compiled by Lotus Discovery Server in a separate browser window (Figure 3-6). The Find Documents Authored By function performs a Lotus Discovery Server search, and brings the results back in a separate browser window. Figure 3-6 LDS Person Profile 56 WebSphere Portal 4.12 Collaboration Services 3.3 The Notes portlets As mentioned earlier in this chapter, several Notes portlets for accessing traditional Notes mail and other Notes databases are provided with WebSphere Portal Extend: NotesMail Portlet MyNotesMail Portlet MyNotesCalendar Portlet MyNotesToDo Portlet NotesDiscussion Portlet NotesTeamroom Portlet NotesView Portlet All of these portlets are contained in one portal application, notes2.war. However, it should be noted that there are actually two Notes-related war files that may be found in a WebSphere Portal environment. In general, Notes.war contains the Enable Notes portlets, while Notes2.war contains the Extend portlets. The Notes.war file contains the WebSphere Portal Enable portlets. This includes basic versions of the five Notes portlets: NotesView, NotesMail, MyNotesMail, MyNotesToDo, and MyNotesCalendar. These basic versions have no advanced collaboration capabilities such as people awareness and menu services. Additionally, these portlets do not provide the picklist capabilities during the edit mode for looking up databases, etc. Server names, databases, views, etc., must all be entered manually. The Notes2.war file contains the same five portlets as the notes.war file. However, these five portlets are enhanced with advanced collaboration capabilities: people awareness and menu services. The Notes.war file also contains the Notes Discussion and Notes Teamroom portlets. There are no versions of these portlets available with WebSphere Portal Extend. Chapter 3. Collaborative portlets 57 3.3.1 NotesView portlet Lotus Notes View Portlet The name used in the documentation (e.g. InfoCenter) Notes View Portlet Title in portlet selector (Edit Layout and Content”) NotesViewPortlet Name in portlet selector (installation) The NotesView portlet is designed to allow you to display any Notes database view in a portlet window. It is the most flexible of all the Notes portlets, as it is not limited to databases with specific templates, etc. Configuration options This portlet actually has two edit mode and configuration screens that must be completed, as shown in Figure 3-7 on page 60 and Figure 3-8 on page 61. Be sure to press Next on the bottom of the first edit screen to go on to the second edit screen. If you press OK on the first edit screen instead, you will exit the edit view and be left with the default settings for much of the portlets configuration. Edit screen 1 options (Figure 3-7 on page 60): – The first configuration setting to make is to name the portlet. This name will show at the top of the portlet window in the portal. – The next few options are basic options selecting the server, database, and the view for the portlet. After selecting a server, you select the check mark, and the portlet populates the database list. The check box next to the database list then populates the view list once you have chosen a database, etc. Note: There is some support for spelling in these configuration fields. For example, the database name does not have to end in “.nsf” . If you don’t see your servers in the server list, or the databases/views to choose, then it is possible that the access rights are not properly set in your environment; refer to 2.3.1, “Lotus Domino integration” on page 22 to verify that you have enabled all the correct Domino settings (LDAP, HTTP, DIIOP, etc.). – The protocol that is used for the portlet can also be selected on this screen. If “Detect protocol automatically” is selected, the portal will first try HTTP. If that is unavailable, it will try HTTPS. 58 WebSphere Portal 4.12 Collaboration Services Edit screen 2 options (Figure 3-8 on page 61): – First choose the number of rows to appear in your portlet. The default setting is 15. – Choose whether or not to alternate row colors to better highlight the row divisions. The default setting is yes. – You can choose to display the icon to create new documents. If you check this option, you then have to enter which Notes form is used for creating new documents.The default setting is no. – Choose how documents the user wishes to view are launched—either in the Lotus Notes client, or in another Web browser window. The default setting is to use the browser. Restriction: The option to view documents in the Notes client only works with Internet Explorer browsers, as it functions via a small ActiveX control which launches the Notes client and passes the database and document details to it. Non-IE browser users will view documents within their browser via Domino HTTP. – Choose whether categorized views are expanded or collapsed when opening. The default is expanded. – Choose several options for the view columns: • Which column will be enabled for people awareness—so that names will be highlighted if the people are online, and contact option menus will be presented. • Which column you want to use to launch the document selected via document action menus. • Which columns (if any) you want to hide from the view as it is presented by the portlet. Tip: You should be careful which column you set for people awareness, and which column is used to launch the document. For example, the people awareness column should contain people names only; the portlet cannot pull names that are included within other text. Additionally, if the same column is identified for both people awareness and document selection, you will lose the ability to open documents, because people awareness will take precedence. – Finally, you must choose the direction for default sorting: either Ascending or Descending. The default is Ascending. Chapter 3. Collaborative portlets 59 Figure 3-7 Notes View Portlet Edit Mode- Page One 60 WebSphere Portal 4.12 Collaboration Services Figure 3-8 Notes View Portlet Edit Mode - Page Two Key files associated with this portlet File Description WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesView.jsp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesViewEditOne.jsp …\WPSNotesViewEditTwo.jsp JSPs used to display the portlet content in edit/configuration modes Chapter 3. Collaborative portlets 61 3.3.2 NotesMail portlet Lotus Notes Mail The name used in the documentation (e.g. InfoCenter) Notes Mail Portlet Title in portlet selector (Edit Layout and Content”) NotesMailPortlet Name in portlet selector (installation) The basic mail portlet can be set up to present the main (Domino) views of the traditional user mail database: Calendar, Inbox, or To Dos. As this portlet must be configured to point to each user’s mail file individually, it cannot be set up in advance for all users by a Portal administrator. Users must be given editor access to this portlet in the WebSphere Portal configuration settings to be able to configure it for their use. Restriction: The NotesMail portlets are designed for use against the StdR5Mail and StdR6Mail templates; if the iNotes template is used it will generate errors. Any custom mail templates may also cause problems, depending on the amount of customization performed. Configuration options The first screen of the edit view for this portlet looks the same as the NotesView portlet described earlier. On this first screen users would select their mail server, database, and the view of their mail that they would like to see (i.e., Inbox, Calendar, and To-do). The second edit screen also presents the same options as the second edit screen in the NotesView portlet, unless the Calendar view was chosen on the first edit screen. If the Calendar view was chosen, then the special edit screen shown in Figure 3-9 on page 63 is displayed instead. On this screen users must choose how many days to display in their portlet view of the calendar, and to launch/view calendar entry details in the Notes client or another browser window. 62 WebSphere Portal 4.12 Collaboration Services Figure 3-9 NotesMail portlet, calendar edit view Key files associated with this portlet Property Description WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesMail.jsp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesMailEditOne.jsp …\WPSNotesMailEditTwo.jsp JSPs used to display the portlet content in edit/configuration modes 3.3.3 MyNotes portlets The “my…” portlets exist for mail, calendar and to do. The “my” portlets get a simplified configuration because the mail sever and the mail box of the user are looked up by the portlet from within the directory, so they do not need to be specified in the edit mode. Portal administrators can thus make the basic configuration settings for users, and then the portlets will automatically function for each user (i.e., users do not need edit rights to the portlet). Chapter 3. Collaborative portlets 63 My Notes Mail portlet My Lotus Notes Mail The name used in the documentation (e.g. InfoCenter) My Notes Mail Portlet Title in portlet selector MyNotesMailPortlet Name in portlet selector Configuration options As the configuration of these “my” portlets is simplified, you only see one edit screen; see Figure 3-10 on page 65. This edit screen presents some of the same edit options as the NotesView portlet, along with some additional options specific to the mail database. On this screen you enter/choose the following: The name to display on this portlet. The number of rows to appear in your portlet. The default setting is 15. Wether or not to alternate row colors to better highlight the row divisions. The default setting is yes. Wether or not to show the file size column. The default setting is no. Whether or not to show an icon for messages that have file attachments. The default setting is yes. Whether to show the inbox view, or the “All documents” view from the mail file. How documents the user wishes to view are launched, either within the Lotus Notes client, or in another Web browser window. The default setting is to use the browser. The direction for default sorting: either Ascending or Descending. The default is Ascending. The protocol that is used for the portlet can also be selected on this screen. If “Detect protocol automatically” is selected, the portal will first try HTTP. If that is unavailable, it will try HTTPS. 64 WebSphere Portal 4.12 Collaboration Services Figure 3-10 MyNotesMail portlet, edit options Key files associated with this portlet File Name Description WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesMail.jsp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\NotesMailEditTwo.jsp JSP used to display the portlet content in edit/configuration mode Chapter 3. Collaborative portlets 65 My Notes Calendar portlet Lotus Notes Mail The name used in the documentation (e.g. InfoCenter) Notes Mail Portlet Title in portlet selector (Edit Layout and Content”) NotesMailPortlet Name in portlet selector (installation) Configuration options Again, as the configuration of these “my” portlets is simplified, you only see one edit screen; see Figure 3-11 on page 67. This edit screen presents some of the same edit options as the calendar edit view in the NotesMail portlet, along with some additional options. Within this screen you enter/choose: The name to display on this portlet. The number of days to show in your portlet view of the calendar. The default setting is 7 days. How calendar entries the user wishes to view are launched—either within the Lotus Notes client, or in another Web browser window. The default setting is to use the browser. The protocol that is used for the portlet can also be selected on this screen. If “Detect protocol automatically” is selected, the portal will first try HTTP. If that is unavailable, it will try HTTPS. 66 WebSphere Portal 4.12 Collaboration Services Figure 3-11 MyNotesCalendar portlet, edit options Key files associated with this portlet Property Description WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesCalendarView.jsp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesCalendarEditOne. jsp JSPs used to display the portlet content in edit/configuration mode Chapter 3. Collaborative portlets 67 MyNotesToDo portlet My Notes To Do The name used in the documentation (e.g. InfoCenter) My Notes Todo Portlet Title in portlet selector MyNotesToDoPortlet Name in portlet selector Configuration Options Again, as the configuration of these “my” portlets is simplified, you only see one edit screen, see Figure 3-12. This edit screen present some of the same edit options as in the MyNotesMail portlet. Figure 3-12 MyNotesToDoPortlet, edit options 68 WebSphere Portal 4.12 Collaboration Services Key files associated with this portlet Property Description WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesCalendarView.jsp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesCalendarEditOne. jsp JSP used to display the portlet content in edit/configuration mode 3.3.4 Notes Discussion and Teamroom portlets The Notes Discussion and Teamroom portlets are very similar to the NotesView portlets. In fact, their edit/configuration screens are identical to those shown for the NotesView portlet in Figure 3-7 on page 60 and Figure 3-8 on page 61. NotesDiscussion portlet Name Description Notes Discussion The name used in the documentation (e.g. InfoCenter) Discussion Portlet Title in portlet selector DiscussionPortlet Name in portlet selector WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesDiscussionView.j sp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesDiscussionEditOn e.jsp …\WPSNotesDiscussionEditTwo.jsp JSP used to display the portlet content in edit/configuration mode Chapter 3. Collaborative portlets 69 NotesTeamRoom portlet Property Description Notes Team room The name used in the documentation (e.g. InfoCenter) Notes Teamroom Portlet Title in portlet selector NotesTeamroomPortlet Name in portlet selector WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesTeamroomView.j sp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\not es2_WPS_PA_127.ear\notes2.war\WEBINF\html\jsp\WPSNotesTeamroomEditOn e.jsp...\WPSNotesTeamroomEditTwo.jsp JSP used to display the portlet content in edit/configuration mode 3.3.5 Common features of the Notes portlets There are several “common” aspects of the Notes portlets supplied with WebSphere Portal Extend: The configured server always shows up below the portlet window’s title region (itso-domino.ibm.com in Figure 3-13). If the portlet allows for launching the full (Notes) client, the launch rocket icon is present below the title region. If you have rights to create documents in the respective Domino db, which is “author” at minimum, then a “Create new document” icon also shows up next to the launch rocket icon. All these aspects are shown in Figure 3-13. Figure 3-13 Sample of a configured portlet (Teamroom portlet) 70 WebSphere Portal 4.12 Collaboration Services 3.4 iNotes portlets As mentioned earlier in this chapter, several iNotes portlets are available, which provide iframe-based access to iNotes-enabled Domino servers and mail files. The following portlets are available: iNotesMailPortlet iNotesCalendarPortlet iNotesContactsPortlet iNotesNotebookPortlet iNotesToDoPortlet All of these portlets are contained in one portal application, inotes.war. Configuration Options All five of the iNotes portlets are set up in the same manner. They all present the same configuration options, as shown in Figure 3-14. The options are simply the name of the iNotes server, plus the database name and password to use for accessing the server. The password is only used if the login credentials supplied to log in to the portal server are not valid for the iNotes server. The portlets then use the password entered here, along with the same user name that you used to log in to the portal server. Figure 3-14 iNotesPortlet, edit options Chapter 3. Collaborative portlets 71 Technology details It is important to note that no options are provided for modifying the interface presented in the iNotes portlet, such as the options provided in the Notes portlets to select the numbers of rows, icons, etc. This difference has to do with the underlying technologies used for the Notes portlets versus the iNotes portlets. The Notes portlets actually access Domino via HTTP on the server, and pull the data from Domino via Domino XML (DXL). They can then manipulate the presentation of the data by using or transforming the XML-based data as needed, before the results are sent to the browser. The iNotes portlets do not utilize such an XML/DXL method, rather they utilize inline frame elements. Inline framing works similar to server side include capabilities, except it is the browser itself that fetches the additional Web page and includes it inside an inline frame. This means that iNotes portlets build the inline frame in the portlet, and build the URL to the iNotes server with an iframe tag; the browser then reads this iframe tag and fetches the iNotes interface for inclusion in the portlet. Based on this, the iNotes portlets present the iNotes interface exactly as it is displayed when utilizing iNotes directly—with the exception that the header and sidebar are removed, as shown in Figure 3-15 and Figure 3-16. Figure 3-15 Standard iNotes inbox Figure 3-16 iNotes inbox via the iNotesMail Portlet 72 WebSphere Portal 4.12 Collaboration Services Key files associated with this portlet All five of the iNotes portlets share a common set of files. Property Description WebSphere\AppServer\installedApps\inot es_WPS_PA_xxx.ear\inotes.war\WEB-IN F\html\jsp\WpsiNotesView.jsp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\not es2_WPS_PA_xxx.ear\inotes2.war\WEBINF\html\jsp\WpsiNotesEdit.jsp JSP used to display the portlet content in edit/configuration mode 3.5 Sametime portlets Sametime Portlet Sametime Chat The names used in the documentation (e.g. InfoCenter) Sametime Portlet Name in portlet selector Sametime Connect Title in portlet selector The Sametime portlet is a basic launcher of the Java Sametime Connect client. The Java client is automatically downloaded from the Sametime server if it is not already present, and provides almost all the features of the respective full Windows client (depending on the version of Sametime that is used). The Sametime launcher portlet is included in the sametime.war Web application file. This portlet is available with WebSphere Portal Enable and Extend. Configuration options As the Sametime portlet is simply a launcher of the Sametime Java client, the only configuration options are: the Sametime server to launch the client from, and the port number for which Sametime is running on that server. See Figure 3-17 on page 74. Chapter 3. Collaborative portlets 73 Figure 3-17 SametimePortlet, edit options Key files associated with this portlet Property Description WebSphere\AppServer\installedApps\sa metime_WPS_PA_xxx.ear\sametime.war \WEB-INF\html\jsp\WpsSametimeView.js p JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\sa metime_WPS_PA_xxx.ear\sametime.war \WEB-INF\html\jsp\WpsSametimeEdit.jsp JSP used to display the portlet content in edit/configuration mode 3.6 Quickplace portlets There are two Quickplace portlets installed with WebSphere Portal Extend: In-line Quickplace Portlet QuickplacePortlet The portlet names can get confusing, as both portlets are named QuickplacePortlet in the Portlet selection GUI when adding portlets to pages. One should be sure to look at the portlet Title and Description in this GUI to be sure which portlet is being selected. 74 WebSphere Portal 4.12 Collaboration Services Quickplace Launcher portlet Sametime Portlet Sametime Chat The name(s) used in the documentation (e.g. InfoCenter) QuickplacePortlet Name in portlet selector Quickplace Portlet Title in portlet selector This portlet is available with WebSphere Portlet Enable and Extend. It is a basic launcher of the full QuickPlace interface in a separate browser window. The portlet presents a picklist of up to six QuickPlace Web addresses from which the user may choose to launch. This portlet is very similar to the basic Quicklinks launcher portlet that is also provided with WebSphere Portal. The Quickplace launcher portlet is included the quickplace.war Web application file. Configuration options As the Quickplace portlet is simply a launcher of a QuickPlace URL in a separate browser window, the only configuration options are to enter up to six QuickPlace URLs. Figure 3-18 Quickplace portlet, edit options Chapter 3. Collaborative portlets 75 Key files associated with this portlet Property Description WebSphere\AppServer\installedApps\qui ckplace_WPS_PA_xxx.ear\quickplace.wa r\WEB-INF\html\jsp\WpsQuickplacePortle tView.jsp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\qui ckplace_WPS_PA_xxx.ear\quickplace.wa r\WEB-INF\html\jsp\WpsQuickplacePortle tEdit.jsp JSP used to display the portlet content in edit/configuration mode In-line Quickplace portlet Lotus Quickplace Portlet Quickplace Portlet (extent) The name(s) used in the documentation (e.g. InfoCenter) QuickplacePortlet Name in portlet selector In-line Quickplace Portlet Title in portlet selector This portlet presents a Quickplace, or specific component of a Quickplace, within the portlet window itself via an iframe. Thus, the technology behind this portlet is very similar to that of the iNotes portlets. When a specific component is chosen, this essentially means a specific view in the Quickplace. The specific view/component defined is then shown without the header and footer around it. This inline Quickplace portlet is included in the quickplace2.war Web application file. Configuration options The inline QuickPlace portlet has an edit interface similar to some of the Notes portlets. It lets you: Assign a title for the portlet window as it will be displayed on the portal page. Select a Quickplace server. It will initially present a list of all available Domino servers from the Domino directory. Select a specific QuickPlace (i.e., database) from the Quickplace server. Select a specific component (or view) of the Quickplace. 76 WebSphere Portal 4.12 Collaboration Services Similar to the Notes portlets, if the picklists do not automatically populate on their own, then one should double-check the QuickPlace integration steps, as specified in 2.3.3, “Lotus QuickPlace (2.08) integration” on page 27, to verify that everything is set up correctly. Figure 3-19 In-line QuickplacePortlet, edit options Key files associated with this portlet Property Description WebSphere\AppServer\installedApps\qui ckplace2_WPS_PA_xxx.ear\quickplace2. war\WEB-INF\html\jsp\WpsQPView.jsp JSP used to display the portlet content in view mode WebSphere\AppServer\installedApps\qui ckplace2_WPS_PA_xxx.ear\quickplace2. war\WEB-INF\html\jsp\WpsQPEdit.jsp JSP used to display the portlet content in edit/configuration mode Chapter 3. Collaborative portlets 77 3.7 Bookmark and Find Bookmark and Find are features included with WebSphere Portal Extend that are actually not portlets, but rather features built into the portal header or navigation bar. They are the only collaboration-oriented features installed with Extend and Experience that are not implemented as portlets. Figure 3-20 Bookmark and Find UI Hotspots 3.7.1 Bookmark The bookmark capabilities discussed here are a means for grouping links and information which are of interest to the community using the respective place. They allow for place-specific links. This bookmark capability is distinct from the bookmarks portlet, which is also available. This portlet can be added to a specific page to allow bookmarks to be configured on a page-by-page basis. The editing of the place bookmarks is done in the Work with Pages section of the WebSphere portal. Besides “external” links, which are links (i.e., Web addresses) to information out of the portal, you can also link to pages in the portal by selecting the respective place and page. If users of a place don’t have access to internal links—for example, a page in another place is not accessible to them but is included as a bookmark—then the link isn’t visible to them within the list of bookmarks. 3.7.2 Find The Find capabilities are enabled by entering a URL for your search services in the administrative panel (Portal Administration -> Portal Settings -> Global Settings). It is intended that this URL be a URL of the search engine/interface, etc., you would like your users to utilize when searching content in, or also possibly outside, the portal. 78 WebSphere Portal 4.12 Collaboration Services Figure 3-21 Find URL in Portal Administration In a collaborative-oriented portal environment it is recommended that this be configured to point to a Lotus Discovery Server. 3.8 Collaborative portlet deployment considerations This section lists some general considerations that should be taken into account when deploying and utilizing the provided collaborative portlets in your environment. 3.8.1 Do not forget browser limitations The portal server lists minimal requirements for a client’s Web browser: Microsoft Internet Explorer Version 4.01 or later Netscape Communicator 4.7 or later However, the portlets themselves sometimes depend on the services used from other platforms. The collaborative portlets get their services via integration with their respective sources: Domino, Sametime, QuickPlace, etc. This may imply stricter browser requirements than those valid for the portal itself. For example, if you intend to use the iNotes portlets, you have to adhere to the browser requirements of iNotes, because you are not only using the data and functionality of iNotes, but the whole user interface in the iFrame portlet. 3.8.2 Consider enabling caching Portlets have a caching mechanism as part of their feature set in WebSphere Portal. However, the collaborative portlets do not support caching in their current incarnations. Caching was disabled, as the developers felt Domino users would be used to receiving near real-time, up-to-date views of their Domino data/mail, etc. Based on this, every refresh of a portal page in a browser results in another connection to Domino, fetching of the data, and close of the session to Domino. Chapter 3. Collaborative portlets 79 Should you be deploying the Domino portlets to a large user base or environment, you may want to consider enabling caching on the portlets by adding the caching tag to the portlet.xml file in the Notes portlets Web application (notes.war). When doing so, you would want to determine an appropriate time for the cache refresh limit for your environment and users. For more details on enabling caching in a portlet, please see “Caching” in 4.5.3, “Portlet performance considerations” on page 121. After you have enabled caching in a copy of the notes.ware file, you need to update this portal application in the Portal administration to have the portlet.xml changes take effect. 3.8.3 Notes on Domino compatibility The collaborative cortlets are compatible back to the release 4.6.x code stream of Notes/Domino. However, the technologies utilized by the portlets to talk to Domino can vary based on the version of Domino. Whenever possible, the portlets try to use the lightest technology to access Domino, where there is a choice to make. Nevertheless, you should be aware of the technologies used by the collaborative portlets to ensure that all required ports are open in firewalls, etc., and any potential performance impacts are carefully considered. As a general rule of thumb regarding the collaborative portlets: The information gathered from Domino regarding lists of users and servers is gotten using LDAP calls between the portal server and the Domino server. A list of databases is gathered via HTML (i.e., users can browse databases via HTTP). Design information (i.e., views, form, columns, fields) is accessed through DIIOP calls between the portal server and the Domino server. For versions of Domino starting with release 5.05, most view and document data is accessed via HTML/XML, leveraging the Domino XML capabilities (DXL). On older versions of Domino this type of information must be gathered via DIIOP. Important: For the Notes Calendar portlets in particular, there is a significant reliance on DIIOP calls for Domino version prior to 5.05. The Calendar portlets perform much slower on these versions of Domino, because essentially all data must be gathered via DIIOP. The needed calendar info was not exposed via DXL until Domino release 5.05. 80 WebSphere Portal 4.12 Collaboration Services 3.8.4 Setting myportal addresses During the configuration of your collaborative portal you might find yourself logging in and out to the portal continuously, going to certain portlets, places, or to specific pages you are working on. In order to make this easier, you may want to set bookmarks/favorites in your browser to these specific portal pages. However, to enable this you must make one quick change to your portal infrastructure, as follows: 1. In the directory <wasroot>\lib\app\config\services there is a file called ConfigService.properties. 2. To enable URL addressability, set the key uri.requestid in this file to false. The default for this key is true, which means that URL addressability is not enabled for the portal, and that pages cannot be easily bookmarked, or linked to. 3. For the change to become active, stop and start your portal server enterprise application with the WebSphere Administrator Control Panel. Chapter 3. Collaborative portlets 81 82 WebSphere Portal 4.12 Collaboration Services 4 Chapter 4. Collaborative Components This chapter describes the Collaborative Components available with WebSphere Portal Extend, which allow you to more easily create your own collaborative portlets leveraging Lotus technologies. This chapter offers the following: An overview of the Collaborative Components API capabilities Step-by-step introductions for creating a basic portlet leveraging the Collaborative Components Some more advanced collaborative portlet samples Some best practices for developing collaborative portlets This chapter assumes that the reader has a basic understanding of the Java programming language and has developed basic Java applications. © Copyright IBM Corp. 2002. All rights reserved. 83 4.1 Introduction What the Collaborative Components are Collaborative Components allow developers who are writing portlets for WebSphere Portal Server to easily add Lotus collaborative functionality to their portlets. All of the Collaborative Components except for the Person and Menu tags are “UI Neutral”. In other words, the goal of most of the Collaborative Components is to provide the data from collaborative systems, and to allow the developer to execute actions on the Lotus collaborative products—while also leaving the user interface up to the developer. Collaborative Components hide the configuration details of the Lotus products that are installed in the enterprise. Developers using these components can add collaborative functionality to a portlet without regard to server configuration specifics. For example, a developer can use the people awareness tags without having to know the name of the Sametime or LDAP server. Collaborative Components are implemented in Java and include no platform-specific code. They can be used on any J2EE-compliant server. Types of Collaborative Components The collaborative components can be divided into two main categories: Java Classes and Methods (cs.jar) This package contains all the Java implementations of the collaborative components. There are classes and methods for leveraging Domino, QuickPlace, Sametime, and Discovery Server. JavaScript tag libraries (people.tld and menu.tld) These tag libraries provide Sametime awareness and contextual menus to JSPs. When to use the Collaborative Components The goal of the Collaborative Components is to expose the most commonly used aspects of the Lotus collaborative technologies through a simple and consistent API. The components are not a replacement of the core product APIs, but rather are complementary. Developers may choose to use the Collaborative Components when they need quick and easy access to Lotus technologies, and may also use the core product APIs in other portions of their applications when more advanced integration with the Lotus Collaborative technologies is required. 84 WebSphere Portal 4.12 Collaboration Services 4.2 Overview of the Collaborative Components The Collaborative Components consist of infrastructure objects, service objects (and their subordinate objects), and tag language descriptors for custom tags. This section provides a high-level overview of these key objects and tags. For more details on each class, tag, and the available methods, see: Appendix A, “Collaborative Components: classes/methods” on page 125 Appendix B, “Collaborative Components: tag libraries” on page 153 4.2.1 Infrastructure objects CSEnvironment Initializes the server environment and retrieves credentials for the logged-in user. CSCredentials Represents the authentication information for the logged-in user. CSFactory uses these credentials to authenticate against the worker servers (Sametime, QuickPlace, etc.). CSFactory Constructs the Java service objects and generates a connection to the appropriate worker server. 4.2.2 Java service objects The CSFactory object instantiates these service objects. The developer is responsible for calling the cleanup() member function on each object before they go out of scope. This cleanup function releases any resources a service object holds. DominoService Provides standardized access to all versions of Domino from R4.67. QPService Provides the ability to create a QuickPlace. PeopleService Provides Sametime awareness (users logged onto Sametime) plus the ability to obtain information about a specified person, such as their e-mail address. Chapter 4. Collaborative Components 85 DiscoveryServerService Provides the ability to discover, search for, and retrieve Categories, People, Places, and Documents from a Discovery Server. 4.2.3 Subordinate objects for DominoService ViewInfo Represents information about a view in a Domino database. ColumnInfo Contains information about the columns in a Notes view. RowInfo Represents data from one row in a Notes view. CalendarDayInfo Encapsulates all the calendar entries for a particular day. EntryInfo Contains information about a single calendar entry. 4.2.4 Tag language descriptors for custom tags PeopleService tags The people service tags generate context sensitive menus and Sametime awareness for names found in the LDAP directory. – person Enables collaboration on the enclosed name. – peopleinit Initializes the people tag functionality. Do not use this function inside a portlet, as it is intialized by the portal server itself at startup. – peopleend Finalizes the people tag functionality. Do not use this function inside a portlet, as it is intialized by the portal server itself at startup. Menu tags These allow developers to add pop-up menus to their Collaborative Components applications. The PeopleService tags make use of this service to display the person link menu. The pop-up menus are Java applets. – menuinit 86 WebSphere Portal 4.12 Collaboration Services Initializes the menu tag functionality. Do not use this function inside a portlet, as it is intialized by the portal server itself at startup. – menucontext Starts the definition of one or more menus under a common context name. – menu Defines a menu within a menu context. – menuitem Defines an entry in a menu. – menudisplay Activates and displays the specified menu. 4.3 Developing a basic collaborative portlet This section guides you through the process of installing the required development tools, and then coding, testing and deploying a basic “hello world” collaborative portlet. 4.3.1 Software prerequisites You should have the following software installed on your development machine: WebSphere Studio Application Developer Version (WSAD) 4.0.3 or higher Supports end-to-end development, testing, and deployment of e-business applications. Portal Toolkit 4.1 or higher The Portal Toolkit plugs in to WebSphere Studio Application Developer 4.0.3 and provides wizards for creating portlet application projects, and for creating portlets based on the PortletAdapter and MVCPortlet classes. It also supports the creation of template-based portlets (ServletInvokerPortlet, JSPPortlet, and XSLTPortlet). Tip: Make sure that your system's PATH environment variable is set up to use JDK 1.3.0, which is the JDK used by WebSphere Application Server. You will need to use this JDK level to compile class files for use in your portlets. Chapter 4. Collaborative Components 87 On your development server: WebSphere Portal Server 4.1 Extend See Chapter 2, “Installation, configuration, and deployment planning” on page 11 for more detailed instructions on setting up your environment for WebSphere Portal Server, with the appropriate Extend version code and Lotus technology integration. 4.3.2 Setting up WebSphere Studio Application Developer Install the Collaborative Components jar files At a minimum you must install the Collaborative Components jar files on your development machine and make them available to WSAD. The required jar files are: cs.jar commres.jar kdsapi.jar kdsw.jar ncsow.jar stcommsrvrtk.jar The simplest way to accomplish this task is to load the cs.ear file into WSAD. This provides the additional benefit of installing the tag libraries and the sample programs that come with the Collaborative Components package. To install cs.ear on your machine, choose the Import option from the WSAD file menu and select EAR File as the import source. On the EAR Import screen enter a new project name and enterprise application project name. When you are finished, your screen should look similar to the one in Figure 4-1 on page 89. For assistance on finding the Collaborative Components Enterprise Application (cs.ear) file, see 2.7, “Installed components of WebSphere Portal Extend” on page 36. 88 WebSphere Portal 4.12 Collaboration Services Figure 4-1 WebSphere Studio, with the Collaborative Components installed Configure Collaborative Components In the project you created above, expand the file tree to <project name>/webApplication/config. Edit the CSEnvironment.properties file and enter the host names for the Discovery Server, Domino Directory, and QuickPlace servers. ############################################################## # # SAMETIME properties # Only valid property is enabled. Other values configured # through hostAddress.xml ############################################################## CS_SERVER_SAMETIME.enabled=false ############################################################## # # QuickPlace properties # enabled indicates whether or not QP creation is allowed. ############################################################## Chapter 4. Collaborative Components 89 CS_SERVER_QuickPlace.enabled=true CS_SERVER_QuickPlace_1.hostname=itso-QuickPlace.ibm.com ############################################################## # # DISCOVERY SERVER properties ############################################################## CS_SERVER_DISCOVERY_SERVER.enabled=false CS_SERVER_DISCOVERY_SERVER_1.hostname=my.server.com ############################################################## # # DOMINO DIRECTORY properties # (LDAP server) # Only valid property is hostname. Leave enabled flag as true. ############################################################## CS_SERVER_DOMINO_DIRECTORY.enabled=true CS_SERVER_DOMINO_DIRECTORY_1.hostname=itso-domino.ibm.com Example 4-1 CSEnvironment.properties file Tip: The use of Sametime awareness in the WebSphere Studio Application Developer was not tested by the authors of this paper. However, this capability should function, assuming the proper entries are included in the hostaddress.xml file, as well as proper use of the peopleinit and peopleend methods in your logic/code. 4.3.3 Writing a basic collaborative Hello portlet The first portlet we are going to develop is the simplest portlet you can write using the collaborative components. We will use the people tags to show how easy it is to enable people awareness in a portlet. Creating a basic JSP portlet The first thing to do is to create a portlet project in WSAD. If you installed the Portal Toolkit, you have the option to create a new portlet project. Select File -> New Project, and then select Portlet project, as shown in Figure 4-2 on page 91. 90 WebSphere Portal 4.12 Collaboration Services Figure 4-2 Creating a new portlet project Fill in the Portlet project fields in the wizard as shown in Figure 4-3. Figure 4-3 Defining your new portlet project On the next screen select the type of portlet you wish to create. See the Portlet Development Guide in the WebSphere Portal Zone at: http://www7b.software.ibm.com/wsdd/zones/portal/ Chapter 4. Collaborative Components 91 for detailed information about the different portlet types and best practices. For simplicity we will use the JSP Portlet type in our examples. Select the JSP portlet as shown in Figure 4-4. Figure 4-4 Selecting the type of portlet project You can use the default values in the next window or change the JSP Name to a name that is more descriptive; see Figure 4-5 on page 93. 92 WebSphere Portal 4.12 Collaboration Services Figure 4-5 Naming the portlet and JSP Finally, press Finish and the system will create the new portlet project for you. Once this process has completed, select the portlet perspective to view your new project. If you are not familiar with these terms, check WSAD Help. Once you have selected the portlet perspective, you can expand your Collaborative Hello portlet to see the file structure you now have in place; see Figure 4-6. Figure 4-6 Collaborative Hello portlet file structure Chapter 4. Collaborative Components 93 In this example we just use the View mode portlet, so we have to set up the CollabHelloView.jsp file under the webApplication\jsp\html directory. Do not use the jsp file directly under the webApplication\jsp directory; this file is a duplicate jsp that is never referenced. Adding people awareness To add people awareness to your JSP you must reference the associated tag libraries. If you have not already imported cs.ear into WSAD as described in 4.3.2, “Setting up WebSphere Studio Application Developer” on page 88, you must specifically import these tag libraries. These tag libraries are located in the following directory on WebSphere Portal Server: <WASROOT>\PortalServer\app\wps.ear\wps.war\WEB-INF\tld Copy the tld files to your local file system or map a drive to your portal server. From WSAD select File -> Import. On the Import screen select the File System option and locate the tld files (Figure 4-7). Figure 4-7 Adding the people awareness tag library Select both the people.tld and menu.tld files. Although we will not directly use the menu tags in this example, the people service tags require the menu tags to 94 WebSphere Portal 4.12 Collaboration Services display the popup menu. Select the correct destination for tld files as shown above. Now you can edit your CollabHelloView.jsp and modify the default text. You can go directly to the Source mode and copy the following code: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ page language="java" import="com.lotus.cs.*, java.util.*" %> <%@taglib uri="/WEB-INF/tld/people.tld" prefix="peopleservice" %> <%@taglib uri="/WEB-INF/tld/menu.tld" prefix="menu" %> <HEAD> <META name="GENERATOR" content="IBM WebSphere Studio"> </HEAD> <h1>Collaborative Components Hello JSP</h1> <% CSEnvironment environ = CSEnvironment.getEnvironment(request); CSCredentials cred = environ.getCredentials(request); %> <BR> <H2>Hello, <peopleservice:person><%=cred.getUserLoginName()%></peopleservice:person>!< H2> This code is straightforward: Import the Collaborative Components library and the Java util library. Import the tag libraries for the people and menu tags. Obtain the environment from CSEnvironment. This step initializes the Collaborative Components and is required for all programs. Obtain the credentials for the current user. Display the name of the currently logged-in user, surrounding this information with people tags. The people service automatically looks up the user and checks to see if that person is online. 4.3.4 Deploying the Collaborative Hello portlet After you have completed coding your basic collaborative portlet, it is time to deploy it on the WebSphere Portal Server and see if it works. Save your JSP file. Right-click your Collaborative Hello portlet project in the portlet perspective view. Select the Export WAR option and save the WAR file on your file system; see Figure 4-8 on page 96. Chapter 4. Collaborative Components 95 Figure 4-8 Exporting your portlet in a WAR To deploy your portlet in WebSphere Portal, you have to log in as Administrator using wpsadmin or another user who has the right to administer portlets. Go to the Portal Administration Page Group and select the first tab, Install Portlets. Select the file where you have exported your WAR file from WSAD. Click Install. After you have installed your portlet, add your new portlet to an existing portal page to see how it works. You do this under the “Work with pages” place in your portal. Once you have added this portlet to a page, it should look similar to the portlet shown in Figure 4-9 on page 97. 96 WebSphere Portal 4.12 Collaboration Services Figure 4-9 Collaborative Hello portlet When you click in the name you obtain a menu with several options: Chat, Send e-mail, Show Profile, Find Documents Authored By (Figure 4-10 on page 98). The last two options—Show Profile and Find Documents Authored By—appear only if you have configured Lotus Domino Discovery Server in your environment because they link with your LDS server to retrieve the information you are requesting. Chapter 4. Collaborative Components 97 Figure 4-10 Collaborative Hello portlet, pop-up menu 4.4 Advanced collaborative portlet samples The Collaborative Hello portlet example was intended to show how easy it is to use some of the functionality that collaboration components expose. The following examples show other services you can use in your portlets to give the collaboration power to your portal environment. The source code for all of these samples is available online. See Appendix C, “Additional material” on page 157 for more details on downloading this sample code. 4.4.1 PeopleSample portlet This portlet displays a view from the Notes address book database (names.nsf) and enables collaboration on one of the view columns. This example demonstrates the use of the DominoService object and People Service tags. 98 WebSphere Portal 4.12 Collaboration Services Follow these steps to create the PeopleSample portlet: Create a new JSP portlet project in WSAD as shown in 4.3.3, “Writing a basic collaborative Hello portlet” on page 90. Name this portlet PeopleSample and accept the defaults on the portlet parameters page. By default the JSP view file for this portlet is view.jsp under the webApplication\jsp\html directory. Enter the following code for this file: Example 4-2 view.jsp for the PeopleSample portlet <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ page language="java" import="com.lotus.cs.*, java.util.*" %> <%@taglib uri="/WEB-INF/tld/people.tld" prefix="peopleservice" %> <%@taglib uri="/WEB-INF/tld/menu.tld" prefix="menu" %> <HEAD> <META name="GENERATOR" content="IBM WebSphere Studio"> </HEAD> <h1>Sample portlet using the Domino and People services</h1> This JSP reads the names.nsf database from the target server and ST enables the name field.<br> <% CSEnvironment environ = CSEnvironment.getEnvironment(request); CSCredentials cred = environ.getCredentials(request); DominoService ds = (DominoService) CSFactory.getService(cred,CSFactory.DOMINO_SERVICE); String viewname = "($VIMPeople)"; ViewInfo vi = ds.getViewInfo("names.nsf", viewname); if (vi == null) { %> <H2>Cannot locate the <%=viewname%> view in names.nsf</H2> <% } else // valid view & database { %> <TABLE> <% int start=1; int nGets = 5; int i, j; String values[]; RowInfo[] ri = vi.getRowInfo(String.valueOf(start), nGets); while(ri != null) { Chapter 4. Collaborative Components 99 // on the second and subsequent calls the getRowInfo() we // overlap reads by one row as required by the API. Do not // display this duplicate row. for(i = (start == 1 ? 0 : 1); i < ri.length; i++) { values = ri[i].getValues(); // first column of this view is the name %> <TR><TD> <peopleservice:person><%=values[0]%></peopleservice:person></TD> <% for(j=1; j < values.length; j++) { %><TD><%=values[j]%></TD> <% } %> </TR> <% } if (ri.length < nGets) break; // last row // Increment start by one less than the number of entries read from // the view. This causes the next read to overlap the previous by // one view entry. This is required because we must ensure that the // start value refers to a valid row in the view. start += ri.length - 1; ri = vi.getRowInfo(String.valueOf(start),nGets); } %> </TABLE> <BR> End Of Records <% } // Very important: ds.cleanup(); %> clean up resources used by the Domino service Follow the steps in 4.3.4, “Deploying the Collaborative Hello portlet” on page 95 to export the WAR file from WSAD and deploy this application on WebSphere Portal Server. The output from this portlet should look similar to Figure 4-11 on page 101. 100 WebSphere Portal 4.12 Collaboration Services Figure 4-11 PeopleSample portlet sample output Key points about this portlet are: We use CSFactory.getService to construct the DominoService object. In this example we do not specify a Domino server, so CSFactory uses the Domino Directory server specified by the administrator in the CSEnvironment.properties file. This is the preferred way to establish a connection, rather than hard-coding the server into your JSP. If you wish to connect to a different Domino server, use the form of getService that takes the name of a specific Domino server as a parameter. Call getViewInfo on the DominoService object to open a database and view. From this object you can read the view entries, obtain view categories, titles for the columns, and other related information. In this example we open the ($VIMPeople) view rather than the Person view in names.nsf. We do this because the Person view contains names in the wrong order (last name followed by the first name). The PeopleService tags only recognize names in abbreviated format (e.g., Joe Smith/Chicago/Acme) or common name format (Joe Smith). Chapter 4. Collaborative Components 101 Call getRowInfo on a ViewInfo object to read entries from a view. getRowInfo takes the starting view entry number (as a String) and the requested number of entries as parameters. The view entries are numbered starting with 1. The return value from this function is either an array of RowInfo objects or null in the case of an empty view. Note: The correct way to use the getRowInfo call to read an entire view is to overlap your reads by one row. That is, read the first set of RowInfo objects, then read the next set of RowInfo objects starting with the last one read on the previous call. Discard the first RowInfo object (a duplicate) on your second and subsequent calls. Failure to overlap your reads can produce unexpected results. In particular, it is not valid to call getRowInfo with a starting row number that does not exist in the view. Call the cleanup function on the DominoService object to release allocated resources. 4.4.2 MenuSample portlet This portlet demonstrates the features of the menu tags. Follow these steps to create the MenuSample portlet: Create a new JSP portlet project in WSAD as shown in Section 4.3.3, “Writing a basic collaborative Hello portlet” on page 90. Name this portlet MenuSample and accept the defaults on the portlet parameters page. By default the JSP view file for this portlet is view.jsp under the webApplication\jsp\html directory. Enter the following code for this file: Example 4-3 view.jsp for the MenuSample portlet <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <%@ page language="java" import="com.lotus.cs.*, java.util.*" %> <%@ taglib uri="/WEB-INF/tld/menu.tld" prefix="m" %> <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Studio"> </HEAD> <% boolean showtest = false; String testMessage = "Passed by parameter"; %> <H2>Menu Tag Sample</H2> <m:menucontext contextName="context1"> <m:menu menuName="menu1" menuID="mymenu_1"> <m:menuitem itemName="item 1" callbackFn="alert('item 1');" /> <m:menuitem itemName="item 2" callbackFn="alert('item 2');" enable="false" show="<%=showtest%>" /> 102 WebSphere Portal 4.12 Collaboration Services </m:menu> <m:menu menuName="menu2" menuID="mymenu_2"> <m:menuitem itemName="item 3" callbackFn="launchWithParam();" /> <m:menuitem itemName="toggle 5" callbackFn="toggleEnable();" /> <m:menuitem itemName="item 5" callbackFn="alert('item 5');" enable="isEnabled();" /> </m:menu> </m:menucontext> <m:menucontext contextName="context2"> <m:menu menuName="menu1" menuID="mymenu_3"> <m:menuitem itemName="item 6" callbackFn="alert('item 6');" /> </m:menu> </m:menucontext> <script type="text/javascript" language="Javascript"> enabled=false; function launchWithParam() { alert("this is the param passed in: " + context1.testparam); } function isEnabled() { return enabled; } function toggleEnable() { enabled = !enabled; } </script> <p><a href="javascript:void(0)" onclick=<m:menudisplay contextName="context1" menuName="menu1" />>menu1 in context1</a> shown on click</p> <p><a href="javascript:void(0)" onmouseover=<m:menudisplay contextName="context1" menuName="menu2" paramName="testparam" paramValue="<%=testMessage%>" />>menu2 in context1</a> shown on mouse over </p> <p><a href="javascript:void(0)" onclick=<m:menudisplay contextName="context2" menuName="menu1" />>menu1 in context2</a> shown on click</p> </HTML> Chapter 4. Collaborative Components 103 Follow the steps in 4.3.4, “Deploying the Collaborative Hello portlet” on page 95 to export the WAR file from WSAD and deploy this application on WebSphere Portal Server. The output from this portlet should look similar to Figure 4-12. Figure 4-12 Menu tag sample as it initially appears Figure 4-13 Menu sample with first menu displayed 104 WebSphere Portal 4.12 Collaboration Services Figure 4-14 Menu sample with second menu displayed Figure 4-15 Menu sample after “toggle 5” selection Figure 4-12 on page 104 shows the menu sample as it first appears. Clicking on the first highlighted text brings up the menu shown in Figure 4-13 on page 104. Hovering over the second line of highlighted text brings up the second menu. Note that item 5 is greyed out in Figure 4-14. Clicking toggle 5 enables item 5, as shown in Figure 4-15. Key points about this portlet: We set up two menu contexts, context1 and context2. Under context1 we have menu1 and menu2. Under context2 we have a different menu1. The menuitem tags under each menu tag define the menu selections. In each menuitem tag the callbackFN parameter specifies the action to take when a user selects the item. This action takes the form of a JavaScript call. Chapter 4. Collaborative Components 105 In context1, menu1, item 2 (code shown below) we have specified the enable tag and set it to false (disable/grey out). We also specified the show flag and set it to the value of showtest. Showtest is known at JSP compile time and is set to false. This causes this item not to appear in the menu. <m:menucontext contextName="context1"> <m:menu menuName="menu1" menuID="mymenu_1"> <m:menuitem itemName="item 1" callbackFn="alert('item 1');" /> <m:menuitem itemName="item 2" callbackFn="alert('item 2');" enable="false" show="<%=showtest%>" /> </m:menu> In context1, menu2, item 5 (shown below) we have specified the enable tag and set it to a JavaScript function. This function is evaluated whenever you display the menu and determines whether item 5 will be enabled or greyed out. Selecting the item labeled “toggle 5” calls a function toggling the value that the isEnabled method returns (thus enabling or disabling item 5). <m:menu menuName="menu2" menuID="mymenu_2"> <m:menuitem itemName="item 3" callbackFn="launchWithParam();" /> <m:menuitem itemName="toggle 5" callbackFn="toggleEnable();" /> <m:menuitem itemName="item 5" callbackFn="alert('item 5');" enable="isEnabled();" /> </m:menu> The HTML code for the anchor tags demonstrates how to display a menu in response to different JavaScript events. In the second example we pass a value, testparam, using the paramName/paramValue tags. Any callback function from this menu can evaluate the value of testparam as context1.testparam. <p><a href="javascript:void(0)" onclick=<m:menudisplay contextName="context1" menuName="menu1" />>menu1 in context1</a> shown on click</p> <p><a href="javascript:void(0)" onmouseover=<m:menudisplay contextName="context1" menuName="menu2" paramName="testparam" paramValue="<%=testMessage%>" />>menu2 in context1</a> shown on mouse over </p> <p><a href="javascript:void(0)" onclick=<m:menudisplay contextName="context2" menuName="menu1" />>menu1 in context2</a> shown on click</p> </HTML> 106 WebSphere Portal 4.12 Collaboration Services 4.4.3 An advanced collaboration sample The functionality of this portlet application is to give the user a tool to easily check the agenda for all the people who are in the enterprise directory. We can consider this example as a portlet application because there are two portlets that send and receive messages one from another. Portlet applications provide the means to package a group of related portlets that share the same context. The following collaboration components are used in this example: People library tags: We added in any name of both portlets the people tag to have people awareness in the portlets. Menu library tags: We used these in order to have one extra menu option: Show Agenda. This option is an extension of the menu options you have when you enable people awareness in your portlets. Domino Service: We used this service in both portlets to get the rest of collaboration services and access to the data. ViewInfo Service: In the first portlet we get the people data from the view to present it in the portlet. In the second portlet we get the data from the calendar of the person selected in the first portlet. Calendar Service: Once we have the view object, we need to get the calendar entries for the person we selected in the first portlet. Portlet library tags: Using standard programming API portlet and JSP portlet tag library to send the message between two portlets and to get one parameter from the configuration of the second portlets. Figure 4-16 on page 108 shows the architecture of the example and how it works. Chapter 4. Collaborative Components 107 Figure 4-16 Advanced collaboration example We assume you are familiar with the structure of a portlet. Here we present part of the portlet.xml file, which is the portlet descriptor generated by WSAD. Note that we added the cache option and config param in one of the portlets. Example 4-4 Part of the portlet.xml file ... <portlet-name>AdvancedCollab Portlet</portlet-name> <cache> <expires>120</expires> <shared>no</shared> </cache> ... <portlet-name>AdvancedCollab2 Portlet</portlet-name> <cache> <expires>0</expires> <shared>no</shared> </cache> ... <concrete-portlet href="#Portlet_2"> <portlet-name>Advanced Collab2 Portlet</portlet-name> <default-locale>en</default-locale> <language locale="en"> <title>Advanced Collab2 Portlet</title> 108 WebSphere Portal 4.12 Collaboration Services <title-short></title-short> <description></description> <keywords></keywords> </language> <config-param> <param-name>Domain</param-name> <param-value>itso</param-value> </config-param></concrete-portlet> ... The cache option is really interesting when you know that the data you are presenting in the portlet is not going to change, or even if it changes is not relevant for the end user. In our case it is not really important if somebody is added in the people view. We can set up a 120-second time cache to avoid calculating the data from the view portlet each time the page is recharged. However, we cannot set up the same cache option for the second portlet because we need the data for the agenda each time that the user selects one person in the view of the first portlet. It is useful, in order to avoid performance problems, to use this configuration parameter to speed the load of our entire page into the portlets. We do not think it is necessary to get the data from Domino each time the page is reloaded. We use the config parameter for both portlets. The first portlet has a parameter called View and the value is used to retrieve the data of this view from the Domino Directory (names.nsf). The config parameter for the second portlet is used to set up this application in different domains without touching the code of the portlet, and to point to the directory containing the images for the different entries in the calendar view. Also, this is a way to show how easy it is to access a portlet configuration to get the data from it. There are several other ways to set up a parameter for a portlet. We chose the config parameter so only the administrator of the portal will be able to modify this parameter in Figure 4-17 on page 110. Chapter 4. Collaborative Components 109 Figure 4-17 Setting the config parameter The format for the URL Images parameter is: http://itso-domino.ibm.com/icons/ Sender portlet The sender portlet must implement the ActionListener interface and the performedAction method because we are going to enable the portlet to send messages to other portlets and manage the events. In the doView() method we enable the portlet to send messages and redirect the output to the AdvancedCollabSenderView.jsp file. Example 4-5 Enabling the portlet to send messages package com.ibm.wps.portlets.messaging; import java.io.*; import org.apache.jetspeed.portlet.*; import com.ibm.wps.portlets.*; import org.apache.jetspeed.portlet.event.*; public class AdvancedCollabSender extends PortletAdapter implements ActionListener { public void init(PortletConfig portletConfig) throws UnavailableException { super.init(portletConfig); } public void doView(PortletRequest request, PortletResponse response) throws PortletException, IOException { DefaultPortletAction action = new DefaultPortletAction("send"); 110 WebSphere Portal 4.12 Collaboration Services PortletURI sendURI = response.createReturnURI(); sendURI.addAction(action); request.setAttribute("actionURI", sendURI.toString()); getPortletConfig().getContext().include("/jsp/AdvancedCollabSenderView.jsp", request, response); } public void actionPerformed(ActionEvent event) { PortletRequest request = event.getRequest(); String username = request.getParameter("username"); String portletName = request.getParameter("portletName"); if ( username != null && username.trim().length() > 0 ) { DefaultPortletMessage message = new DefaultPortletMessage(username); try { getPortletConfig().getContext().send(portletName, message); } catch ( AccessDeniedException ade ) { System.out.println("Could not send Message to "+ portletName); } } } } In the actionPerformed() method we get from the request the username and PortletName variables that correspond to the hidden fields in our form in the JSP file. We use a post method, so when we submit the form in the request variable we can obtain the values for the username and PortletName. Then we send the message using the send method. If you use this method with the first variable set to null you send the message to all the portlets of the page. In this case we are sending the message to our second portlet. The message we use is the defaultPortletMessage. You can extend this class to use another message structure. We do not extend this class and pass the username in the String object of the message. Receiver portlet This is the code for the receiver collaborative portlet, which must implement the MessageListener interface and MessageReceived method. We get the message in the MessageReceived Method and set the attribute in the session. Thus the portlet in the jsp page using the usebean jsp directive can get the username variable. In the doView() method we redirect to the AdvancedCollabReceiverView.jsp. package com.ibm.wps.portlets.messaging; Chapter 4. Collaborative Components 111 import java.io.*; import org.apache.jetspeed.portlet.*; import com.ibm.wps.portlets.*; import org.apache.jetspeed.portlet.event.MessageListener; import org.apache.jetspeed.portlet.event.MessageEvent; public class AdvancedCollabReceiver extends PortletAdapter implements MessageListener { public static final String USERNAME_KEY = "username"; public void init(PortletConfig portletConfig) throws UnavailableException { super.init(portletConfig); } public void doView(PortletRequest request, PortletResponse response) throws PortletException, IOException { String username = (String)request.getSession().getAttribute(USERNAME_KEY); if (username == null) username=""; request.setAttribute("username", username); // Invoke the JSP to render getPortletConfig().getContext().include("/jsp/AdvancedCollabReceiverView.jsp", request, response); } public void messageReceived(MessageEvent event) { DefaultPortletMessage message = (DefaultPortletMessage) event.getMessage(); PortletRequest request = event.getRequest(); request.getSession().setAttribute(USERNAME_KEY, message.getMessage()); } } AdvancedCollabSenderView.jsp You can get the entire code from the additional material of this Redpaper. Here we explain the most important lines of code we used in developing this example. The jsp we use to send the message has first to get the DominoService credentials and then obtain the data from the view. It also needs to read the value of the View attribute we set up before from the portletRequest variable. All of this is included in the following lines of code: 112 WebSphere Portal 4.12 Collaboration Services ... CSEnvironment environ = CSEnvironment.getEnvironment(request); CSCredentials cred = environ.getCredentials(request); DominoService ds = (DominoService) CSFactory.getService(cred,CSFactory.DOMINO_SERVICE); String ViewName = portletRequest.getPortletSettings().getAttribute("View"); ViewInfo vi = ds.getViewInfo("names.nsf", ViewName); ... To get the portletRequest variable you should initialize the portlet API through the jsp directive: <portletAPI:init /> This initialization allows you to access the portletRequest and portletConfig variables of the portlet API. The following lines of code show how to add other entries to the standard people awareness menu that you obtain when you use the people tag library. ... <menu:menucontext contextName="peoplemenu_moreContext"> <menu:menu menuName="peoplemenu_more" menuID="peoplemenu_more"> <menu:menuitem itemName="Show Calendar..." callbackFn="ShowCalendar();" /> </menu:menu> </menu:menucontext> ... The important thing here is to preserve the contextName, menuName, and menuID. In our example we use a callbackFn() to show the calendar. In this function, to get the name that is between the tags, get the variable linkID (name of the person). In the example we use this variable to set up the hidden fields in our form and to submit the page. ... function ShowCalendar() { <%=portletResponse.encodeNamespace("submitForm")%>.<%=portletResponse.encod eNamespace("username")%>.value=linkId; <%=portletResponse.encodeNamespace("submitForm")%>.<%=portletResponse.encod eNamespace("portletName")%>.value="AdvancedCollab2 Portlet"; <%=portletResponse.encodeNamespace("submitForm")%>.submit(); } ... See the menu tag library description on how to use another JavaScript function for passing parameters using name and value pairs into an array. Chapter 4. Collaborative Components 113 The next thing we do in our example is to define the form, hidden fields, action, and URI. ... <form name="<%=portletResponse.encodeNamespace("submitForm")%>" action="<%=actionURI%>" method="POST"> <input type="hidden" name="<%=portletResponse.encodeNamespace("username")%>" value=""> <input type="hidden" name="<%=portletResponse.encodeNamespace("portletName")%>" value=""> ... The actionURI variable contains the same value as the page, so when we submit the page the URL will be the same, so we reload the page but in the request we have set up the values for some fields. To get the name of the view where we are going to retrieve the data we access portletSettings via the portletRequest variable. We can do that because we have initialized the portlet API with the Init jsp directive. ... String ViewName = portletRequest.getPortletSettings().getAttribute("View"); ... Always remember to call cleanup() when using DominoService, or other Service java objects, in order to free up connections back to your Domino environment. The rest of the file is the same code we used for the people view in our previous example. AdvancedCollabReceiverView.jsp This is the jsp file used to present the calendar data of the person selected in our first portlet. The first thing to note in the code is that we use the usebean jsp directive to get the value of the username variable. ... <portletAPI:init /> <jsp:useBean id="username" class="java.lang.String" scope="request" /> ... We also initialized the portlet API to get the config variables Domain and URL. These variables make the example independent from the environment. ... String domain = portletRequest.getPortletSettings().getAttribute("Domain"); ... String urlicons= portletRequest.getPortletSettings().getAttribute("URL Images"); 114 WebSphere Portal 4.12 Collaboration Services ... Once you have these variables you can access the user´s data: the MailServer and MailFile fields. These are part of the set of methods that are provided by DominoService. You can see more in detail in the API reference. To write the output you should check whether there are some null pointer variables. That is why we check every element before presenting the data in the page. <table><tr> <% for (int i=0 ; i < entrylist.length; i++) { entry = entrylist[i]; alttext = entry.getAlt(); rowtext = entry.getSummary(); iconid = entry.getIconName(); if (iconid != null) { iconid = urlicons + iconid; %><td><img border="0" src="<%=iconid%>" /> </td><% } launchURL = urlBase + entry.getUNID() + "?opendocument" + "&date=" + today.getISODate(); %><td><a href="javascript:window.open('<%=launchURL%>');" <% if(alttext != null) { %>title="<%=alttext%>"<% } %>><%=(rowtext == null ? "" : rowtext)%></a></td></tr> <% } %></table><% And last but not least is the ds.cleanup() call. This is really important when you are working in a production environment. You have to release the DIIOP connections you created; otherwise, you run the risk of using up all the connections in the DIIOP server. The DIIOP task has its own timeout setting and releases connections then. But in a high concurrence environment it could be insufficient to release the connections in the timeout frame. 4.4.4 Deploying Advanced Collaboration portlets To deploy the AdvancedCollab example you should proceed as you did with the other examples. Chapter 4. Collaborative Components 115 Create an application page In one of the PageGroups you already have, or in a new one, you can create a page to test your example after you complete all the settings we explain in this section (Figure 4-18). Add both portlets to the page. There’s no problem in how the portlets are located in the page, or even if you put other portlets in the same page. Figure 4-18 Creating an application page Config parameters In this case you must remember to change the configuration parameter in the AdvancedCollab2 portlet. You can access this setting by logging in to the portal as user wpsadmin or a user with administrative rights. Select Portal Administration PageGroup. Select the Portlets tab. Select the ManagePortlets tab. Select the AdminCollab2 portlet in the list box. Select the Modify Parameters option. Domino settings You should have the following settings in the Domino server to allow the AdvancedCollab example to work properly. Create a view in the names.nsf file with Domino Designer with the following formula in the first column: 116 WebSphere Portal 4.12 Collaboration Services @Trim(@Subset(FirstName;1))+@If(Firstname !="";" "+@Trim(@Subset(LastName;1)); @Trim(@Subset(LastName;1)) ) This formula returns a proper Name, which is placed in the first column of the view. Add the same columns we added, or other columns you want to show in the view. In our example we selected the following: Telephone: the formula isthe field OfficePhoneNumber Company: the formula is the field Company. Mail: the formula is the following: name := @Name([Abbreviate]; @Subset(FullName;1)); @If(MailDomain != "" & MailAddress != ""; @Name([Abbreviate];MailAddress) + " @ " + MailDomain; MailAddress != ""; @Name([Abbreviate];MailAddress);MailDomain != ""; name + " @ " + MailDomain; name) It is important that all the people documents have the first entry of the username equal to the first column you just set up in the view, plus your organization; see Figure 4-19. Figure 4-19 People document setting To enable people to see your agenda, check the “Read public documents” checkbox in the ACL of the mail database (Figure 4-20 on page 118). It means that everybody can see your calendar entries in your agenda unless you mark them as private when you create or edit those entries. Chapter 4. Collaborative Components 117 Figure 4-20 Setting ACL databases Create some calendar entries in your demo user agendas via the Web interface or the Notes Client. If you are testing in a demo environment, it is useful to check the repeat field in the calendar entries for consecutive days. Also, you can create different types of entries—meetings, appointments, anniversaries, etc. So finally you can test your AdvancedCollab application in the page you created. It looks similar to Figure 4-21. Figure 4-21 Testing the AdvancedCollab example - 1 118 WebSphere Portal 4.12 Collaboration Services And when you click a name you obtain the menu options shown in Example 4-22: Figure 4-22 Testing the AdvancedCollab example - 2 You select Show Calendar and get the user’s agenda in the other portlet of your page; see Figure 4-23. Figure 4-23 Testing the AdvancedCollab example - 3 4.5 Best practices for collaborative portlet development This section provides some general thoughts and considerations on developing collaborative portlets. However, a significant amount of other documentation is available on this topic—and anyone performing any serious portlet development should be sure to carefully review this additional documentation. See “Related publications” on page 159 for a listing of additional sources. Chapter 4. Collaborative Components 119 4.5.1 Debugging recommendations General debugging practices There are multiple options for debugging your portlets in WebSphere Studio Application Developer. The most advanced and integrated options involve using the remote debugger capabilities in the WSAD tool to actually debug your portlets on a separate WebSphere Portal Server, through the WSAD interface. If you wish to take this approach, we recommend that you review the large amount of documentation already covering this topic on the IBM WebSphere Developers Domain at: http://www7b.boulder.ibm.com/wsdd/library/techarticles/0203_khalifa/khalifa 2.html http://www7b.boulder.ibm.com/wsdd/techjournal/0110_winchester/winchester.ht ml However, as the samples written for this paper were not overly complex, we took an alternative approach to provide basic debugging capabilities—while also simplifying development. In our approach, we wrote the portlets initially as standalone JSPs and servlets that leveraged the Collaborative Components. These standalone applications were then tested in the WebSphere Studio Application Developer test environment itself, not remotely on a server. Once we had verified that our basic collaborative code was working as planned, we then converted our applications to portlets by wrappering them with the appropriate portlet code. We would then deploy and test these portlets on the WebSphere Portal server as needed. We recommend this approach for basic portlet debugging, as the more advanced remote debugging capabilities of WSAD can take additional time and effort to set up and configure properly. Portlet trace logging Another recommendation for debugging is to enable tracing for the Collaborative Components during your development and debugging. To enable this, access Services -> Trace in the WebSphere Administration Console, and turn on tracing for com.lotus.DominoService. 4.5.2 Portlet deployment considerations When you deploy portlets you should be aware of the following: If you modify a portlet, you do not reinstall the portlet into WebSphere Portal Server to see your changes. If the portlet application already exists, you will receive an error when doing this. Instead, go into Portlet Application Management, and choose to “update” your portlet application to see your code changes. 120 WebSphere Portal 4.12 Collaboration Services You cannot have two portlets on a portal server with the same application name. To install a new portlet application using an existing name, uninstall the old one first. You cannot have two portlets with the same portlet name, which is in the portlet descriptor file (portlet.xml). You cannot have two portlets with different names but with the same UID in the portlet.xml file. WSAD automatically creates a unique UID for each portlet in your portlet application. 4.5.3 Portlet performance considerations WebSphere Portal uses the same portlet instance to generate the markup for different pages for different users. There are a limited number of threads that perform these tasks. Therefore, it is imperative to implement the portlet to do its job as quickly as possible so that response time for a whole page is optimized. Caching A portlet container can provide a per-portlet cache, which stores the content of a portlet. To configure the caching policy of a portlet, there are two properties in the portlet’s deployment descriptor file (portlet.xml) that should be configured. In the case of portlet access to Domino-based collaborative servers, this means a connection is established each time with Domino, the data is read, and the connection is destroyed. There is no connection pooling by default with the Collaborative Components, so the performance hit of not caching includes both connection setup and data retrieval. Example 4-6 Cache-related properties in the portlet.xml file <cache> <expires>0</expires> <shared>no</shared> </cache> Where: <expires> Indicates the number of seconds after which the portlet's output is refreshed. 0 indicates that the portlet's output always expires, and that no caching is performed. This is the default setting if the cache element is not present at all. Any number greater than 0 indicates the number of seconds the portlet output is cached. After the cache time expires, subsequent requests cause the portlet to refresh its output. Chapter 4. Collaborative Components 121 -1 indicates that the portlet’s output never expires. After the portlet is initialized, its content is no longer refreshed. <shared> Indicates whether the portlet output is cached and shared with all users, or whether it is cached for each individual user. Specify “yes” or “no”. For a discussion of the pros and cons of caching for a collaborative portlet application, see 4.4.3, “An advanced collaboration sample” on page 107. General portlet performance The following general portlet performance thoughts have been taken directly from the Portlet Developers Guide. However, because we consider performance crucial to any production portlet, we have included a copy of this information here. Limit the use of the synchronized methods or synchronized code blocks in the processing of a portlet method. Limit the use of complex string operations. This includes: – Minimize transient XSL style sheets as they cause a lot of temporary Java object instantiations. – Consider using a StringBuffer to replace temporary String objects.These are more efficient in processing strings in general and also don't generally instantiate other temporary String objects. Limit the use of long-running loops. Do not create large pools of threads. Minimize calls to external data sources. If possible, set your portlet to cache its output. Use JSPs instead of XSL. JSPs with view beans are much faster and instantiate less intermediate Java objects. The XSL engine creates a lot of temporary strings. Portlet JSPs can be optimized for performance by reducing white space and using the non-transferable JSP comment format (<%-- --%>) as opposed to the HTML comment format (<!-- -->). Minimize Java object instantiations. DominoService object Depending on the type of request, the DominoService object uses either DIIOP or HTTP to retrieve the data. There is a significant performance advantage to designing your code to use functions relying on HTTP for their underlying implementation. In addition, the use of DIIOP requires Domino R5 or higher—so 122 WebSphere Portal 4.12 Collaboration Services code that calls DominoService functions using DIIOP will not function against Domino R4 servers. Keep the following in mind: All view-related functions except for getViewCategories use HTTP. Of the Document-related functions, only getOpenURL, getEditURL, and deleteDocument use HTTP. All others require DIIOP. Querying a Domino server for a list of databases uses DIIOP. CalendarDayInfo functions use DIIOP for versions of Domino between 5.0 and 5.0.3. The first time you invoke a function requiring DIIOP, an internal session helper object is created to manage the Domino session. Listing of DominoService calls using DIIOP The following DominoService calls utilize DIIOP when communicating with Domino, and should therefore be avoided when performance considerations are crucial. Directory-related: – public HashMap getDatabases – public HashMap getCompleteDatabases – public HashMap getDatabaseViewsWithAliases – public HashMap getQuickPlaceDatabases – public HashMap getQuickPlaceComponents Document-related: – public HashMap getDocumentInfo – public boolean updateDocumentInfo – public String createDocument – public boolean createDatabase – public boolean addACL – public lotus.domino.Session getSessionObject – public lotus.domino.Document getDocumentObject View-related: public String[] getViewCategories Chapter 4. Collaborative Components 123 124 WebSphere Portal 4.12 Collaboration Services A Appendix A. Collaborative Components: classes/methods This appendix describes key objects and methods available from the Collaborative Components API for usage in your custom collaborative portlets. For more detailed information about each of these classes, see the documentation provided in the form of a Javadoc within the Collaboartive Components enterprise application: the cs.ear file. If you have installed/deployed the Collaborative components on your WebSphere server, as described in 2.6, “Deploying the Collaborative Components (API)” on page 34, you can find the documentation in the following location: C:\WebSphere\PortalServer\app\wps.ear\wps.war\doc\Javadoc\CollabServices\Collab Services\index.html CalendarDayInfo CalendarDayInfo encapsulates a day within a calendar's current time period. It provides accessor methods to the list of calendar entries for the day, and facilities for dealing with timeslots. To create a CalendarDayInfo object, use DominoService.getViewInfo() to first create a ViewInfo, and then use ViewInfo.getCalendarDayInfo(). © Copyright IBM Corp. 2002. All rights reserved. 125 To get the list of entries in the day, use getEntryInfo. getEntryInfo public final EntryInfo[] getEntryInfo() Returns the set of calendar entries for the day. getISODate public final java.lang.String getISODate() Returns a String representation for the day's date. ISO data format: "yyyy-MM-dd" in all locales. getDate public final java.util.Calendar getDate() Returns a Java Calendar object for the day. getPreviousISODate public java.lang.String getPreviousISODate(int grid) Returns a String representation for the previous day's date. ISO data format: "yyyy-MM-dd" in all locales. This is useful when implementing navigation controls for the calendar. Parameters: grid - calendar style, one of ViewInfo.ONE_DAY, ViewInfo.TWO_DAYS, ViewInfo.ONE_WEEK, ViewInfo.TWO_WEEKS, or ViewInfo.ONE_MONTH. getNextISODate public java.lang.String getNextISODate(int grid) Returns a String representation for the next day's date. ISO data format: "yyyy-MM-dd" in all locales. This is useful when implementing navigation controls for the calendar. Parameters: grid - calendar style, one of ViewInfo.ONE_DAY, ViewInfo.TWO_DAYS, ViewInfo.ONE_WEEK, ViewInfo.TWO_WEEKS, or ViewInfo.ONE_MONTH. isToday public boolean isToday() Returns whether or not the day is the current day. isInTodaysMonth public boolean isInTodaysMonth() Returns whether or not the day is in the current month. 126 WebSphere Portal 4.12 Collaboration Services ColumnInfo ColumnInfo contains information about the columns in a Domino view. To create a ColumnInfo object, use DominoService.getViewInfo() to first create a ViewInfo and then use ViewInfo.getColumnInfo(). Note that the information returned is ready-made for presentation (for example, no special processing is necessary for hidden and response column information). getTitle public java.lang.String getTitle() Returns the title of the column. getWidthPercentage public int getWidthPercentage() Returns the width percentage of this column in the view (the column percentages returned add up to 100). isCategory public boolean isCategory() Returns whether or not this column is a category view. isShowTwistie public boolean isShowTwistie() Returns whether or not this column has the possibility of needing a twistie. Whether or not to show the twistie next to a row is governed by RowInfo.useTwistie. isIcon public boolean isIcon() Returns whether or not the data is this column is icon data. To form the gif to the icon, use the value returned by RowInfo.getValues() and construct the file name of the image. For example, if a value of 009 is returned by this method, the image name would be vwicn009.gif. Then, to construct a link in the UI, use a path such as /cs/images/vwicn009.gif where /cs/images is the directory where the view images are stored. CSCredentials getUserName public java.lang.String getUserName() Returns a string representing the user name in Distinguished Name format. Appendix A. Collaborative Components: classes/methods 127 getUserLoginName public java.lang.String getUserLoginName() Returns the login name for the currently logged in user. CSEnvironment CSEnvironment is the starting point to instantiate and use Lotus Collaborative Components. The first two lines of code needed to start using Collaborative Components are: ... CSEnvironment environ = CSEnvironment.getEnvironment(request); CSCredentials cred = environ.getCredentials(request); ... The getEnvironment method initializes Collaborative Components as follows: sets up the environment properties (for example, location of Lotus Collaborative servers); sets credentials for the logged-in user (using the HttpServletRequest); sets up resource strings (loads the appropriate CSRes properties file for the strings used by the person tag). The CSEnvironment object may also be used to retrieve information about the environment or logged-in user, or to retrieve the resources which you may wish to store, per locale, in the CSRes properties files. getEnvironment public static CSEnvironment getEnvironment(javax.servlet.http.HttpServletRequest request) This method gets the CSEnvironment - this is the starting point to use Lotus Collaborative Services. From here, getCredentials, getResources, getServers, etc. Note that you cannot use the CSEnvironment from an unsecured portlet/jsp. Refer to the code example in the CSEnvironment description. Parameters: request - must contain credentials for the user Returns: CSEnvironment from which CSCredentials may be obtained. getCredentials public CSCredentials getCredentials(javax.servlet.http.HttpServletRequest request) 128 WebSphere Portal 4.12 Collaboration Services This method gets the CSCredentials object that is required to instantiate the service objects. Refer to the code example in the CSEnvironment description. Parameters: request - CSCredentials is saved in the HttpSession Returns: CSCredentials, which may be used to instantiate service objects. public static CSCredentials getCredentials(java.lang.String userName, java.lang.String userPassword) This method is provided for use only when the credentials in the HttpServletRequest are not valid for the service object you wish to instantiate (atypical); for example, for LDAP functionality (in DominoService), when the LDAP directory is different from the WebSphere Portal directory. Parameters: userName - name of the user (prefer shortname) userPassword - password of the user Returns: CSCredentials, which may be used to instantiate service objects. getResources public java.util.ResourceBundle getResources(javax.servlet.http.HttpServletRequest request) This method returns the resources contained in the CSRes properties file (uses locale). Parameters: request - ResourceBundle is saved in the HttpSession Returns: java.util.ResourceBundle which contains locale-specific Strings that are appropriate for the current user's locale. isEnabled public boolean isEnabled(java.lang.String serverType) This method returns a boolean indicating whether or not the specified server type is available in the environment. Note: When running in a non-WP environment and specifying serverType CSEnvironment.CS_SERVER_WebSphere_PORTAL_EXTEND, this method always returns false. Parameters: Appendix A. Collaborative Components: classes/methods 129 serverType - One of the CSEnvironment server types (example: CSEnvironment.CS_SERVER_QuickPlace) Returns: True if the specified serverType is available, false otherwise. getServers public java.util.HashMap getServers(java.lang.String serverType) This method returns a HashMap containing properties for a specified server type in the environment. Index values in the HashMap are CSEnvironment.CS_PROP_ENABLED, CSEnvironment.CS_PROP_NUMSERVERS, "1."+CSEnvironment.CS_PROP_HOSTNAME, "1."+CS_PROP_PROTOCOL, "1."+CS_PROP_VERSION, "1."+CS_PROP_HOSTNAME, etc. Parameters: serverType - One of the CSEnvironment server types (example: CSEnvironment.CS_SERVER_QuickPlace) Returns: A HashMap containing properties for a specified server type in the environment. CSFactory The CSFactory object instantiates the Java service objects. The CSFactory has two methods (two different versions of getService). getService public static CSBaseService getService(CSCredentials cred, java.lang.String serviceType) Use this version of getService when you wish to use the Lotus Collaborative servers that are configured in the environment. Note: When using this version with CSFactory.DOMINO_SERVICE, this will create a DominoService object for the Domino Directory server. To create a DominoService object for another Domino server, use the other version of getService. Parameters: cred - may be obtained using CSEnvironment.getCredentials serviceType - may be one of: CSFactory.DOMINO_SERVICE, CSFactory.DISCOVERY_SERVER_SERVICE, CSFactory.QuickPlace_SERVICE, CSFactory.PERSON_SERVICE 130 WebSphere Portal 4.12 Collaboration Services getService public static CSBaseService getService(CSCredentials cred, java.lang.String serviceType, java.lang.String server, java.lang.String protocol) Use this version when you wish to specify the Lotus server to connect to (or if you wish to override the servers that are configured in the environment). Parameters: cred - may be obtained using CSEnvironment.getCredentials serviceType - may be one of: CSFactory.DOMINO_SERVICE, CSFactory.DISCOVERY_SERVER_SERVICE, CSFactory.QuickPlace_SERVICE, CSFactory.PERSON_SERVICE server - should be specified using the Internet name (example, myserver.mycompany.com) protocol - http (the default) or https. DiscoveryServerService The DiscoveryServerService object retrieves data from a Discovery Server. The DiscoveryServerService methods fall into the following categories: Search APIs. APIs that return URLs for use in your UI. APIs which return core Discovery Server objects from a Discovery Server. The following information presents examples of some common search queries for the Search APIs (that correspond to the options found in the K-map user interface): Searching for everything about a subject: To search for knowledge management, pass knowledge management OR knowledge* AND management* as the query to searchDocuments, searchPeople, searchCategories, and searchPlaces (if places are installed and configured with K-station). Searching for documents about a subject: To search for knowledge management, pass knowledge management OR knowledge* AND management* as the query to searchDocuments. Searching for documents authored by a specific person: Appendix A. Collaborative Components: classes/methods 131 To search for John Doe, pass [$UpdatedBy] CONTAINS John Doe as the query to searchDocuments. Searching for people by name: To search for John Doe, pass [fullname] CONTAINS John Doe as the query to searchPeople. Searching for people who know about a specific subject: To search for knowledge management, pass [AffinityPublishedLeaf] CONTAINS knowledge management OR knowledge* AND management* as the query to searchPeople. Searching for people whose Profile contains a specific piece of information: To search for knowledge management, pass knowledge management OR knowledge* AND management* as the query to searchPeople. Searching Categories for specific information: To search for knowledge management, pass knowledge management OR knowledge* AND management* as the query to searchCategories. These are methods you have in the DiscoveryServerService: init public void init(CSCredentials cred, java.lang.String server, java.lang.String protocol) Do not call the init() method; init is called internally by CSFactory as part of the getService. Specified by: init in interface CSBaseService getCursor public com.lotus.KDSAPI.KDSCursor getCursor() Returns the specified Discovery Server object. You must import com.lotus.KDSAPI.* in order to use this method. Refer to the Discovery Server javadoc for detailed information about this object. Returns: the specified Discovery Server object. getFTSearch public com.lotus.KDSAPI.KDSFTSearch getFTSearch() Returns the specified Discovery Server object. You must import com.lotus.KDSAPI.* in order to use this method. Refer to the Discovery Server javadoc for detailed information about this object. Returns: the specified Discovery Server object. getMetrics 132 WebSphere Portal 4.12 Collaboration Services public com.lotus.KDSAPI.KDSMetrics getMetrics() Returns the specified Discovery Server object. You must import com.lotus.KDSAPI.* in order to use this method. Refer to the Discovery Server javadoc for detailed information about this object. Note: This method is not supported with DS 1.1.x. It is supported with DS 2.0 (and kdsapi.jar, version 2.0). Returns: the specified Discovery Server object. getRepository public com.lotus.KDSAPI.KDSRepository getRepository() Returns the specified Discovery Server object. You must import com.lotus.KDSAPI.* in order to use this method. Refer to the Discovery Server javadoc for detailed information about this object. Returns:the specified Discovery Server object. getRepositoryInfo public com.lotus.KDSAPI.KDSRepositoryInfo getRepositoryInfo() Returns the specified Discovery Server object. You must import com.lotus.KDSAPI.* in order to use this method. Refer to the Discovery Server javadoc for detailed information about this object. Returns: the specified Discovery Server object. getTaxEdit public com.lotus.KDSAPI.KDSTaxEdit getTaxEdit() Returns the specified Discovery Server object. You must import com.lotus.KDSAPI.* in order to use this method. Refer to the Discovery Server javadoc for detailed information about this object. Note: To use this method with DS 1.1.x, the requesting user must have kmap editor or admin privileges. Returns: the specified Discovery Server object. cleanup public void cleanup() Always call the cleanup() method when finished with the Service object. This is important because if you do not clean up this object, you leave DIIOP connections open in your Domino Server. Specified by: cleanup in interface CSBaseService getProfileURL public java.lang.String getProfileURL(java.lang.String fullName) Returns the URL to the profile for a specified user. Appendix A. Collaborative Components: classes/methods 133 Note: It is recommended that you use the fully-qualified name (the fullName property from the findPeople results). Parameters: userName - String, name of the user Returns: the URL to the profile for a specified user. getKMapURL public java.lang.String getKMapURL() Returns the URL to the Discovery Server K-map UI. getProfileURL_DS11 public static java.lang.String getProfileURL_DS11(java.lang.String server, java.lang.String commonName) Returns the URL to the profile for a specified user in Discovery Server version 1.1 . This an optimized version (with minimal error checking) for use with Discovery Server 1.1 only. Parameters: server - String, The fully qualified domain name of the Discovery Server version 1.1 commonName - String, common name of the user Returns: the URL to the profile for a specified user. getKMapURL_DS11 public static java.lang.String getKMapURL_DS11(java.lang.String server) Returns the URL to the Discovery Server1.1 K-map UI. This an optimized version (with minimal error checking) for use with Discovery Server 1.1 only. Returns: the URL to the Discovery Server K-map UI. getDSControlCenterURL public java.lang.String getDSControlCenterURL() Returns: the URL to the Discovery Control Center UI. findPeople public java.util.HashMap[] findPeople(java.lang.String currentQuery, int start, int limit) Returns results from a specified people search. Parameters: currentQuery - String, contains query text to search on. Refer to the DiscoveryServerService class description for more details. 134 WebSphere Portal 4.12 Collaboration Services start - int, indicates the location (index) where the result set should begin. Start with 1. limit - int, number of results to return. Returns: HashMap array. Each element in the array contains a HashMap with the following information about each person who was found in the search: department (String), jobTitle (String), location (String), fullName (String), name (String), profile (String), summary (String), rank (Double). findPlaces public java.util.HashMap[] findPlaces(java.lang.String currentQuery, int start, int limit) Returns results from a specified place search. Parameters: currentQuery - String, contains query text to search on. Refer to the DiscoveryServerService class description for more details. start: - int, indicates the location (index) where the result set should begin. Start with 1. limit: - int, number of results to return. Returns: HashMap array. Each element in the array contains a HashMap with the following information about each place which was found in the search: description (String), name (String), owner (String), ID (String), URL (String), rank (Double). findDocuments public java.util.HashMap[] findDocuments(java.lang.String currentQuery, int start, int limit) Returns results from a specified document search. Parameters: currentQuery - String, contains query text to search on. Refer to the DiscoveryServerService class description for more details. start - int, indicates the location (index) where the result set should begin. Start with 1. limit - int, number of results to return. Returns: Appendix A. Collaborative Components: classes/methods 135 HashMap array. Each element in the array contains a HashMap with the following information about each document which was found in the search: modifiedDate (String), createDate (String), author (String), title (String), docType (String), URL (String), ID (String), summary (String), rank (Double). getDocsCreatedByUser public java.util.HashMap[] getDocsCreatedByUser(java.lang.String userName, java.lang.String currentQuery, int start, int limit) Returns information about the set of documents created by the specified user. Parameters: userName - String, name of the user currentQuery - String, contains query text to search on. Refer to the DiscoveryServerService class description for more details. start - int, indicates the location (index) where the result set should begin. Start with 1. limit - int, number of results to return. Returns: HashMap array. Each element in the array contains a HashMap with the following information about each document which was found in the search: createDate (String), title (String), URL (String), summary (String), rank (Double). DominoService DominoService retrieves data (and, in some cases, writes data) from (to) Domino databases. There are three types of DominoService methods: View Related (almost all methods use HTTP). These methods obtain information from views. All the view-related methods require you to create a ViewInfo object to access data. Example methods from ViewInfo are getColumnInfo, getRowInfo, getCalendarDayInfo. Directory Related (get lists of information, often using IIOP or Domino LDAP). For example, getServers, getDatabases, getEmailAddress, etc. Document Related (most methods use IIOP). For example, getDocumentInfo, createDatabase, createDocument, etc. init 136 WebSphere Portal 4.12 Collaboration Services public void init(CSCredentials cred, java.lang.String server, java.lang.String protocol) Do not call the init() method; init is called internally by CSFactory as part of the getService. Specified by: init in interface CSBaseService cleanup public void cleanup() Always call the cleanup() method when finished with the Service object. getSessionObject public lotus.domino.Session getSessionObject() Returns the Domino Java API Session object. Refer to the Domino Java API documentation for usage of this object. You must import lotus.domino.Session in order to use this method. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46 Returns: Domino Java Session object. getCompleteDatabases public java.lang.String[] getCompleteDatabases(java.lang.String templateFilter) Return a complete list of Domino database names and or directories on the given server. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46 Use DominoService.getDatabases if either (a) db filenames (nsf names) on the server can contain the ampersand (&) character, or (b) db file names or titles can contain the vertical bar (|) character, or (c) you are using the templateFilter option and you wish to consider templates with names containing R50 separate from those with names containing R60. Parameters: templateFilter - optional. Only databases with this template will be returned. Use null otherwise. Note that using this option with a String such as StdR50Disc (for Discussion dbs), will also return the dbs made with the R60 template (in this example StdR60Disc). Appendix A. Collaborative Components: classes/methods 137 Returns: String array with abc&xyz&xxxx.nsf|title as the value in each element where the ampersand (&) character is used to designate a directory name (that is, in this example, the database file name is abc\xyc\xxxx.nsf) and the vertical bar (|) character is used to separate the nsf file name from the database title. getDatabases public java.util.HashMap getDatabases(java.lang.String templateFilter, java.lang.String startDirectory) Return a list of Domino database names and directory names in the specified start directory. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46. Parameters: templateFilter - optional. Only databases with this template will be returned. Use null, otherwise. startDirectory - A subdirectory to start from - null indicates the top level directory. Returns: HashMap with database names as key and title as value. When the title returned does not end in .nsf, this indicates a database directory name. To traverse this directory, call this method again using that directory name for startDirectory. getQuickPlaceDatabases public java.lang.String[] getQuickPlaceDatabases() Returns the list of QuickPlace databases. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46. Returns: String array containing the names of the QuickPlace databases. getQuickPlaceComponents public java.lang.String[] getQuickPlaceComponents(java.lang.String database) Return a list of QuickPlace components in a QuickPlace. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46. Parameters: database - Full path of QuickPlace directory (example: QuickPlace\myQP) Returns: 138 WebSphere Portal 4.12 Collaboration Services Array of QuickPlace components (Home, Welcome, Calender...) getCompleteQuickPlaceComponents public java.lang.String getCompleteQuickPlaceComponents(java.lang.String database) Return a list of QuickPlace components in a QuickPlace. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46 Parameters: database - Full path of QuickPlace directory (example: QuickPlace\myQP) Returns: QuickPlace components (Home, Welcome, Calender...) getDatabaseViewsWithAliases public java.util.HashMap getDatabaseViewsWithAliases(java.lang.String dbName, boolean showHidden, boolean showCalendar) Return a list of views in a given Domino database. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46. Parameters: dbName - nsf name of the database to retrieve views from. Be sure to use either \\ or / between folder names. showHidden - if true, include views that are hidden. showCalendar - if true, include views that are calendar views. Returns: HashMap with view names as key and aliases as value. When there is more than one alias, vertical bars are used as separators. getDatabaseViews public java.util.HashMap getDatabaseViews(java.lang.String dbName) Return a list of views in a given Domino database. Return does not include hidden views and does return calendar views. Note that this method always returns null when the server is Domino version ViewInfo.DOMINO_46. Parameters: dbName - nsf name of the database to retrieve views from. Be sure to use either \\ or / between folder names. Returns: HashMap with view names as key and view unid as value. Appendix A. Collaborative Components: classes/methods 139 getServers public java.util.HashMap getServers() Returns a list of Domino servers in the domain which have the http-hostname attribute set. Returns: HashMap, where the key is the Domino server name (distinguished name) and the value is the host name (for example, name: CN = ecat-1, O = eCAT value: ecat-1.lotus.com). The fully qualified domain name of a network host, or its IP address as a set of four decimal digit groups separated by a dot (.). getDominoName public java.lang.String getDominoName(java.lang.String fullName) Converts a distinguished name into a Domino name (also referred to as the Abbreviated name). For example, OU=CAM,O=Lotus will be converted to /CAM/Lotus Note that this is simply a helper method—there is no LDAP query made. Parameters: fullName - The distinguished name (DN). Returns: String The Domino Name (Abbreviated format). getMailServerFile public java.lang.String[] getMailServerFile(java.lang.String userName) Returns the names of the Domino mail file and mail server for a valid user in the domain. Parameters: userName - The distinguished name (DN) or the Common Name (CN) of the user. If null is passed in, it will return the logged in user's mail server and file. Returns: String[] - The first entry in the array is the mail host name. The second entry in the array is the name of the mail file. getEmailAddress public java.lang.String getEmailAddress(java.lang.String userName) Returns the e-mail address of the user. Parameters: userName - The distinguished name (DN) or the Common Name (CN) of the user. If null is passed in, it will return the logged in user's e-mail address. 140 WebSphere Portal 4.12 Collaboration Services Returns: String - The Internet e-mail address of the user. getDistinguishedName public java.lang.String getDistinguishedName(java.lang.String userName) Returns the distinguished name of the user. Parameters: userName - The short name (uid) or the Common Name (CN) of the user. If null is passed in, it will return the logged in user's distinguished name. Returns: String - The comma-separated distinguished name of the user. getViewInfo public ViewInfo getViewInfo(java.lang.String dbName, java.lang.String viewName) Returns view information about a view, encapsulated in a ViewInfo object. Parameters: dbName - The nsf name of the database. Be sure to use either \\ or / between folder names. viewName - The name of the view (can be alias). Returns: a ViewInfo object containing information about the specified view. getDocumentInfo public java.util.HashMap getDocumentInfo(java.lang.String db, java.lang.String View, java.lang.String unid, java.lang.String[] fields) Returns values for fields in a document which are of type String. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46. Parameters: db - Full path of NSF file view - Not used view name of document to locate unid - Document unid fields - Array of field names Returns: Appendix A. Collaborative Components: classes/methods 141 name/value pairs of requested field names updateDocument public boolean updateDocument(java.lang.String db, java.lang.String view, java.lang.String unid, java.util.HashMap fields) Updates a document in the db. Where a field name is supplied that is not presently in the document, it creates the new field in the document. Note that this method uses DIIOP and always returns false when the server is Domino version ViewInfo.DOMINO_46. This method will only update fields of type String. Parameters: db - Full path of NSF file view - Not used view name of document to locate unid - Document unid fields - Array of field names. Only String Values allowed. Returns: True, if the document was successfully updated. deleteDocument public boolean deleteDocument(java.lang.String db, java.lang.String view, java.lang.String unid) Removes a document from the given database. Parameters: db - Full path of NSF file. view - Not used view name of document to locate. unid - Document unid. Returns: True, if the document was successfully deleted. createDocument public java.lang.String createDocument(java.lang.String db, java.util.HashMap fields) Creates a document in the db. Note that this method uses DIIOP and always returns null when the server is Domino version ViewInfo.DOMINO_46 Parameters: 142 WebSphere Portal 4.12 Collaboration Services db - Full path of NSF file. fields - Array of field names. Returns: String, UNID of the document or NULL if unable to create document. addACL public boolean addACL(java.lang.String db, java.lang.String aclName, int Acltype, int AclAccessLevel) Adds a single ACL to an existing database. Note: For R5 Domino versions, the Access Control property called Maximum Internet name & password (Advanced setting) must be manually set to Manager level before this method will work. For Domino versions >= 6, when using this method after a call to DominoService.createDatabase, this manual setting is not required (since the createDatabase method will automatically set this setting to Manager. Note that this method uses DIIOP and always returns false when the server is Domino version ViewInfo.DOMINO_46. Parameters: db - Full path of NSF file aclName - String name of acl. For a hierarchical name, the full name must be specified, but can be in Abbreviated format. Acltype - one of DOMINO defines ACLEntry (Ex ACLEntry.TYPE_MIXED_GROUP). TYPE_MIXED_GROUP TYPE_PERSON TYPE_PERSON_GROUP TYPE_SERVER TYPE_SERVER_GROUP TYPE_UNSPECIFIED AclAccessLevel - one of DOMINO defines ACL (Ex ACL.LEVEL_MANAGER) LEVEL_NOACCESS LEVEL_DEPOSITOR LEVEL_READER LEVEL_AUTHOR Appendix A. Collaborative Components: classes/methods 143 LEVEL_EDITOR LEVEL_DESIGNER LEVEL_MANAGER Returns: True, if successful; false otherwise. createDatabase public boolean createDatabase(java.lang.String db, java.lang.String title, java.lang.String template) Creates a new Domino database from a database template. Note that this method uses DIIOP and always returns false when the server is Domino version ViewInfo.DOMINO_46. Note also that the title will not be set on Domino versions < R6. Parameters: db - The name for the database (nsf file name) title - The title for the database (this part of the functionality does not work on Domino versions < 6). template - The template name for the database (ntf file name) Returns: True, if database was created or it existed; false otherwise. getOpenURL public java.lang.String getOpenURL(java.lang.String db, java.lang.String view, java.lang.String unid, boolean validate) Returns a URL to the specified document. Especially useful when server protocol is unknown. Parameters: db - The name for the database (nsf file name). view - String, the name of the view. unid - String, the UNID of the document (could be returned by RowInfo.getUNID or EntryInfo.getUNID). validate - Boolean, whether or not to check if the returned URL is valid. In most cases, use false here, since it is a significant performance hit to test this connection. 144 WebSphere Portal 4.12 Collaboration Services Note: With HTTPS, the test might fail even if the connection is, in fact, valid. Validation does not include an authorization check. Returns: A fully-formed URL to the Domino Open action for the specified document (or null if validate specified as true and the test connection failed). getEditURL public java.lang.String getEditURL(java.lang.String db, java.lang.String view, java.lang.String unid, boolean validate) Returns a URL to the specified document. Especially useful when the server protocol is unknown. Parameters: db - The name for the database (nsf file name). view - String, the name of the view. unid - String, the UNID of the document (could be returned by RowInfo.getUNID or EntryInfo.getUNID). validate - Boolean, whether or not to check if the returned URL is valid. In most cases, use false here since this is a significant performance hit to test this connection. Note: With HTTPS, the test might fail even if the connection is, in fact, valid. Validation does not include an authorization check. Returns: A fully-formed URL to the Domino Edit action for the specified document (or null if validate specified as true and the test connection failed). EntryInfo The EntryInfo encapsulates an entry in a calendar. To retrieve entries for a specific day in the calendar, first use ViewInfo.getCalendarDayInfo() to get a CalendarDayInfo for the day, and then use CalendarDayInfo.getEntryInfo() to get the set of entries (EntryInfos) for the day. getUNID public java.lang.String getUNID() Returns the universal ID of the document associated with this entry. Appendix A. Collaborative Components: classes/methods 145 getIconName public java.lang.String getIconName() Returns the name of the gif image that should be displayed with this entry. getValues public java.lang.String[] getValues() Returns a String array representing the values for the entry. Note that most, but not all, calendar database designs return the values in the following format: (0)date (always format "yyyy-MM-dd") (1)icon (2)starttime (3)separator (4)endtime (5)description getSummary public java.lang.String getSummary() This method is provided for convenient formatting of the values returned by getValues. Note that this method currently only supports the format MM/dd/yy. getAlt public java.lang.String getAlt() This method is provided for convenient formatting of a bubble help String for a calendar entry. Note that this method currently only supports the format MM/dd/yyyy hh:mm:s a. PeopleService PeopleService is an aggregation of all the information which Collaborative Components can retrieve about a person. This object currently uses DominoService and DiscoveryServerService. The difference between this service and the person tag (people.tld) is that this service is for programmatic access to the person information, whereas the person tag is a ready-made component for UI. Refer to the Overview section in this javadoc for more details about the person tag. init 146 WebSphere Portal 4.12 Collaboration Services public void init(CSCredentials cred, java.lang.String server, java.lang.String protocol) Do not call the init() method; init is called internally by CSFactory as part of the getService. Specified by: init in interface CSBaseService cleanup public void cleanup() Always call the cleanup() method when finished with the Service object. Specified by: cleanup in interface CSBaseService getPersonInfo public java.util.HashMap getPersonInfo(java.lang.String person) Returns information about a specified person. Parameters: person - String, name of the person (accepts common name or distinguished name format). Returns: HashMap. Keys are PeopleService.CS_PERSON_FULLNAME, PeopleService.CS_PERSON_EMAIL, PeopleService.CS_PERSON_DOMINONAME, PeopleService.CS_PERSON_DOMINOMAILSERVER, PeopleService.CS_PERSON_DOMINOMAILFILE, PeopleService.CS_PERSON_DEPARTMENT, PeopleService.CS_PERSON_JOBTITLE, PeopleService.CS_PERSON_LOCATION, PeopleService.CS_PERSON_PROFILEURL, PeopleService.CS_PERSON_SUMMARY. QPService An instance of class QPService creates one to many QuickPlaces on a specific server. Appendix A. Collaborative Components: classes/methods 147 init public void init(CSCredentials cred, java.lang.String server, java.lang.String protocol) Do not call the init() method; init is called internally by CSFactory as part of the getService. Specified by: init in interface CSBaseService cleanup public void cleanup() Always call the cleanup() method when finished with the Service object. Specified by: cleanup in interface CSBaseService create public java.lang.String create(java.util.Hashtable ht) Creates a QuickPlace on the remote server, and returns the URL that references it. This method uses just one parameter, a Hashtable, which holds parameter names and values. Only one parameter is required: QPName. You may add the following parameters to the Hashtable before each call. Add the attributes via the put and get methods. Example: qpObject.put("GroupManagerName","My Manager Name Group"). QPName (required) - String name of QuickPlace. Must be a legal QuickPlace name. QPTemplate (optional) - String name of the QuickPlace template that should be used to create the QuickPlace. QPDir (optional) - String directory to create the QuickPlace. Must be a legal file directory name. If null, then QPName is used to make a valid directory name. GroupManagerName (optional) - String name of LDAP group that the QuickPlace will use for Manager access . GroupAuthorName (optional) - String name of LDAP group that the QuickPlace will use for Author access. GroupMemberName (optional) - String name of LDAP group that the QuickPlace will use for Member access. Parameters: ht - Hashtable with parameters listed above. 148 WebSphere Portal 4.12 Collaboration Services Returns: String URL to the new QuickPlace. RowInfo RowInfo contains information about the rows in a Domino view (non-Calendar view). To create a RowInfo object, use DominoService.getViewInfo() to first create a ViewInfo, and then use ViewInfo.getRowInfo(). Note that the information returned is ready-made for presentation (for example, hidden and response column data does not have to be considered specially). getUNID public java.lang.String getUNID() Returns the universal ID of the document associated with this row. useTwistie public boolean useTwistie() Returns whether or not the document is a parent document and, therefore, should be presented with a twistie next to it. getIndentLevel public int getIndentLevel() Returns the zero-based index level of the row (relevant in hierarchical or categorized views only). getPositionString public java.lang.String getPositionString() Returns the position String for the row. This information is relevant when implementing paging and requesting groups of rows through ViewInfo.getRowInfo. getValues public java.lang.String[] getValues() Returns a String array representing the column values for the row. Note that the information returned is ready-made for presentation (for example, hidden and response columns do not have to be considered specially). ViewInfo A ViewInfo object is the first object to create in order to retrieve data from a Domino view (for all types of views, including calendar views). A ViewInfo object Appendix A. Collaborative Components: classes/methods 149 contains information about a Domino view, including view columns, rows, categories, and calendar days (where appropriate). To create a ViewInfo object, use DominoService.getViewInfo() with the names of the database and view specified. For example: ViewInfo vi = ds.getViewInfo("testmail.nsf", "($all)"); where ds is a DominoService object. getVersion public int getVersion() Returns the Domino version (simplified) of the data source server. Returns: A constant indicating the Domino version range of the data source server. For servers running 4.6, ViewInfo.DOMINO_46 is returned. For servers running R5.0 and up, ViewInfo.DOMINO_5PLUS is returned. When the version of the server cannot be determined (typically due to invalid credentials), getVersion returns 0. getProtocol public java.lang.String getProtocol() Returns http or https, depending on whether SSL is enabled for the data source. getViewCategories public java.lang.String[] getViewCategories() Returns the list of categories in a specified view. Returns the top level categories only. isCalendarView public int isCalendarView() Returns 1 if the view is a calendar view, 0 if the view is not a calendar view, and -1 if this information cannot be determined. getColumnInfo public ColumnInfo[] getColumnInfo() Returns column information about a view, encapsulated in an array of objects of type ColumnInfo. getRowInfo public RowInfo[] getRowInfo(java.lang.String startPosition, int count) 150 WebSphere Portal 4.12 Collaboration Services Returns row information about a view, encapsulated in an array of objects of type RowInfo. To display the first page of rows, use startPosition 1. To display the next page of rows, determine the position of the last row on the current page (using RowInfo.getStartPosition) and use that startPosition. Note that this “overlaps” the read by one row (be careful to trim off this duplicate row from the RowInfo[] set when displaying). To determine when you have reached the last page of row data, check to see if RowInfo.length retrieved is less than the count specified. Note: It is invalid to specify a starting row position that does not exist in the view. This is the basis of the requirement that you overlap the view reads. Parameters: startPosition - the position in the view to start from. count - the number of rows to return. getCalendarDayInfo public CalendarDayInfo[] getCalendarDayInfo(java.lang.String ISOdate, int grid) Returns the calendar data, for a specified period of time, relative to a specified ISO standard (yyyy-mm-dd) date. The information returned for the time periods starting with ViewInfo.ONE_WEEK (and greater) start with the preceding Monday and end with a Sunday. So if you ask for a Wednesday, for example, 2002-04-17, with a grid of ViewInfo.TWO_WEEKS, the information returned with be from 2002-04-15 (the Monday) through the following Sunday, 2002-04-28. Parameters: ISOdate - the start date, in the ISO standard format, yyyy-mm-dd. The default is today's date (use null). grid - amount of days to return: ViewInfo.ONE_DAY, ViewInfo.TWO_DAYS, ViewInfo.ONE_WEEK, ViewInfo.TWO_WEEKS, or ViewInfo.ONE_MONTH. If a value other than these is used, the default is ViewInfo.ONE_WEEK. Note: Use these ViewInfo constants (rather than 1, 2, 7, etc.). Appendix A. Collaborative Components: classes/methods 151 152 WebSphere Portal 4.12 Collaboration Services B Appendix B. Collaborative Components: tag libraries © Copyright IBM Corp. 2002. All rights reserved. 153 People Service tags The People Service tags generate a link menu allowing users to send e-mail to a named person. On Sametime-enabled systems, they provide online status, as well as the ability to chat and share applications. On Discovery Server-enabled systems, they provide the ability to show the expertise profile and to find documents authored by the named person. To use these tags within your JSP, add the following lines to your page: <%@taglib uri="/WEB-INF/tld/people.tld" prefix="peopleservice" %> <%@taglib uri="/WEB-INF/tld/menu.tld" prefix="menu" %> Note that the people tags have a dependency on the menu tags. The following tags are available: person Use this tag around each name to enable collaboration. Example: <peopleservice:person> Jonathan Harris </peopleservice:person> peopleinit Initializes the people tag functionality. Do not use this function inside a portlet as WebSphere Portal Server provides initialization and finalization for these tags. peopleend Finalizes the people tag functionality. Do not use this function inside a portlet. 154 WebSphere Portal 4.12 Collaboration Services Menu Library tags These tags allow developers to add pop-up menus to their Collaborative Components applications. The menu is a Java applet. To use these tags within your JSP, add the following line to your page. <%@taglib uri="/WEB-INF/tld/menu.tld" prefix="menu" %> The following tags are available: menuinit Initializes the menu tag functionality. Do not use this function inside a portlet, because the WebSphere Portal Server provides initialization for these tags. Attributes: none menucontext Begins the definition of one or more menus under a common context name. Attributes: – contextName The name for this menu context. The contextName parameter must be unique per portlet. menu Defines a menu. The tag must be nested within a menucontext tag. Attributes: – menuName The name of the menu. This attribute must be unique with a menu context. Pass this name to menudisplay to activate a menu. – menuID The ID of a menu. This attribute must be unique within a portal. menuitem Defines a menu item and its name, as well as the associated JavaScript callback function. Attributes: – itemName The text label for this selection in the menu. – callbackFn Appendix B. Collaborative Components: tag libraries 155 Specifies the JavaScript function to call when a user selects this menu item. – enable (optional) A boolean value that determines whether this menu item is enabled or greyed out. By specifying a JavaScript function instead of true or false, you can enable or disable the menu item dynamically through JavaScript. – show (optional) A boolean value which determines whether this menu item will be shown in the menu. Possible values are “true” and “false”. WebSphere evaluates this option during page generation. You cannot modify this value dynamically with JavaScript. menudisplay Activates and displays the specified menu. You can optionally pass parameters, which are then available to JavaScript functions as <context name>.<parameter name>. Attributes: – contextName Specifies the name of the menucontext tag that contains the menu. – menuName Specifies the name of the menu. – paramName (optional) Specifies the name of a parameter placed in the JavaScript environment. You must specify a paramValue attribute to define the value for this parameter. – paramValue (optional) Sets the value of a parameter. This tag must follow a paramName attribute to specify the name of a parameter. 156 WebSphere Portal 4.12 Collaboration Services C Appendix C. Additional material This Redpaper refers to additional material that can be downloaded from the Internet as described below. Locating the Web material The Web material associated with this Redpaper is available in softcopy on the Internet from the IBM Redbooks Web server. Point your Web browser to: ftp://www.redbooks.ibm.com/redbooks/REDP0319 Alternatively, you can go to the IBM Redbooks Web site at: ibm.com/redbooks Select the Additional materials and open the directory that corresponds with the redbook form number, REDP0319. Using the Web material The additional Web material that accompanies this Redpaper includes the following files: File name collabportletsamples.zip © Copyright IBM Corp. 2002. All rights reserved. Description Zipped Portlet Samples 157 158 WebSphere Portal 4.12 Collaboration Services Related publications The publications listed in this section are considered particularly suitable for a more detailed discussion of the various topics covered in this Redpaper. Related IBM Redbooks/Redpapers WebSphere Portal V4.1 Windows 2000 Installation, REDP3593 WebSphere Portal V4.1 AIX 5L Installation, REDP3594 WebSphere Portal V4.12 in a Linux Environment, REDP0310 WebSphere 4.0 Advanced Scalability and Availability, SG24-6192 WebSphere 4.0 Commerce Suite Handbook, SG24-6167 Working with the Sametime Client Toolkits, SG24-6666 Domino and WebSphere Together Second Edition, SG24-5955 Enterprise Business Portals with IBM Tivoli Access Manager, SG24-6556 For information on ordering these publications, see “How to get IBM Redbooks” on page 160. Product documentation WebSphere Portal Library A consolidated list of all product documentation, and other Portal-related documentation sources. http://www-3.ibm.com/software/webservers/portal/library.html. WebSphere Portal Infocenter The InfoCenter is the main location for all product documentation, such as installation instructions, usage instructions, troubleshooting, etc. http://www7b.software.ibm.com/wsdd/zones/portal/V41InfoCenter/ WebSphere Portlet API JavaDocs Contains the Java documentation for the general portlet API classes/methods/etc. http://www7b.software.ibm.com/wsdd/zones/portal/portlet/4.1api/l © Copyright IBM Corp. 2002. All rights reserved. 159 Note: The JavaDocs for the Collaborative Components API are not available online. They can be viewed after installation as described in 2.7.1, “Key files” on page 36. Referenced Web sites These Web sites are also relevant as further information sources: IBM WebSphere Portal Zone Technical information for developers and administrators of WebSphere Portal http://www7b.software.ibm.com/wsdd/zones/portal/ IBM WebSphere Developer Domain Technical information for developers and administrators of general WebSphere applications http://www7b.boulder.ibm.com/wsdd/ Lotus Developer Domain Technical information for developers and administrators of Lotus advanced collaboration technologies http://www.lotus.com/ldd How to get IBM Redbooks You can order hardcopy Redbooks, as well as view, download, or search for Redbooks at the following Web site: ibm.com/redbooks You can also download additional materials (code samples or diskette/CD-ROM images) from that site. IBM Redbooks collections Redbooks are also available on CD-ROMs. Click the CD-ROMs button on the Redbooks Web site for information about all the CD-ROMs offered, as well as updates and formats. 160 WebSphere Portal 4.12 Collaboration Services Back cover WebSphere Portal 4.12 Collaboration Services Hints and Tips for performing a successful installation Use of the Collaborative Components API and tags Sample collaborative portlets The WebSphere Portal Family consists of three packaged offerings: the Portal Enable offering is the base offering; Portal Extend and Portal Experience add more functionality. WebSphere Portal Extend allows your portal users to act on information and applications via collaboration with other portal users. This Redpaper discusses the collaborative capabilities included in the WebSphere Portal Extend v4.12 offering. It covers an introduction to the WebSphere Portal Family and the concept of Collaborative Portlets; installation and deployment-oriented topics for getting a Collaborative Portal Extend environment up and running; details about the Collaborative Portlets available out-of-the-box with Portal Extend; and best practices for the use of the Collaborative Components API available with Portal Extend, including several sample Collaborative Portlets that leverage this API. This Redpaper is primarily intended for technologists involved with collaborative WebSphere Portal projects. However, the introductory content in each chapter may be useful to managers who are responsible for such projects. ® Redpaper INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment. For more information: ibm.com/redbooks