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>>