He estado buscando alguna opción de Liferay que me permita crear varios usuarios a la vez... pero no tuve éxito. Pensé (y hasta pregunté en el foro de liferay.com) si se podÃa modificar directamente la base de datos. Pero como es un sistema complejo, hacer esto podrÃa malograr el sistema.
Entonces pensé que deberÃa haber otra solución utilizando el API de Liferay. Al final de todo, es una plataforma, y deberÃa existir un API completo para ello.
Bien, el API existe, pero la documentación es bastante pobre (solo echarle un vistazo al javadoc http://docs.liferay.com/portal/6.0/javadocs/ no tiene ni una descripción de alguna clase.. al menos sirve para saber qué clases tiene el API)
Encontré en el wiki de Liferay sobre el desarrollo de extensiones para el Portal, y este me pareció interesante: http://www.liferay.com/community/wiki/-/wiki/Main/Portal+Hook+Plugins. Habla de manera general para qué sirven los Hooks dentro de Liferay y muestran algunos ejemplos.
En lÃneas generales, los hooks son complementos que modifican el comportamiento del liferay. Hay de tres tipos:
En varios tutoriales explican que deberÃa bajarse el Kit de desarrollo (SDK) de Complementos de Liferay. Pero no se preocupen, NetBeans con el PortalPack ya nos ahorra bastante este trabajo. Asà que manos a la obra.
Luego, escogemos el tipo de servidor que queremos utilizar. Naturalmente debemos escoger el Liferay, ya que con esto el NetBeans nos agregará las bibliotecas necesarias para nuestro proyecto.
Y en este paso, hacer clic en "Finish" sin crear ningún portlet.. porque lo que vamos a hacer es un Complemento Hook, no un Portlet.
Después de hacer clic en "Next", especificamos qué tipo de Hook es el que vamos a crear. Como queremos que se ejecute al inicio del Portal, seleccionamos en "Event Type" el valor "application.startup.events". El nombre de la clase será
Clic en Finish y listo.. ya tenemos nuestra clase en blanco listo para llenar.
Por si causa confusión donde encontrar el ejemplo exacto, el código fuente del Hook son los siguientes:
El código es bastante entendible. Basta entender las variables utilizadas. Aquà muestro mi código que es compatible con Liferay 6
La diferencia con Liferay 5, es que en el 6 hay un nuevo parámetro llamado facebookId. Todos los demás campos son iguales. Asà que considere esta caracterÃstica cuando hagas un Hook de crear usuarios en Liferay 5 o 6.
Y aquà vemos la organización creada...
Y el usuario creado...
Para crear varios usuarios, bastará con repetir la misma operación con cada uno de ellos. O si se desea importar de una tabla preexistente, consideren hacer una conexión por JDBC a la base de datos donde se tienen los usuarios a cargar, y dentro de un
Hay dos maneras para desplegarlo en un servidor en producción. Una es utilizando el ControlPanel de Liferay y utilizar la opción "Instalar complemento", seleccionamos el archivo .war e instalarlo.
La otra es copiar el archivo .war en el directorio
http://kenai.com/projects/apuntes/downloads/download/ejemplos%252Fliferay%252FCrearUsuarios-hook.tar.gz
¡Que les sea de utilidad!
Entonces pensé que deberÃa haber otra solución utilizando el API de Liferay. Al final de todo, es una plataforma, y deberÃa existir un API completo para ello.
Bien, el API existe, pero la documentación es bastante pobre (solo echarle un vistazo al javadoc http://docs.liferay.com/portal/6.0/javadocs/ no tiene ni una descripción de alguna clase.. al menos sirve para saber qué clases tiene el API)
Encontré en el wiki de Liferay sobre el desarrollo de extensiones para el Portal, y este me pareció interesante: http://www.liferay.com/community/wiki/-/wiki/Main/Portal+Hook+Plugins. Habla de manera general para qué sirven los Hooks dentro de Liferay y muestran algunos ejemplos.
En lÃneas generales, los hooks son complementos que modifican el comportamiento del liferay. Hay de tres tipos:
- Los que se ejecutan al inicio del portal
- Los eventos de inicio de sesión, y
- Los eventos de servicios.
En varios tutoriales explican que deberÃa bajarse el Kit de desarrollo (SDK) de Complementos de Liferay. Pero no se preocupen, NetBeans con el PortalPack ya nos ahorra bastante este trabajo. Asà que manos a la obra.
Requisitos
Para este tutorial utilicé lo siguiente:- NetBeans 6.9.1 con JDK 6.0u21
- PortalPack 3.0.4 (Descargable desde aquÃ: http://contrib.netbeans.org/portalpack/pp30/download304.html)
- Liferay 6.0.5 en Tomcat 6.0 (Descargable desde aquÃ: http://sourceforge.net/projects/lportal/files/Liferay%20Portal/6.0.5/liferay-portal-tomcat-6.0.5.zip/download)
Creando el proyecto Hook
La creación de un proyecto hook en NetBeans es bien simple: consiste en crear un proyecto web común y corriente. A este le llamaremos "CrearUsuarios-hook"Luego, escogemos el tipo de servidor que queremos utilizar. Naturalmente debemos escoger el Liferay, ya que con esto el NetBeans nos agregará las bibliotecas necesarias para nuestro proyecto.
Y en este paso, hacer clic en "Finish" sin crear ningún portlet.. porque lo que vamos a hacer es un Complemento Hook, no un Portlet.
Creando el complemento Hook
Bien, hasta ahora solo hemos creado el espacio de trabajo. Ahora crearemos el Hook como si fuera un archivo más. Entramos a File > New File y seleccionamos en la categorÃa "WebSpace/Liferay Plugins" el tipo de archivo "Hook Plugin"Después de hacer clic en "Next", especificamos qué tipo de Hook es el que vamos a crear. Como queremos que se ejecute al inicio del Portal, seleccionamos en "Event Type" el valor "application.startup.events". El nombre de la clase será
CrearUsuariosHookAction
en el paquete hook
. Clic en Finish y listo.. ya tenemos nuestra clase en blanco listo para llenar.
Registrando los usuarios
Como les comenté al inicio, la documentación es bastante pobre. Creo que es por la cantidad de clases que contiene. Pero no hay problema. Ya existe un ejemplo (también, sin documentación) de cómo utilizar el API de Liferay. Su nombre essevencogs-hook
y está disponible en la página del proyecto Liferay en sourceforge.net. Aquà están los archivos:- Ejemplo para Liferay 5.2.x: http://sourceforge.net/projects/lportal/files/Liferay%20Plugins/5.2.2/sevencogs-hook-5.2.2.1.war/download
- Ejemplo para Liferay 6.0.x: http://sourceforge.net/projects/lportal/files/Liferay%20Plugins/6.0.5/sevencogs-hook-6.0.5.1.war/download
Por si causa confusión donde encontrar el ejemplo exacto, el código fuente del Hook son los siguientes:
- Versión 5.2: http://kenai.com/projects/apuntes/downloads/download/ejemplos%252Fliferay%252FStartupAction.java
- Versión 6.0: http://kenai.com/projects/apuntes/downloads/download/ejemplos%252Fliferay%252FUpgradeCompany.java
El código es bastante entendible. Basta entender las variables utilizadas. Aquà muestro mi código que es compatible con Liferay 6
private void doRun(long companyId) {
try {
String firstName = "Diego";
String lastName = "Silva";
boolean male = true;
String jobTitle = "Consultor Java";
String screenName = "diego.silva";
long creatorUserId = 0;
long facebookId = 0;
boolean autoPassword = false;
String password1 = screenName;
String password2 = password1;
boolean autoScreenName = false;
String emailAddress = screenName + "@apuntesdejava.com";
String openId = StringPool.BLANK;
Locale locale = new Locale("ES", "PE");
String middleName = StringPool.BLANK;
int prefixId = 0;
int suffixId = 0;
int birthdayMonth = Calendar.MARCH;
int birthdayDay = 27;
int birthdayYear = 1976;
Country country = CountryServiceUtil.getCountryByA2("PE");
long countryId = country.getCountryId();
long regionId = 0;
Group guestGroup = GroupLocalServiceUtil.getGroup(companyId, GroupConstants.GUEST);
long[] groupIds = new long[]{guestGroup.getGroupId()};
long[] userGroupIds = null;
boolean sendEmail = false;
Role adminRole = RoleLocalServiceUtil.getRole(
companyId, RoleConstants.ADMINISTRATOR);
Role powerUserRole = RoleLocalServiceUtil.getRole(
companyId, RoleConstants.POWER_USER);
long[] roleIds = new long[]{
adminRole.getRoleId(), powerUserRole.getRoleId()
};
int statusId = GetterUtil.getInteger(PropsUtil.get("sql.data.com.liferay.portal.model.ListType.organization.status"));
String comments = null;
ServiceContext serviceContext = null;
System.out.print("Creando organización...");
//creando la organización
long userId=UserLocalServiceUtil.getDefaultUserId(companyId);
long parentOrganizationId =
OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID;
boolean recursable = true;
Organization apuntesOrganization = OrganizationLocalServiceUtil.addOrganization(userId, parentOrganizationId, "Apuntes de Java",
OrganizationConstants.TYPE_REGULAR_ORGANIZATION,
recursable, regionId, countryId, statusId,
comments, serviceContext);
long[] organizationIds = new long[]{apuntesOrganization.getOrganizationId()};
System.out.println("... registrado con ID:"+apuntesOrganization.getOrganizationId());
//registrando el usuario
System.out.print("Creando usuario...");
User user = UserLocalServiceUtil.addUser(creatorUserId, companyId,
autoPassword, password1, password2,
autoScreenName, screenName, emailAddress, facebookId,
openId, locale,
firstName, middleName, lastName,
prefixId, suffixId, male, birthdayMonth,
birthdayDay, birthdayYear,
jobTitle, groupIds, organizationIds,
roleIds, userGroupIds, sendEmail, serviceContext);
System.out.println("... creado con ID:"+user.getUserId());
} catch (PortalException ex) {
LOGGER.log(Level.SEVERE, null, ex);
} catch (SystemException ex) {
LOGGER.log(Level.SEVERE, null, ex);
}
}
Aquà se ve que se ha creado una organización nueva llamada "Apuntes de Java" y el usuario que es perteneciente a ella.La diferencia con Liferay 5, es que en el 6 hay un nuevo parámetro llamado facebookId. Todos los demás campos son iguales. Asà que considere esta caracterÃstica cuando hagas un Hook de crear usuarios en Liferay 5 o 6.
Ejecutando el proyecto
Desde nuestro IDE bastará con ejecutar el proyecto y esperar que se despliegue en el servidor local.Y aquà vemos la organización creada...
Y el usuario creado...
Para crear varios usuarios, bastará con repetir la misma operación con cada uno de ellos. O si se desea importar de una tabla preexistente, consideren hacer una conexión por JDBC a la base de datos donde se tienen los usuarios a cargar, y dentro de un
while (rs.next())
llamar al método UserLocalServiceUtil.addUser()
Desplegando en servidor de producción
Para ponerlo en producción, primero debemos construir el .war. Esto es simple, basta con darle clic derecho al Ãcono del proyecto y seleccionarbuild
. Con esto nos generará el archivo .war listo para desplegarlo en el servidor.Hay dos maneras para desplegarlo en un servidor en producción. Una es utilizando el ControlPanel de Liferay y utilizar la opción "Instalar complemento", seleccionamos el archivo .war e instalarlo.
La otra es copiar el archivo .war en el directorio
deploy
que se encuenrta dentro del directorio instalado de Liferay.Código fuente
Y no podÃa faltar el código fuente del proyecto utilizado para este tutorial:http://kenai.com/projects/apuntes/downloads/download/ejemplos%252Fliferay%252FCrearUsuarios-hook.tar.gz
¡Que les sea de utilidad!