• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Integrating Alfresco with Portals
 

Integrating Alfresco with Portals

on

  • 1,286 views

An overview about some of the possible ways to implement Portlets for integrating Alfresco in your own portal.

An overview about some of the possible ways to implement Portlets for integrating Alfresco in your own portal.

Statistics

Views

Total Views
1,286
Views on SlideShare
1,106
Embed Views
180

Actions

Likes
3
Downloads
34
Comments
0

2 Embeds 180

http://www.open4dev.com 179
https://translate.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Integrating Alfresco with Portals Integrating Alfresco with Portals Presentation Transcript

    • Integrating Alfresco with portals 6th November 2013 Piergiorgio Lucidi #SummitNow
    • Piergiorgio Lucidi • • • • • • Open Source ECM Specialist at Sourcesense Alfresco Trainer / Engineer / Wiki Gardener / Star Alfresco Global Moderator of the italian forum Author / Technical Reviewer at Packt Publishing PMC Member / Mentor at Apache Software Foundation Project Leader in the JBoss Community #SummitNow #SummitNow
    • Overview • Introducing portals • Introducing standard portlets • Implementing portlets • Alfresco Web Services API • Spring WebScripts • OpenCMIS • Spring Surf #SummitNow #SummitNow
    • Overview • Introducing portals • Introducing standard portlets • Implementing portlets • Alfresco Web Services API • Spring WebScripts • OpenCMIS • Spring Surf #SummitNow #SummitNow
    • Introducing portals An overview about the basics and the standards of portals #SummitNow #SummitNow
    • What is a portal? A portal is a web application focused on • Creating dynamic website • Page-centric approach • Aggregation of contents • Enterprise Services #SummitNow #SummitNow
    • What is a portal? A portal is a web application focused on • Creating dynamic website • user oriented and extremely dynamic fragments • Page-centric approach • Aggregation of contents • Enterprise Services #SummitNow #SummitNow
    • What is a portal? A portal is a web application focused on • Creating dynamic website • Page-centric approach • Each page hosts presentation layer apps • Portlets • Apps (wrapping using bridge framework) • Gadgets (based on XML and JavaScript) • Aggregation of contents • Enterprise Services #SummitNow #SummitNow
    • What is a portal? A portal is a web application focused on • Creating dynamic website • Page-centric approach • Aggregation of contents • Enterprise Services #SummitNow #SummitNow
    • What is a portal? A portal is a web application focused on • Creating dynamic website • Page-centric approach • Aggregation of contents • Enterprise Services • • • • • Authentication Authorization Personalization Export / Import APIs for integrations #SummitNow #SummitNow
    • What is a portal? #SummitNow #SummitNow
    • What is a portal? A portlet is an application that contains specific business logic • Provides a fragment of content • The output depends on user permissions • Potentially the fragment could be dynamic for each user • A permission can be given for • The entire portal • Page • Portlet #SummitNow #SummitNow
    • What is a portal? An app is a wrapper of a portlet and it can be implemented using • • • • • • • Pure Java JSF Spring MVC Spring WebScripts GWT Struts So on… #SummitNow #SummitNow
    • What is a portal? – User roles #SummitNow #SummitNow
    • What is a portlet container? A portlet container is a runtime framework • Manages the execution of portlet requests • Provides user session mechanism • Check permissions for different scope levels • Portal • Page • Portlet • Implements JSR-286 Java Portlet Specification 2.0 • Can be embedded in any JEE application • Portlet requests can be executed against non-web contexts • The web context is a detail! #SummitNow #SummitNow
    • What is a portlet container? Portal A Portal B Portal C • Portlet 1 • Portlet 2 • Portlet 3 • Portlet 4 • Portlet 5 • Portlet 6 #SummitNow #SummitNow
    • Why use a portal? You may want a portal for • Creating custom and dynamic websites • Providing personalized contents • Providing features for personalizing sections • Integrating different systems with a unique frontend • Providing valuable services for your customers/users • Private access • Profiled informations • E-commerce • Advanced editing • Enterprise Content Management (ECM) #SummitNow #SummitNow
    • Why use a portal with Alfresco Portal aggregates corporate apps and contents Agile development Decoupling responsabilities Fragments can be managed by Alfresco • Records Management • Content and Document Management • Web Publishing • BPM The portal is responsible for presentation • Portlets will present contents managed by Alfresco Portlets are based on Enterprise Java standards!!! #SummitNow #SummitNow
    • What is a dashboard? #SummitNow #SummitNow
    • How a portal works The portlet container (PC) retrieves the portlet deployment descriptor (PDD) from all the applications deployed in the Java container (JSE or JEE) • web-app.war • WEB-INF • portlet.xml • web.xml • Deployment Descriptors (DD) are used in many Enterprise Java components #SummitNow #SummitNow
    • Overview • Introducing portals • Developing standard portlets • Implementing portlets • Alfresco Web Services API • Spring WebScripts • OpenCMIS • Spring Surf #SummitNow #SummitNow
    • Developing standard portlets A quick tour about how to implement standard portlets #SummitNow #SummitNow
    • Developing standard portlets You can use the GenericPortlet abstract class for overriding the following methods: • • • • • • • processAction doView doEdit doHelp doHeaders init destroy #SummitNow #SummitNow
    • Standard portlets – Demo #SummitNow #SummitNow
    • Overview • Introducing portals • Developing standard portlets • Implementing portlets • Alfresco Web Services API • Spring WebScripts • OpenCMIS • Spring Surf #SummitNow #SummitNow
    • Portlets with Alfresco WS API A quick tour about how to implement portlets invoking Alfresco with Web Services API (SOAP) #SummitNow #SummitNow
    • Web Services API - Services • • • • • • • • • Authentication: login and logout Repository: query and model manipulation Content: content manipulation Authoring: collaborative content creation Classification: apply classifications and categories Access Control: roles, permissions & ownership Action: manages actions and rules Administration: user management, export & import Dictionary: model descriptions #SummitNow #SummitNow
    • Content Manipulation Language #SummitNow #SummitNow
    • Web Services API - Search The only query language supported is Lucene Notice that use have to use the RepositoryService to search contents: there is no SearchService -> Query method #SummitNow #SummitNow
    • Search portlet – iterating results #SummitNow #SummitNow
    • Search portlet #SummitNow #SummitNow
    • Overview • Introducing portals • Developing standard portlets • Implementing portlets • Alfresco Web Services API • Spring WebScripts • OpenCMIS • Spring Surf #SummitNow #SummitNow
    • Portlets with Spring WebScripts A quick tour about how to implement portlets exposing your WebScripts in the portlet descriptor of Alfresco #SummitNow #SummitNow
    • Spring WebScripts Alfresco Web Scripts use a lightweight Model View Controller (MVC) style framework. #SummitNow #SummitNow
    • Components of a WebScript There are 3 main components of a web script: • Descriptor • Controller (optional if exists an FTL template) • JavaScript server side (Mozilla Rhino) • Subgroup of the Java API • You can extend it!!! • Template • FTL (optional if request and response are managed by Java) • Java Action (AbstractWebScript) #SummitNow #SummitNow
    • WebScript Descriptor The descriptor file uses the following naming convention which provides additional information to Alfresco: helloworld.get.desc.xml The content of the descriptor file: #SummitNow #SummitNow
    • WebScript Controller The controller script is an optional component written in JavaScript or Java, which does the actual work. #SummitNow #SummitNow
    • WebScript Template The WebScript template is the output template for displaying the content to user agents or applications. The output format can be based on many formats: • HTML • ATOM • XML • RSS #SummitNow #SummitNow
    • WebScriptPortlet Wrapper for exposing a WebScript as a portlet, you need to set these two parameters: • scriptUrl • The URL exposed by the involved WebScript • Authenticator factory • jsr168.webclient • Based on cookie • Jsr168 • Based on the portal session #SummitNow #SummitNow
    • WebScriptPortlet - Descriptor #SummitNow #SummitNow
    • WebScriptPortlet – Search The search object is exposed for executing queries: For XPath expression use ISO9075 to encode paths var luceneQuery = “PATH:”/app:company_home/cm:”+search.ISO9075(“Books tore orders”)+”/*””; var ordersResults = search.luceneSearch(luceneQuery); model.results = ordersResults; #SummitNow #SummitNow
    • WebScriptPortlet – Get details var id = args.id; if(id!=null && id!=“”){ var node = utils.getNodeFromString(id); model.node = node; } else { status.code = 400; status.message = “id must be not null"; status.redirect = true; } #SummitNow #SummitNow
    • WebScriptPortlet – Demo #SummitNow #SummitNow
    • Overview • Introducing portals • Developing standard portlets • Implementing portlets • Alfresco Web Services API • Spring WebScripts • OpenCMIS • Spring Surf #SummitNow #SummitNow
    • Portlets with OpenCMIS A quick tour about how to implement portlets using OpenCMIS #SummitNow #SummitNow
    • CMIS – Domain Model Data Model Repository Object CMIS Query Associated services Common elements Repository services Navigation services Object Services Multi-filing services Discovery, versioning, relationship, policy and ACL services #SummitNow #SummitNow
    • OpenCMIS – Repository • Contains set of data entities • getRepositories() for given endpoint • get repository capabilities #SummitNow #SummitNow
    • OpenCMIS – Object • Used to model typed objects • Four base types: • Document Object • Folder Object • Relationship object • Policy object • Object ID • Object properties • Version, ACL • Content Stream • Renditions #SummitNow #SummitNow
    • OpenCMIS – Services Repository services: used to discover information about the repository Navigation services: used to traverse the CMIS repository folder hierarchy Objects services: used to manipulate the repository contents with a CRUD interface Discovery services: used to search for query-able objects within repository #SummitNow #SummitNow
    • OpenCMIS Client API • Client-side Java library that implements the CMIS specification • object-oriented way • AtomPub or SOAP protocols • Binding selected with getRepositories() method on SessionFactory object #SummitNow #SummitNow
    • OpenCMIS Client API AtomPub //AtomPub binding // default factory implementation SessionFactory factory = SessionFactoryImpl.newInstance(); Map<String, String> parameter = new HashMap<String, String>(); // user credentials parameter.put(SessionParameter.USER, "admin"); parameter.put(SessionParameter.PASSWORD, "admin"); // connection settings parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); parameter.put(SessionParameter. ATOMPUB_URL, "http://cmis.alfresco.com/cmisatom"); parameter.put(SessionParameter.REPOSITORY_ID, "84ccfe80-b325-4d79-ab4d-080a4bdd045b") // create session Session session = factory.createSession(parameter); #SummitNow #SummitNow
    • OpenCMIS Client API - Search String myType = "my:documentType"; // get the query name of cmis:objectId ObjectType type = session.getTypeDefinition(myType); PropertyDefinition<?> objectIdPropDef = type.getPropertyDefinitions().get(PropertyIds.OBJECT_ID); String objectIdQueryName = objectIdPropDef.getQueryName(); String queryString = "SELECT " + objectIdQueryName + " FROM " + type.getQueryName(); // execute query ItemIterable<QueryResult> results = session.query(queryString, false); for (QueryResult qResult : results) { String objectId = qResult.getPropertyValueByQueryName(objectIdQueryName); Document doc = (Document) session.getObject(session.createObjectId(objectId)); } #SummitNow #SummitNow
    • OpenCMIS - Demo #SummitNow #SummitNow
    • Overview • Introducing portals • Developing standard portlets • Implementing portlets • Alfresco Web Services API • Spring WebScripts • OpenCMIS • Spring Surf #SummitNow #SummitNow
    • Portlets with Spring Surf A quick tour about how to implement portlets exposing your Surf components #SummitNow #SummitNow
    • Spring Surf • MVC framework • Scriptable • RESTful • Page-centric • Page • Components • Embeds Spring WebScripts #SummitNow #SummitNow
    • Spring Surf – Process loading #SummitNow #SummitNow
    • Spring Surf – Regions #SummitNow #SummitNow
    • ProxyPortlet • Allows to expose as a portlet any bits of Share • scriptUrl • Page • Component / WebScript • Each WebScript inside Share is a Presentation WebScript that needs to invoke against the repo: • a Data WebScript • CMIS AtomPub binding #SummitNow #SummitNow
    • ProxyPortlet – How it works 1. 2. 3. 4. 5. 6. 7. 8. 9. The portal starts to render the portlet page Share starts to render the Surf page (only 1 component) Share starts to render the component Share invokes Alfresco using REST calls Share connector get the user session from request.getRemoteUser() and set the user as authenticated in Alfresco (external authentication) Alfresco executes the WebScripts The returned JSON will be parsed by Share to render the FTL template for the portlet Share ends to render the Surf page The portal finishes to render the portlet #SummitNow #SummitNow
    • ProxyPortlet – Search #SummitNow #SummitNow
    • Thank you @pjlucidi p.lucidi@sourcesense.com #SummitNow #SummitNow
    • #SummitNow