Exemples d'accés a Alfresco mitjançant JCR

Introducció

Basant-nos en un nou projecte Maven, anomenat "JCR01", per defecte creat amb NetBeans IDE 6.7.1; es crearà un "JSF Managed Bean" que implementarà l'accés a Alfresco mitjançant JCR i que es provarà posteriorment des de una "JSF JSP Page".

WEB-INF\faces-config.xml

Per tal de crear el "JSF Managed Bean", prèviament, ha d'existir el fitxer de configuració "faces-config.xml":

A JCR01-web (war), entrem a Web Pages i ens posicionem a WEB-INF

botó dret, new->Other...->XML->XML Document

File name:faces-config.xml (Well-formed Document)

Un cop creat, l'editem i afegim la següent informació:

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
</faces-config>

Exemple 1: El més bàsic

New->Other...->JavaServer Faces->JSF Managed Bean

Class Name: JcrBasicJSFManagedBean

Codi:

/** 'JSF Managed Bean' created viaCreated via:
 * JavaServer Faces -> JSF Managed Bean (modifies faces-config.xml)
 */
package dom;
import javax.annotation.Resource;
import javax.jcr.LoginException;
import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
public class JcrBasicJSFManagedBean {
    @Resource(mappedName = "jcr/Alfresco", type = javax.jcr.Repository.class)
    private Repository rep;
    public String getFirstHop() throws LoginException, RepositoryException, InterruptedException {
        String ret = "unInitialized";
        //On Jackrabbit, the anonymous 'user' has read-only permissions. Any another dummy 'user' would do.
        Session session = rep.login(new SimpleCredentials("admin", "ibermatica".toCharArray()), null);
        try {
            Node root = session.getRootNode();
            // Store content
            Node hello = root.addNode("hola");
            Node world = hello.addNode("mundo");
            world.setProperty("message", "Hola, Mundo!");
            session.save();
            Thread.sleep(1000);
            // Retrieve content
            Node node = root.getNode("hola/mundo");
            ret = "node=" + node.getPath() + "    message=" + node.getProperty("message").getString();
            // Remove content
            root.getNode("hola").remove();
            session.save();
        } finally {
            session.logout();
        }
        return (ret);
    }
}

S'afegeix com a dependència "provided" la biblioteca "javax.jcr" que conté les interfaces Java Content Repository:

Ara que ja es té el Bean, es crea el JSF que el farà servir, amb el nom "JcrBasicJsp".

Nota: Si ens dóna l'error "The absolute uri: http://java.sun.com/jsf/core cannot be resolved in either web.xml or the jar files deployed with this application" a la línia "<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>" llavors editem el pom.xml i afegim les dependències:

        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>1.2-b19</version>
            <scope>provided</scope>
        </dependency>

Modifiquem web.xml que ens quedarà de la següent manera:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>JCR01-web</display-name>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <context-param>
        <param-name>com.sun.faces.verifyObjects</param-name>
        <param-value>false</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.validateXml</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>faces/JcrBasicJsp.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Nota: Cal dir que per activar el context definit per a "Faces Servlet" és /faces/*;

per tant, hem d'executar el nostre JSF accedint amb l'URL <project>/faces/<el nostre jsf>.jsp.

És per això que a web.xml, apareix "faces/JcrBasicJsp.jsp" (el nostre JSF) com a welcome-file.

Exemple 2: <<title>>