<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>El blog de Deigote &#187; tomcat</title>
	<atom:link href="http://blog.deigote.com/tag/tomcat/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deigote.com</link>
	<description>El mundo de Deigote. Un diario de cualquier cosa que me resulte interesante (si a alguien más se lo resulta, es otro cantar). Espero que os guste o disguste. Incluso que os deje indiferentes sería una opción tan buena como cualquier otra.</description>
	<lastBuildDate>Wed, 04 Aug 2010 09:55:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Idioma por defecto en Liferay</title>
		<link>http://blog.deigote.com/2010/01/28/idioma-por-defecto-en-liferay/</link>
		<comments>http://blog.deigote.com/2010/01/28/idioma-por-defecto-en-liferay/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 09:56:34 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[defecto]]></category>
		<category><![CDATA[español]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[lenguaje]]></category>
		<category><![CDATA[liferay]]></category>
		<category><![CDATA[locales]]></category>
		<category><![CDATA[system-ext.properties]]></category>
		<category><![CDATA[system.properties]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=454</guid>
		<description><![CDATA[Lenguaje por defecto en Liferay. Cómo seleccionarlo para una ínstalación nueva o para una instalación ya existente.]]></description>
			<content:encoded><![CDATA[<p>Un detalle que se me olvidó en la pequeña <a href="http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/" title="Guía de instalación de Liferay">guía para instalar Liferay</a> que escribí el otro día es la selección del idioma por defecto, que aunque a simple vista no parece gran cosa, como dirían los americanos, es un poco <em>tricky</em> (Wordreference lo traduce como <a href="http://www.wordreference.com/es/translation.asp?tranword=tricky">que tiene sus bemoles</a>, genial <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':lol:' title=':lol:' class='wp-smiley smiley-10' /> ).</p>
<p>Igual que Liferay incluye un <a href="http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/#liferay-con-mysql">fichero con todas las propiedades relacionadas con funcionalidad</a>, existe otro fichero, llamado <a href="http://svn.liferay.com/browse/portal/trunk/portal-impl/src/system.properties"><em>system-ext.properties</em></a>, que tiene las propiedades relacionadas con el sistema (codificación de los ficheros, zona horaria, <strong>lenguaje por defecto</strong>, etcétera). Este fichero puede extenderse creando el fichero <em>system-ext.properties.</em>
<p>Visto esto, para poner el portal en lenguaje español por defecto, debería bastar con anotar en ese fichero las propiedades relativas al lenguaje que queremos (las rutas corresponden a las mostradas en la <a href="http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/">guía</a> antes mencionada):</p>
<pre><code>$ echo "# Liferay default language
user.country=ES
user.language=es" >> /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps/ROOT/WEB-INF/classes/portal-ext.properties</code></pre>
<p>¿Fácil, verdad? Pues no funciona <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> . Para ser más exactos, no funciona para las compañías que ya tengamos creadas en la base de datos que estemos usando, ya que al crearlas, Liferay lee estas propiedades y las asocia a la compañía <strong>directamente en la base de datos</strong>.</p>
<p>Si ya tenéis el portal creado y no queréis empezar de cero, no es un problema grave, ya que estos datos pueden modificarse. Para ello, arrancad el portal accediendo a la compañía que queráis (en la mayoría de instalaciones se suele usar sólo una, ya que la <em>feature</em> de compañías no está muy bien documentada), y navegad por el menú superior escogiendo las opciones <em>Panel de control &#8211; Portal &#8211; Configuración &#8211; Preferencias de presentación</em> para seleccionar el idioma y país que por defecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/01/28/idioma-por-defecto-en-liferay/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Empezando con Liferay: una guía rápida de instalación</title>
		<link>http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/</link>
		<comments>http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 12:37:09 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[instalación]]></category>
		<category><![CDATA[liferay]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[portlets]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[usar]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=423</guid>
		<description><![CDATA[Guía rápida de instalación de Liferay usando Apache y MySQL]]></description>
			<content:encoded><![CDATA[<p>Dado que reciéntemente he tenido que instalar un Liferay limpito en un servidor con Apache, dejo aquí una guía con los pasos que seguí:</p>
<ol>
<li><a href="#que-es-liferay">¿Qué es Liferay?</a></li>
<li><a href="#instalacion-basica">Instalación básica</a></li>
<li><a href="#liferay-con-mysql">Usando Liferay con MySQL</a></li>
<li><a href="#liferay-con-apache">Usando Liferay con Apache</a></li>
<li><a href="#usuario-por-defecto">Usuario por defecto y un par de ajustes más</a></li>
</ol>
<h4 id="que-es-liferay">¿Qué es Liferay?</h4>
<p><a href="http://www.liferay.com/">Liferay</a> es un gestor de portales web con una gran funcionalidad integrada (gestión de comunidades y usuarios, CMS, wiki, blogs, y mucho más), y a su vez es un contenedor de portlets, lo que le permite ser extendido de manera bastante rápida y flexible (siguiendo la especificación <a href="http://www.jcp.org/en/jsr/detail?id=286">JSR 286: Portlet Specification 2.0</a>). Además, cuenta con una versión <a href="http://www.liferay.com/web/guest/downloads/portal">Community</a> cuyo uso es gratuito y cuyo código es libre.</p>
<h4 id="instalacion-basica">Instalación básica</h4>
<p>Descargamos la última versión <em>Community</em> con el usuario que arrancará Liferay (en mi caso <em>www-data</em>) en el sitio que queramos (yo he escogido <em>/opt/websites/liferay.deigote.com</em> como directorio base de la instalación):</p>
<pre><code>$ su - www-data
$ cd /opt/websites/
$ wget 'http://sourceforge.net/projects/lportal/files/Liferay%20Portal/liferay-portal-tomcat-6.0-5.2.3.zip'
$ unzip liferay-portal-tomcat-6.0-5.2.3.zip
$ mv liferay-portal-5.2.3/ liferay.deigote.com
</code></pre>
<p>Si ahora arrancamos Liferay, podremos ver cómo nos informa en los log de que se usará una base de datos para testing (<em><a href="http://hsqldb.org/">Hipersonic</a></em>), y si navegamos por la web, podremos ver una serie de portlets a modo de demo:</p>
<pre><code>$ /opt/websites/liferay.deigote.com/tomcat-6.0.18/bin/startup.sh
$ tail -f logs/catalina.out &#038;
$ firefox http://localhost:8080
</code></pre>
<p>Este entorno de demo está bien para cacharrear un poco y ver cómo la gente de Liferay quiere vendernos sus capacidades para hacer un clon de Facebook <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> (vienen instanciados portlets de chat, de muro, de añadir usuarios como amigo, de actividad reciente&#8230;), pero los datos no persisten, por lo que no podréis pasar de ahí. Además, Liferay viene por defecto con usa serie de portlets (en forma de plugins) preparados para hacer la demostración antes mencionada. Yo normalmente borro dichos portlets antes de continuar (de hecho, en mi caso borro todos los plugins excepto el de web-form-portlet, que es el único que encuentro útil):</p>
<pre><code>$ rm -rf `ls /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps | grep -v ROOT | grep -v web-form-portlet`</code></pre>
<p>Para la persistencia de los datos, tenemos que conectar Liferay con un viejo conocido <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> .</p>
<h4 id="liferay-con-mysql">Usando Liferay con MySQL</h4>
<p>Para conectar Liferay con MySQL existen varias formas. De momento anotaré aquí la más sencilla (aunque para mi gusto un poco &#8220;fea&#8221;), puesto que no recuerdo exactamente cómo es la otra <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> . Liferay incluye en su <em>core</em> un fichero de propiedades (<em><a href="http://svn.liferay.com/browse/portal/trunk/portal-impl/src/portal.properties">portal.properties</a></em>) que configuran prácticamente todos los componentes del portal, base de datos incluida. Ese fichero puede ser extendido mediante el fichero <em>portal-ext.properties</em>, que por defecto no existe. Así que escribimos en él la configuración de la base de datos:</p>
<pre><code>$ echo "# Database connection
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost/liferay_database?useUnicode=true&#038;characterEncoding=UTF-8&#038;useFastDateParsing=false
jdbc.default.username=mysql-user
jdbc.default.password=mysql-password" > /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps/ROOT/WEB-INF/classes/portal-ext.properties
</code></pre>
<p>A continuación nos conectamos al servidor de mysql (en mi caso, localhost) y creamos la base de datos y un usuario con permisos para la misma:</p>
<pre><code>$ mysql -h localhost -u root -p
$ create database liferay_database
$ grant all privileges on liferay_database.* to "mysql-user"@"localhost" identified by "mysql-password";
</code></pre>
<p>Si en este momento arrancamos Liferay de nuevo, deberíamos ver algunos mensajes haciendo mención a la base de datos utilizada (MySQL), y otros que indican que se están creando las tablas.</em>.</p>
<h4 id="liferay-con-apache">Usando Liferay con Apache</h4>
<p>Para usar Apache como servidor web, creamos un <em>host</em> virtual y lo conectamos al servidor de aplicaciones de Liferay (en mi caso Tomcat) usando un módulo de proxy. Podemos usar el módulo proxy_http, que funcionaría con cualquier servidor de aplicaciones, o el módulo proxy_ajp, específico de Apache, y que presenta algunas ventajas sobre http, aunque yo no las recuerde <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> . Dado que Tomcat soporta AJP, será el que usemos. Dado que yo uso Debian, necesito activar el módulo de proxy_ajp y crear un host virtual que use dicho módulo:</p>
<pre><code>$ su -
# a2enmod proxy_ajp
# nano /etc/apache2/sites-available/liferay.deigote.com
# a2ensite liferay.deigote.com
# /etc/init.d/apache2 restart
# exit
</code></pre>
<p>El contenido del fichero /etc/apache2/sites-available/liferay.deigote.com será el siguiente:</p>
<pre><code>&lt;VirtualHost *:80&gt;
        ServerName liferay.deigote.com
        ServerAdmin webmaster@localhost
        ErrorLog /var/log/apache2/liferay.deigote.com_error.log
        LogLevel warn
        CustomLog /var/log/apache2/liferay.deigote.com_access.log combined
        # Proxy to Tomcat
        &lt;Proxy *&gt;
                Order deny,allow
                Allow from all
        &lt;/Proxy&gt;
        ProxyPass / ajp://liferay.deigote.com:8009/
        ProxyPassReverse / ajp://liferay.deigote.com:8009/
&lt;/VirtualHost&gt;
</code></pre>
<p>Antes de echar a andar con esta configuración, debemos añadir un par de líneas al fichero de propiedades de Liferay, ya que si no éste dará por hecho que estamos atacando al puerto 8080 (el puerto por defecto de Tomcat) y escribirá las URL&#8217;s con dicho puerto. Una vez realizado este paso, deberíamos poder acceder a Liferay a través del host virtual que hemos usado (siempre y cuando nuestro servidor DNS sepa resolver dicho host, claro):</p>
<pre><code>$ /opt/websites/liferay.deigote.com/tomcat-6.0.18/bin/shutdown.sh
$ echo "
# Webserver configuration
web.server.http.port=80
web.server.https.port=443" >> /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps/ROOT/WEB-INF/classes/portal-ext.properties
$ /opt/websites/liferay.deigote.com/tomcat-6.0.18/bin/startup.sh
$ firefox http://liferay.deigote.com
</code></pre>
<h4 id="usuario-por-defecto">Usuario por defecto y un par de ajustes más</h4>
<p>Una vez estemos navegando por Liferay, podremos acceder usando el usuario <em>test@liferay.com</em> con la contraseña <em>test</em>, que es administrador de la comunidad por defecto (<em>guest</em>) Yo recomiendo un par de ajustes más:</p>
<ul>
<li>Cambiar la dirección de correo (y por tanto el login) y la contraseña del usuario administrador. Esto lo podéis hacer en el Panel de control, en el apartado de Usuarios.</li>
<li>Modificar el host virtual de la comunidad por defecto (o la que vayáis a usar) para que coincida con el que estéis usando para acceder a través de Apache. Esto se puede hacer en el panel de control, en el apartado <em>Communities &#8211; Guest &#8211; Manage pages &#8211; Settings &#8211; Virtual host</em>, usando el campo <em>Public virtual host</em>. Esto permitirá que las URL&#8217;s del tipo <em>http://virtual_host/web/nombre_de_la_comunidad/pagina</em> pasen a ser <em>http://virtual_host/pagina</em>, lo cual es más cómodo. Por ejemplo, la URL de la página por defecto (<em>home</em>) en la comunidad por defecto (guest) en mi caso pasaría de <em>http://liferay.deigote.com/web/guest/home</em> a <em>http://liferay.deigote.com/home</em></li>
</ul>
<p>Una vez finalizados estos pasos, ya podemos empezar a trabajar con Liferay en un entorno de producción (a falta, por supuesto, de configuraciones y optimizaciones de Tomcat, Apache y MySQL que no vienen al caso <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':D' title=':D' class='wp-smiley smiley-2' /> ).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2010/01/08/empezando-con-liferay-una-guia-rapida-de-instalacion/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Servicios web (2): Desplegando un servicio JWS</title>
		<link>http://blog.deigote.com/2006/06/12/servicios-web-2-desplegando-un-servicio-jws/</link>
		<comments>http://blog.deigote.com/2006/06/12/servicios-web-2-desplegando-un-servicio-jws/#comments</comments>
		<pubDate>Mon, 12 Jun 2006 23:27:00 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[axis]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[servicios web]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://www.deigote.com/blog/?p=78</guid>
		<description><![CDATA[Una vez que ya tenemos Tomcat y Axis instalados y funcionando, el siguiente paso es desplegar un servicio web. Existen dos maneras de hacerlo, de las cuales yo voy a abordar la primera en este post. También deberemos escribir un cliente. Para ello, existen tres posibilidades, yo sólo voy a tratar con dos de ellas.
La [...]]]></description>
			<content:encoded><![CDATA[<p>Una vez que ya tenemos <a href="http://blog.deigote.com/2006/06/12/servicios-web-1-instalando-tomcat-y-axis/">Tomcat y Axis instalados y funcionando</a>, el siguiente paso es desplegar un servicio web. Existen dos maneras de hacerlo, de las cuales yo voy a abordar la primera en este post. También deberemos escribir un cliente. Para ello, existen tres posibilidades, yo sólo voy a tratar con dos de ellas.</p>
<p>La primera manera de despleguar un servicio web, <acronym title="Java Web Service">JWS</acronym>, es muy sencilla y sólo está indicada para hacer pruebas o para empezar. Consiste en esribir una clase en Java con una serie de métodos, de tal manera que esta se convierta por si sóla en un servicio web, sin tener que hacer nada más. La conversión, creo entender, se hace al vuelo, por eso no está recomendado usarlo: incrementaría mucho la carga del servidor y además no podemos modificar el fichero <acronym title="Web Service Description Language">WSDL</acronym>.</p>
<h3>Escribiendo el servidor</h3>
<p>En mi caso he escrito el programa más sencillo del mundo, el clasico Hola, aunque he quitado el Mundo porque me parece muy pretencioso ;-). El código fuente es como se ve a continuación:</p>
<pre><code>
/*
 Hola.java - El ejemplo Java mas simple
 */

public class Hola {
  public String decirHola(String persona) {
      return "Hola " + persona;
  }
}
</code></pre>
<h3>Desplegando el servicio web</h3>
<p>Para desplegar este servicio web, basta con copiar el fichero al directorio webapps de axis, pero cambiando la extensión a <acronym title="Java Web Service">jws</acronym>. Esto es:</p>
<p><code>cp Hola.java $CATALINA_HOME/webapps/axis/Hola.jws</code></p>
<p>Una vez hecho esto, podemos <a href="http://localhost:8080/axis/Hola.jws">visitar nuestro servicio web</a>. Evidentemente, no es una página web, pero Axis nos responde avisándonos de que es un servicio web, y nos permite ver el <acronym title="Web Service Description Language">WSDL</acronym> asociado, lo que para hacer pruebas o aprender es bastante útil.</p>
<h3>Escribiendo un cliente</h3>
<p>Existen varios métodos para escribir un cliente, como ya dije al principio. Voy a usar el que mejor corresponde al método para desplegar el servicio: el más sencillo. Éste método consiste en crear una <acronym title="Dynamic Invocation&lt;br /&gt; Interface">DDI</acronym> o interfaz de invocación dinámica. Su ventaja es la sencillez, pero tiene como desventaja el que no obtendremos una referencia a un objeto remoto, sino a un método, lo cual es menos cómodo.<br />
Primero deberemos importar una serie de librerías de Axis y una de Java:</p>
<pre><code>import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
</code></pre>
<p>A continuación, declararemos una clase de las que se ejecutan, es decir, con un método estático <em>main</em>. Lo primero que hay que hacer es tener claro cuál es nuestro <em>endpoint</em>, que es la dirección del servicio web. En mi ejemplo:</p>
<pre><code>public class HolaCliente {
   public static void main(String [] args) throws Exception {

       String endpoint = "http://localhost:8080/axis/Hola.jws";
</code></pre>
<p>A continuación, declararemos un servicio y una llamada para el mismo. A esta llamada le indicaremos cual es su endpoint, la operación a realizar y los parámetros de la misma, así como el tipo de retorno. Por último la invocaremos:</p>
<pre><code>
       Service  service = new Service();
       Call call = (Call)service.createCall();

       call.setTargetEndpointAddress(new java.net.URL(endpoint));
       call.setOperationName("decirHola");
       call.addParameter("persona", XMLType.XSD_STRING,
                         ParameterMode.IN);
       call.setReturnType(XMLType.XSD_STRING);

       String resultado = (String)call.invoke(new Object [] { " cliente"});

       System.out.println(resultado);
   }
}
</code></pre>
<h3>Compilando y ejecutando el cliente</h3>
<p>Para compilar nuestro cliente, debemos tener en cuenta el <em>classpath</em> del compilador de Java, ya que debe incluir el de Axis. Puedes hacerlo usando variables de entorno, aunque yo prefiero pasárselo como un argumento de la llamada al compilador, tal que así:</p>
<p><code>$ javac -classpath $AXISCLASSPATH HolaCliente.java</code></p>
<p>Si todo ha ido bien, ya podemos lanzar nuestro cliente. Hay que tener en cuenta ahora que en el <em>classpath</em> debe figurar el directorio donde está el resultado de la compilación anterior. En mi caso, hago:</p>
<p><code> $ java -cp .:$AXISCLASSPATH HolaCliente </code></p>
<p>Lo que hace que obtenga el siguiente resultado:<br />
<code> log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).<br />
log4j:WARN Please initialize the log4j system properly.<br />
Hola  cliente </code></p>
<p>Que, a pesar de los <em>warnings</em> que sigo ignorando, da un resultado safistactorio :-). Los ficheros con el código fuente son <a href="http://personales.ya.com/ltoharia/deigote/code/hola-ws/Hola.java">Hola.java</a> y <a href="http://personales.ya.com/ltoharia/deigote/code/hola-ws/HolaCliente.java">HolaCliente.java</a></p>
<p>Precede: <a href="http://blog.deigote.com/2006/06/12/servicios-web-1-instalando-tomcat-y-axis/">Servicios web (1): Instalando Tomcat y Axis</a><br />
Continua: <a href="http://blog.deigote.com/2006/06/12/servicios-web-3-desplegando-un-servicio-wdss/">Servicios web (3): Desplegando un servicio WDSS</a></p>
<p>Technorati Tags: <a rel="tag" href="http://technorati.com/tag/tomcat">tomcat</a> <a rel="tag" href="http://technorati.com/tag/axis">axis</a> <a rel="tag" href="http://technorati.com/tag/java">java</a> <a rel="tag" href="http://technorati.com/tag/web+services">web services</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2006/06/12/servicios-web-2-desplegando-un-servicio-jws/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
