tag:blogger.com,1999:blog-59228077415740623682024-03-20T02:56:08.386-05:00grupodotTecnología para modos de vidaAnonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-5922807741574062368.post-20005713907708052462014-04-22T15:13:00.000-05:002014-04-23T06:21:55.269-05:00Part 1 - Testing your Datastore models with Google Cloud Platform Interactive ConsoleThis is the first in a series of short articles that will cover a way of testing Google's Datastore models using the Interactive Console present in the dev-server included with Google Cloud SDK. Also we'll be seeing a good way (at least for us) to create and load large amount of testing data for our models so you can work with datasets similar to the ones you're going to use in production. Finally we'll see how easy is to integrate this tools into a simple app using Ferris MVC.<br />
<br />
Note.<i> I'm using Google Cloud Python SDK version 1.9.3, on Ubuntu Linux 12.04, 64 bits. As I want this short intro to grow up in time I'll be using the excellent MVC framework "Ferris" from CloudSherpas from the beginning. The IDE I'm using is EMACS 23.3. </i><br />
<br />
<h2>
1. Creating your first "Person" Datastore model </h2>
<h3>
1. Create a blank project </h3>
First you need to create an empty project to start with. To do so just make a copy of new_project template included with Google Cloud SDK.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRbjBZaWblZ_6ZlgHN1hyqjvowRB4Lamfvr03DcgaDQB02_1J_aAydofxZ6sk52AIPv7DNYO7b3TiE-a35hyumcbpU_q7w3OgVyhG_W2ohgf5DSAr-rDQYHYqyIhR4O3P9qsuQBBraaee/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cp -R new_project_template my_new_project
</code></pre>
<br />
<h3>
2. Install Ferris MVC</h3>
<h4>
Download Ferris MVC from the official site:</h4>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRbjBZaWblZ_6ZlgHN1hyqjvowRB4Lamfvr03DcgaDQB02_1J_aAydofxZ6sk52AIPv7DNYO7b3TiE-a35hyumcbpU_q7w3OgVyhG_W2ohgf5DSAr-rDQYHYqyIhR4O3P9qsuQBBraaee/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> wget -c https://bitbucket.org/cloudsherpas/ferris-framework/get/master.zip </code></pre>
<h4>
Unzip the package in your "my_new_project" folder or directory</h4>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRbjBZaWblZ_6ZlgHN1hyqjvowRB4Lamfvr03DcgaDQB02_1J_aAydofxZ6sk52AIPv7DNYO7b3TiE-a35hyumcbpU_q7w3OgVyhG_W2ohgf5DSAr-rDQYHYqyIhR4O3P9qsuQBBraaee/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> $ unzip cloudsherpas-ferris-framework-*.zip -d .
$ cd cloudsherpas-ferris-framework-*
$ mv * ../
$ rm -fr cloudsherpas-ferris-framework-* </code></pre>
<h4>
Edit your and save your <span style="font-family: Courier New, Courier, monospace;">app.yaml </span>file so you know is your project</h4>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRbjBZaWblZ_6ZlgHN1hyqjvowRB4Lamfvr03DcgaDQB02_1J_aAydofxZ6sk52AIPv7DNYO7b3TiE-a35hyumcbpU_q7w3OgVyhG_W2ohgf5DSAr-rDQYHYqyIhR4O3P9qsuQBBraaee/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> #my_new_project/app.yaml
application: my-new-app-id #.appspot.com
version: 1.0
</code></pre>
<br />
Start your app for the first time just to check everything is ok<br />
<br />
To start your app for the first time just launch the dev server like this.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRbjBZaWblZ_6ZlgHN1hyqjvowRB4Lamfvr03DcgaDQB02_1J_aAydofxZ6sk52AIPv7DNYO7b3TiE-a35hyumcbpU_q7w3OgVyhG_W2ohgf5DSAr-rDQYHYqyIhR4O3P9qsuQBBraaee/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> $ dev_appserver.py my_new_project
</code></pre>
<br />
Then open your browser at<span style="font-family: Courier New, Courier, monospace;"> http://localhost:8080</span> (local app URL) and to <span style="font-family: Courier New, Courier, monospace;">http://localhost:8000</span> (local admin console).<br />
<br />
<h3>
3. Creating your first Datastore Model </h3>
For the purposes of this article we'll create a simple two-properties model for the Kind "Person". This model includes the "name" of the person an also a multi-value text field for saving tags related to this person. Following the directory structure we'd just created by copying Ferris to our project, we need to create our model under the folder app/models like this: (you can use the text editor or IDE of your choice).<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRbjBZaWblZ_6ZlgHN1hyqjvowRB4Lamfvr03DcgaDQB02_1J_aAydofxZ6sk52AIPv7DNYO7b3TiE-a35hyumcbpU_q7w3OgVyhG_W2ohgf5DSAr-rDQYHYqyIhR4O3P9qsuQBBraaee/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> # app/models/person.py
from ferris import BasicModel
from google.appengine.ext import ndb </code></pre>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRbjBZaWblZ_6ZlgHN1hyqjvowRB4Lamfvr03DcgaDQB02_1J_aAydofxZ6sk52AIPv7DNYO7b3TiE-a35hyumcbpU_q7w3OgVyhG_W2ohgf5DSAr-rDQYHYqyIhR4O3P9qsuQBBraaee/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">
class Person(BasicModel):
"""
NDB Model for Person
name: StringProperty - Required
skills: StringProperty(repeated=True) - Optional
"""
name = ndb.StringProperty(required=True)
tags = ndb.StringProperty(repeated=True)
</code></pre>
<br />
Once you create your model you can restart your development server (CTRL+C) and dev_appappserver.py my_new_project again.<br />
<h2>
Using the interactive console to test your model </h2>
Google's Cloud SDK contains a very nice administration app that includes an interactive console to test your code or data for different purposes. In this case, we are going to use the interactive console to test our simple <b><span style="font-family: Courier New, Courier, monospace;">Person</span></b> model by creating new entries and do some queries against it.<br />
<br />
<h2>
Mass creation of test entries with sample data </h2>
One of the things that I find most annoying when testing some app is the lack of real or at least close to real data. A lot of problems (think of performance, scalability, validation and data modeling problems just to name a few), can be tracked down during early stages of development if just one can count on an adequate dataset to work with. Even for our simple model is good to have a decent size dataset to play with queries and insertions over tags or names in it.<br />
<br />
Although the developement server included with the GC SDK appears to have utilities to mass insert data into Google's Datastore, I could not found a good resource or reference to execute that procedure when one is using NDB (the official doc, mentions DB but not NDB implementation). In this scenario i'd remembered excelent Perl::Maker package and decided to search for an equivalent for Python. What i'd found was "Faker", a very simple yet powerful tool for creating user data: names, surnames and general paragraphs (lorem ipsum), so, what we are going to do right now is to add Faker to our project and start using the Interactive Console to do some tests.<br />
<br />
<h3>
1. Download Faker from official github site </h3>
<a href="https://github.com/joke2k/faker">https://github.com/joke2k/faker</a><br />
<br />
<h3>
2. Unzip Faker inside your project folder </h3>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRbjBZaWblZ_6ZlgHN1hyqjvowRB4Lamfvr03DcgaDQB02_1J_aAydofxZ6sk52AIPv7DNYO7b3TiE-a35hyumcbpU_q7w3OgVyhG_W2ohgf5DSAr-rDQYHYqyIhR4O3P9qsuQBBraaee/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> $ cd my_new_project
$ unzip faker-master.zip -d .
$ mv faker-master faker
</code></pre>
<br />
<h3>
3. Creating mass data from Interactive Console </h3>
<h4>
Start your development server (if you didn't already) </h4>
<div>
<pre style="background-color: #f0f0f0; border: 1px dashed rgb(204, 204, 204); font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; width: 646.46875px;"><code style="word-wrap: normal;"> $ dev_appserver.py my_new_project
</code></pre>
</div>
<div>
<br /></div>
<h4>
Launch de Admin Console</h4>
<div>
Point your browser to http://localhost:8000 then click on "Interactive Console" from the left menu bar </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzUQsbc3tEB96P9bcgPjXzeNbdO3HXs7sfVWi0i5RPx5m7ye9O3anXowPcwo1q9QX6NYuY71fswuy6jXCyz5HeL1lV3oxJ6C_F6SCH5rvB6Oa3mpOaE_6NrA5R5BPm1bAIJT0zkEDD5mM/s1600/Screenshot+from+2014-04-21+14:35:15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzUQsbc3tEB96P9bcgPjXzeNbdO3HXs7sfVWi0i5RPx5m7ye9O3anXowPcwo1q9QX6NYuY71fswuy6jXCyz5HeL1lV3oxJ6C_F6SCH5rvB6Oa3mpOaE_6NrA5R5BPm1bAIJT0zkEDD5mM/s1600/Screenshot+from+2014-04-21+14:35:15.png" height="179" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Once there clear the default code in the text box. </div>
<div>
Finally copy and paste the following python code in the text box:</div>
<br />
<pre style="background: #000; color: #f8f8f8;"><span style="color: #e28964;">from</span> app.models.person <span style="color: #e28964;">import</span> Person
<span style="color: #e28964;">from</span> google.appengine.ext <span style="color: #e28964;">import</span> ndb
<span style="color: #e28964;">from</span> random <span style="color: #e28964;">import</span> randrange
<span style="color: #e28964;">from</span> faker <span style="color: #e28964;">import</span> Faker
<span style="color: #aeaeae; font-style: italic;"># a new instance of Faker </span>
fake <span style="color: #e28964;">=</span> Faker()
NENTRIES <span style="color: #e28964;">=</span> <span style="color: #3387cc;">10</span>
<span style="color: #aeaeae; font-style: italic;"># a list wich contains fake tags to randomize over </span>
ftags <span style="color: #e28964;">=</span> ([<span style="color: #65b042;">'engineering'</span>,<span style="color: #65b042;">'custom-making'</span>,<span style="color: #65b042;">'writing'</span>,<span style="color: #65b042;">'electrician'</span>,
<span style="color: #65b042;">'interiors-design'</span>,<span style="color: #65b042;">'dancing'</span>,<span style="color: #65b042;">'smiling'</span>,<span style="color: #65b042;">'drifting'</span>,<span style="color: #65b042;">'drinking'</span>])
ftags_new <span style="color: #e28964;">=</span> []
<span style="color: #e28964;">for</span> i <span style="color: #e28964;">in</span> <span style="color: #dad085;">range</span>(<span style="color: #3387cc;">1</span>,NENTRIES):
<span style="color: #aeaeae; font-style: italic;"># create a new name </span>
fname <span style="color: #e28964;">=</span> fake.name()
<span style="color: #aeaeae; font-style: italic;"># randomize over tags list size and items to create the person's tags </span>
<span style="color: #aeaeae; font-style: italic;"># randomize the number of tags</span>
<span style="color: #e28964;">for</span> j <span style="color: #e28964;">in</span> <span style="color: #dad085;">range</span>(<span style="color: #3387cc;">0</span>,randrange(<span style="color: #3387cc;">9</span>)):
<span style="color: #aeaeae; font-style: italic;"># randomize tags </span>
ftags_new.extend([ftags[randrange(<span style="color: #3387cc;">9</span>)]])
<span style="color: #e28964;">print</span> ftags_new
person <span style="color: #e28964;">=</span> Person(<span style="color: #3e87e3;">name</span><span style="color: #e28964;">=</span>fname, <span style="color: #3e87e3;">tags</span><span style="color: #e28964;">=</span>ftags_new)
<span style="color: #e28964;">del</span> ftags_new[:]
<span style="color: #aeaeae; font-style: italic;"># save the new person on datastore everytime </span>
person.put()
</pre>
<br />
After executing the code above you should see a printed list of all tags list random assigned to each new entry.<br />
<br />
<pre style="background: #000; color: #f8f8f8;">[<span style="color: #65b042;">'interiors-design'</span>, <span style="color: #65b042;">'writing'</span>, <span style="color: #65b042;">'electrician'</span>, <span style="color: #65b042;">'dancing'</span>, <span style="color: #65b042;">'interiors-design'</span>, <span style="color: #65b042;">'drinking'</span>, <span style="color: #65b042;">'smiling'</span>, <span style="color: #65b042;">'interiors-design'</span>]
[<span style="color: #65b042;">'electrician'</span>, <span style="color: #65b042;">'writing'</span>]
[<span style="color: #65b042;">'interiors-design'</span>]
[<span style="color: #65b042;">'interiors-design'</span>, <span style="color: #65b042;">'interiors-design'</span>, <span style="color: #65b042;">'dancing'</span>, <span style="color: #65b042;">'smiling'</span>, <span style="color: #65b042;">'smiling'</span>]
[<span style="color: #65b042;">'drifting'</span>, <span style="color: #65b042;">'electrician'</span>, <span style="color: #65b042;">'dancing'</span>, <span style="color: #65b042;">'interiors-design'</span>, <span style="color: #65b042;">'dancing'</span>, <span style="color: #65b042;">'drinking'</span>]
[<span style="color: #65b042;">'electrician'</span>, <span style="color: #65b042;">'writing'</span>, <span style="color: #65b042;">'drifting'</span>, <span style="color: #65b042;">'writing'</span>, <span style="color: #65b042;">'writing'</span>, <span style="color: #65b042;">'drinking'</span>, <span style="color: #65b042;">'interiors-design'</span>, <span style="color: #65b042;">'engineering'</span>]
[<span style="color: #65b042;">'interiors-design'</span>, <span style="color: #65b042;">'interiors-design'</span>]
[<span style="color: #65b042;">'writing'</span>]
[<span style="color: #65b042;">'drinking'</span>, <span style="color: #65b042;">'drinking'</span>, <span style="color: #65b042;">'drinking'</span>, <span style="color: #65b042;">'engineering'</span>]
</pre>
<br />
Now you can go to "Datastore Viewer" in the console to see the entries you'd just created. In this case you'd created just 10 entries, but rhe number can be higher.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhxM71EL9Zs8FaRJ32cyzvo3-7_wn0txtKBMJcosaU8dlKTkkRBpqVGYPHzZS0zLGtORI-5k6NBJMsMq8sooJCJoXMYaNq9hyphenhyphenyrf-wmoIIKYVh4EdOBz5FfR1d8qdDfwHMmNddDOpJmWg/s1600/Screenshot+from+2014-04-22+15:04:26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhxM71EL9Zs8FaRJ32cyzvo3-7_wn0txtKBMJcosaU8dlKTkkRBpqVGYPHzZS0zLGtORI-5k6NBJMsMq8sooJCJoXMYaNq9hyphenhyphenyrf-wmoIIKYVh4EdOBz5FfR1d8qdDfwHMmNddDOpJmWg/s1600/Screenshot+from+2014-04-22+15:04:26.png" height="179" width="320" /></a></div>
...<br />
<br />
In the next part we'll be covering querying against Datastore and the repeated attributes and also some very nice options for timing your entries creation process.<br />
<br />
<br />
<h2>
References</h2>
[1] Google's App Engine Official Documentation <a href="https://developers.google.com/appengine/?csw=1">https://developers.google.com/appengine/?csw=1</a><br />
[2] Ferris MVC <a href="http://ferris-framework.appspot.com/">http://ferris-framework.appspot.com</a><br />
[3] Faker - <a href="https://github.com/joke2k/faker">https://github.com/joke2k/faker</a><br />
<br />
<br />
<br /><div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-77097776436410902962014-02-06T17:01:00.000-05:002014-04-22T20:37:40.378-05:00Running Google Cloud's "gcutil" behind a socks proxy with tsocks and ssh tunnelSuppose you have to use google's cloud platform "gcutil" tool to connect to one or more nodes on a project hosted on google cloud platform but you don't have a direct internet connection although you still can set up a ssh connection to a gateway who has the ability to connect directly to Internet.<br />
<br />
Given this scenario you can follow this simple steps to accomplish your task:<br />
<br />
<b><span style="font-size: large;">1. Open a terminal and ssh to your gateway using the following command</span></b><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">ssh -D 1080 user@gateway_ip</span><br />
<br />
<b><span style="font-size: large;">2. Install tsocks package (Debian/Ubuntu or RedHat/CentOS) </span></b><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">sudo apt-get install tsocks </span><br />
<br />
or<br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">yum install tsocks </span><br />
<br />
<span style="font-size: large;">3. Edit your tsocks.conf file like this:</span><br />
<br />
<b><span style="font-family: Courier New, Courier, monospace;"># your local network/mask</span></b><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">local = 192.168.100.0/255.255.255.0</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># local = 10.0.0.0/255.0.0.0</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># Paths</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># For this example this machine needs to access 150.0.0.0/255.255.0.0 as </span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># well as port 80 on the network 150.1.0.0/255.255.0.0 through</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># the socks 5 server at 10.1.7.25 (if this machines hostname was </span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># "socks.hello.com" we could also specify that, unless --disable-hostnames</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># was specified to ./configure).</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">path {</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>reaches = 150.0.0.0/255.255.0.0</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>reaches = 150.1.0.0:80/255.255.0.0</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>server = localhost</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>server_type = 5</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>default_user = delius</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><span class="Apple-tab-span" style="white-space: pre;"> </span>default_pass = hello</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">}</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span>
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># Default server</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># For connections that aren't to the local subnets or to 150.0.0.0/255.255.0.0</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># the server at 192.168.0.1 should be used (again, hostnames could be used</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># too, see note above)</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><b># your local ssh-socks server</b></span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">server = 127.0.0.1</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># Server type defaults to 4 so we need to specify it as 5 for this one</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">server_type = 5</span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"># The port defaults to 1080 but I've stated it here for clarity </span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><b># the port you'd just select in the previous ssh connection</b></span><br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">server_port = 1080 </span><br />
<div>
<br /></div>
<div>
<span style="font-size: large;">4. Launch gcutil </span></div>
<div>
<br /></div>
<div>
<span style="font-family: Courier New, Courier, monospace;">tsocks ./gcutil node-id </span></div>
<div>
<br /></div>
<div>
And that's all. </div>
<div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-3769730927223893942013-09-27T07:57:00.002-05:002013-09-27T07:57:09.366-05:00Feliz cumpleaños GNU !<br />
<br />
<br />
<a href="https://gnu.org/gnu30"><img alt="[ Celebrate 30 years of GNU! ]" src="https://static.fsf.org/nosvn/misc/GNU_30th_badge.png" /></a><div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-17065154806223078512013-07-03T18:03:00.001-05:002013-07-03T18:03:15.060-05:00Liferay Portal sobre Google Compute Engine<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Después de haber usado Linode por un tiempo hemos encontrado que una alternativa viable y económicamente flexible es ejecutar Liferay Portal sobre Google Compute Engine . Este último ofrece un entorno completo de ejecución, simple de configurar y cómodo en términos de administración y costos, con la posibilidad de usar diferentes distribuciones de Linux así como la posibilidad de enlazarnos a otros servicios en cloud de google como CloudStorage y CloudSQL u otros servicios externos. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<h2>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Procedimiento de instalación y configuración de Liferay Portal en Google Compute Engine(GCE).</span></h2>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Los pasos para tener una instancia de Liferay Portal corriendo sobre Google Compute Engine se describen a continuación. Se asume en este caso que el usuario ya tiene una cuenta activa de en Google Cloud y que ha activado el <i>billing</i> para el proyecto. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<h3>
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Paso 1 - Crear una instancia de compute engine </span></h3>
<br />
<ol>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Haga click en el proyecto creado con billling activo (ej, </span><span style="font-family: Courier New, Courier, monospace;">miempresa-gce-demo-001</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">)</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Ingrese los datos de solicitados: nombre de la instancia, descripción, tags y metadatos (son útiles para identificar el uso o cliente de la instancia etc). Seleccione además un sistema operativo para la instancia ( Puede seleccionar Debian7 por ejemplo) teniendo cuidado de no usar uno que esté marcado como "<i>deprecated</i>". Finalmente haga click en el botón "Create". </span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Espere unos segundos hasta que la instancia esté activa (aparecerá en el listado). Cuando esté lista haga click sobre el nombre de la instancia para ver los datos en detalle. Tome nota de la dirección IP pública asignada, el ID del proyecto (project-id)(esquina superior izquierda) y ID de la instancia (instance-id).</span></li>
</ol>
<br />
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Paso 2 - Conectarse a la instancia vía SSH </span></h3>
<br />
<ul>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Descargue e instale la aplicación "gcutil". Esta permitirá el control y acceso a las instancias de GCE desde la consola del sistema operativo. La herramienta se puede descargar de: <a href="https://developers.google.com/compute/docs/gcutil/">gcutil site</a>.</span></li>
</ul>
<ul>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Una vez instalada la instancia ejecute el siguiente comando para conectarse por primera vez: </span></li>
</ul>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> </span><b><span style="font-family: Courier New, Courier, monospace;">gcutil ssh --project=proyect_id instance-id</span></b><div>
<br /><div style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
<b> </b>La primera vez seleccione la contraseña deseada y el programa se encargará de dejar </div>
<div style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
la autorización creada para el cliente ssh la próxima vez. </div>
<div style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">
<br /></div>
<b style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> Nota</b><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">.</span><i style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> Este proceso puede tardar aproximadamente 5 minutos la primera vez, así que </i></div>
<div>
<i style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> tenga paciencia. </i><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<ul>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Cuando haya ingresado quedará en un shell estándar de Linux que podrá usar normalmente.</span></li>
</ul>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Paso 3 - Configuración del entorno de usuario </span></h3>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Una vez en el shell de nuestra instancia de GCE se recomienda crear un entorno de trabajo estándar sobre el cual podamos trabajar fácilmente a futuro. Nuestra recomendación es usar la siguiente:</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">mkdir app src tmp </span></b></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">chmod 1777 </span></b></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>apps</b>: binarios (ej, jboss + liferay) </span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>src</b>: fuentes usadas para la instalación de paquetes propios o de terceras partes</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>tmp</b>: carpeta de temporales local en caso de que se tengan múltiples instancias de servidor de aplicaciones y se quieran evitar conflictos con acceso a temporales. </span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Paso 4 - Instalación de JDK 7 </span></h3>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">El siguiente paso es instalar el JDK. Para el caso se instalará el JDK7. Puede instalarlo usando el siguiente comando:</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">sudo apt-get install openjdk-7-jdk</span></b></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Una vez finalice verifique que está correctamente instalado y disponible en el PATH usando:</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">java -version </span></b></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Si tiene problemas verifique la instalación y repita el proceso. </span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Paso 5 - Descargar Liferay Portal CE a la instancia </span></h3>
<br />
<ul>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Desde el sitio oficial de Liferay Portal </span><a href="http://www.liferay.com/" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">http://www.liferay.com</a><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> descargue la versión comunitaria o un demo de la versión Enterprise (es la recomendada para aplicaciones en producción). </span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Para descargarla a la instancia puede usar wget (copiando y pegando el enlace) o descargarla a su máquina y transferirla luego. </span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Copie el paquete descargado en la carpeta src creada previamente. </span></li>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Descomprima el paquete con destino a la carpeta tmp: </span></li>
</ul>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"> </span><b><span style="font-family: Courier New, Courier, monospace;">tar xzf liferay-portal-ce-**.tar.gz -C ~/apps</span></b><br /><ul>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Vaya a la carpeta apps y cree un link simbólico a la carpeta de instalación de Liferay</span></li>
</ul>
<b><span style="font-family: Courier New, Courier, monospace;"> ln -s liferay-portal-ce-** liferay61</span></b><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"> <b>Nota</b>. <i>Este paso no es necesario pero ahorrará tiempo durante la administración </i></span><br />
<span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"><i> normal.</i></span><br />
<br />
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Paso 7 - Configuración básica e inicio del portal por primera vez </span></h3>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Dado que el portal por defecto solo escucha en localhost es necesario ajustar la configuración para que el conector web del servidor de aplicaciones se asocie a todas las interfaces disponibles, para el caso se asume que el bundle de liferay que se está usando es el que incluye JbossAS. Una forma simple de hacerlo es crear un script del shell adicional que envíe el parámetro de binding al script de arranque del dominio así:</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">cd ~/apps/liferay61/jboss*/bin</span></b></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">echo "#!/bin/bash" >> start-liferay.sh </span></b></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">echo "./standalone.sh -b 0.0.0.0 1> ../standalone/log/ \\</span></b></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;"> mi-liferay.log &" >> start-liferay.sh </span></b></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">chmod +x start-liferay.sh </span></b></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">./start-liferay.sh & </span></b></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Puede verificar el inicio del portal usando <i>tail</i> así:</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<b><span style="font-family: Courier New, Courier, monospace;">tail -f ~/apps/liferay61/jboss*/standalone/log/mi-liferay.log </span></b></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Una vez haya iniciado puede continuar con el paso siguiente. </span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><b>Nota</b>. <i>Se incluye la redirección para poner el portal en background y que no se caiga si cerramos la consola. </i></span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span></div>
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Paso 8 - Configuración de firewall para acceso al servicio </span></h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">El portal escucha por defecto en el puerto 8080 por lo que será necesario adicionar una regla al firewall de la instancia para admitir conexiones a dicho puerto. Para el caso se asume que es un servicio público pero bien podría estar limitado a una IP o red específica. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Para agregar la regla vaya al panel de control de Google Cloud, haga click en el proyecto que crearon, luego click en el menú lateral "Networks". En la sección "Firewalls" seleccione "Create new". </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Una vez allí ponga un nombre a la regla, ej "liferay", una descripción, en la sección de "Protocols & ports" escriba "tcp:8080". Finalmente de click en "Create".</span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Paso Final. Conectarse a la instancia </span></h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Una vez creada la regla de firewall ya podrá conectarse desde el navegador usando la IP pública de la instancia y apuntando al puerto 8080. El primer paso será configurar Liferay para el inicio (el proceso es muy sencillo y no vale la pena entrar en detalles aquí). Y eso es todo!. El proceso completo puede tardar menos de treinta minutos lo que nos da un nivel de maniobra impresionante a la hora de configurar sitios de prueba, demos para clientes e incluso nuevos sitios. </span><br />
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><br /></span>
<h3>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Notas finales y recomendaciones </span></h3>
<br />
<ul>
<li><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">Si la instancia se reinicia o inactiva los datos se perderán. Es importante crear discos con almacenamiento permanente que se monten al inicio de la instancia(s) y que contengan el portal y el JDK aislados. Esto con el fin de reducir los tiempos. </span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Si se requiere el uso de múltiples instancias con propósito específico vale la pena usar una herramienta de gestión que facilite el trabajo como RightScale (http://www.rightscale.com)</span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Si se requiere el uso de balanceadores puede utilizarse nginx (http://www.nginx.org ) en un nodo de balaceo y un grupo de nodos adicionales "atrás". </span></li>
<li><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;">Si se requiere el uso de bases de datos externas lo mejor es usar Google Cloud SQL que es <i>enganchable</i> directamente y ofrece driver jdbc compatible con el servidor de aplicaciones (tomcat, jboss etc). </span></li>
</ul>
<br />
<br /></div>
<div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-2800173611881162012011-07-03T17:36:00.002-05:002011-07-03T17:51:24.822-05:00Nginx, JBoss 5.1 y Liferay Portal 6<div xmlns='http://www.w3.org/1999/xhtml'><br /><br />Esta guía contiene los pasos necesarios para configurar el servidor<br />web Nginx como un proxy reverso y balanceador de cargas para Liferay<br />Porta 6 sobre JBoss 5.1. <br /><i>grupodot 2011</i><br /> </div><div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-60353293418033682832010-07-01T10:19:00.007-05:002010-08-02T09:42:36.134-05:00<b>Conexión de Liferay Portal con Domain Controller<br /></b><br /><br />Pasos previos:<br /><br /><div>1. Instalar windows 2003 server<br />2. Configurar el servidor como el controlador de un nuevo dominio<br />inicio / ejecutar / dcpromo<br /><br /><br /><b>Configuración de Liferay<br /></b><br />1. Panel de control / configuración / autenticación<br />2. Autenticar por screenname<br />3. Activar LDAP . seleccionar Active Directory<br />4. Probar la conexión<br /><br />IP del servidor<br />Usuario: Ej, Administrador@DCLOCAL<br />Clave: ***<br /><br />Modificar el filtro de búsqueda de usuarios a :<br /><br /><font class="Apple-style-span" face="'courier new'">(&(objectCategory=person)(sAMAccountName=@screen_name@))<br /></font><br /><br />Eso es todo !<br /><br /><br />Pasos para la configuración de Liferay Portal con Active Directory - Microsoft<br /><br /><br /><br />Paso 1 . Como administrador entrar por el panel de control a "Configuración" luego a "Autentificación". Seleccionar la pestaña "LDAP", luego seleccionar "Habilitado", luego seleccionar "Microsoft Active Directory"<br />Allí poner los datos como se muestra a continuación:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://docs.google.com/File?id=dgsps3vf_102f74dstdn_b"><img style="cursor:pointer; cursor:hand;width: 740px; height: 612px;" src="http://docs.google.com/File?id=dgsps3vf_102f74dstdn_b" border="0" alt=""></a><br /><br /><a href="http://docs.google.com/File?id=dgsps3vf_104fkk83rdm_b"><img src="http://docs.google.com/File?id=dgsps3vf_104fkk83rdm_b" border="0" alt="" style="cursor: pointer; width: 454px; height: 500px; "></a><br />Paso 2. Probar la conexión con el AD usando la opción "Probar la conexión con LDAP". Si es exitosa seguir con paso 3, sino revisar las credenciales y demás datos y volver a probar.<br /><br /><br /><br />Paso 3. Configurar los datos de usuario como se muestra a continuación<br /><br /><br /><div><a href="http://docs.google.com/File?id=dgsps3vf_103cs4ntgfr_b"><img src="http://docs.google.com/File?id=dgsps3vf_103cs4ntgfr_b" border="0" alt="" style="cursor: pointer; width: 432px; height: 583px; "></a><br /><div><br /><br />Paso 4. Probar usuarios usando "Probar la configuración de usuarios LDAP"<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGpuqgb6BFxDYso2jjLPlAwcnWzs34GfSeSAp8LzyUwaFgUvqebjF5lPrSrxibnicV_wCIPDHvXwXkb37Esl6iUhvdS-x6a2ilt_V-dHalGSK47-toMlXPvMkA5VmWx7sdN8FxvJXefHU/s1600/liferay-usuarios.png"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGpuqgb6BFxDYso2jjLPlAwcnWzs34GfSeSAp8LzyUwaFgUvqebjF5lPrSrxibnicV_wCIPDHvXwXkb37Esl6iUhvdS-x6a2ilt_V-dHalGSK47-toMlXPvMkA5VmWx7sdN8FxvJXefHU/s320/liferay-usuarios.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5488959444215687250" style="cursor: pointer; width: 320px; height: 195px; "></a><br /><br /><br /><br /><br /><br />Paso 5. Probar grupos usando ""Probar la configuración de grupos LDAP"<br /><br /><br /><br />Finalmente verificar que la autenticación se haga por Nombre de usuario (screenname).<br /></div></div></div><div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-13230604779206214532010-07-01T10:06:00.006-05:002010-07-01T10:34:38.145-05:00Configuración de Liferay / Jboss como servicio en Windows Server (2003, 2008)<b>Configuración de Liferay / Jboss como servicios en Windows 2K Server<br /></b><br /><br /><span class="Apple-style-span" style="font-family:'courier new';">Liferay ---> D:\Portal\liferay-portal-5.2.4<br />JDK 1.6 ---> C:\Program Files\Java\jdk1.6.0_13\</span><br /><br /><br />Existen varias opciones para la configuración de aplicaciones Java (como Jboss, Tomcat etc) como servicios nativos de windows que puedan controlarse de forma automática por el sistema operativo, sin embaro la única recomendada por Jboss es el JavaServiceWrapper de Tanuki, y esa es la que describimos a continuación.<br /><br />1) Descargar el wrapper del sitio oficial<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">http://wrapper.tanukisoftware.org/doc/english/download.jsp<br /></span><br /><div>En este caso se usará la versión para windows 32 bits x86 <span class="Apple-style-span" style="font-family:'courier new';">http://wrapper.tanukisoftware.org/download/3.3.9/wrapper-windows-x86-32-3.3.9.zip</span><br /><br /><br />2) Descomprimir el zip en C:\<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">WRAPPER_HOME=wrapper-windows-x86-32-3.3.9<br /></span><br />3) Configuración de binarios<br /><br />Asumiendo las siguientes variables: (debe registrarlas como variables de entorno del sistema por panel de control/sistema. )<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">WRAPPER_HOME=wrapper-windows-x86-32-3.3.9<br />JBOSS_HOME=D:\PortalLogyca2009\liferay-portal-5.2.4</span><br /><br />Ejecutar en consola como administrador los siguientes comandos:<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">copy WRAPPER_HOME\bin\Wrapper.exe %JBOSS_HOME%\bin\Wrapper.exe<br />copy WRAPPER_HOME\lib\Wrapper.DLL %JBOSS_HOME%\lib\Wrapper.DLL<br />copy WRAPPER_HOME\lib\wrapper.jar %JBOSS_HOME%\lib\wrapper.jar<br />mkdir %JBOSS_HOME%\server\YOURCONFIG\wrapper</span><br /><br />Verificar que la ejecución de los comandos sea existosa.<br /><br />4) Configuración del wrapper<br /><br /><br />Asumiendo <span class="Apple-style-span" style="font-family:'courier new';">JBOSS_HOME=D:\Portal\liferay-portal-5.2.4</span><br /><br />a) Crear la carpeta wrapper:<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">mkdir %JBOSS_HOME%\server\default\wrapper<br /></span><br />b) Crear un archivo llamado " wrapper.conf " en la carpeta creada y pegar en él lo siguiente:<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.java.command=C:\Program Files\Java\jdk1.6.0_13\bin\java<br /><br />wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp<br /><br />wrapper.java.classpath.1=%JBOSS_HOME%/lib/wrapper.jar<br />wrapper.java.classpath.2=%JAVA_HOME%/bin/java/lib/tools.jar<br />wrapper.java.classpath.3=./run.jar<br /><br />wrapper.java.library.path.1=%JBOSS_HOME%/lib</span><br /><br /># Opciones para la JVM JAVA_OPTS<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.java.additional.1=-server<br /></span># variables de entorno - definina aqui otra variables<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.java.additional.2=-Denvironment.variable=value</span><br /># parametros de memoria - configure aqui el valor correcto para su entorno<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.java.additional.3=-Xms128m<br />wrapper.java.additional.4=-Xmx1024m</span><br /><br /># jboss<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.app.parameter.1=org.jboss.Main<br /></span># Parametros para jboss<br /># definir la configuracion de jboss a usar<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.app.parameter.2=-c default<br /></span># IP exacta en la que escucha el servicio.<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.app.parameter.3=-b 0.0.0.0<br /></span># Ubicacion de los logs del wrapper<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.logfile=%JBOSS_HOME%/server/default/log/wrapper.log<br /></span># Nombre del servicio como aparecera en Panel de control/herramientas administrativas/servicios.<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.ntservice.name=JbossLiferay<br /></span># Descripcion del servicio<br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.ntservice.displayname=iferay Portal Jboss AS<br /></span><br /><br />5) Grabar el archivo y salir.<br /><br />6) Probar el servicio </div><div><br />Ejecutar los siguientes comandos:<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">cd %JBOSS_HOME%\bin\<br /></span><br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.exe -c %JBOSS_HOME%\server\default\wrapper\wrapper.conf<br /></span><br />7) Si todo sale OK se procede a instalar el servicio<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">cd %JBOSS_HOME%\bin\<br /></span><br /><span class="Apple-style-span" style="font-family:'courier new';">wrapper.exe -i %JBOSS_HOME%\server\default\wrapper\wrapper.conf<br /></span><br />8) Para desinstalarlo en caso de problemas<br /><br /><span class="Apple-style-span" style="font-family:'courier new';">cd %JBOSS_HOME%\bin\<br />wrapper.exe -r %JBOSS_HOME%\server\default\wrapper\wrapper.conf<br /></span><br /><br />Eso es todo !<br /><br /><br /><br /><br /><br /><span style="font-weight:bold;">Referencias<br /></span>[1] http://community.jboss.org/wiki/RunJBossAsAServiceOnWindows<br />[2] http://wrapper.tanukisoftware.org/doc/english/introduction.html<br />[3] Guía de Instalación - http://wrapper.tanukisoftware.org/doc/english/integrate-simple-win.html</div><div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-4532882538188359712010-07-01T10:03:00.003-05:002010-07-01T10:47:33.645-05:00Configuración de Load Balacer para Liferay PortalConfiguración de Load Balacer para Liferay Portal
<br />
<br /><span style="font-weight:bold;">Tabla de Contenidos
<br /></span>Configuración de Load Balacer para Liferay Portal
<br />0. Definir las máquinas o IPs que harán el balanceo
<br />1. Activar los módulos de apache necesarios
<br />2. Crear un archivo de configuración para el load balancer
<br />3. Configurar los dos Tomcat incluidos como servicios del JBoss donde corre Liferay para que acepten conexiones desde el proxy vía AJP
<br />4. Reiniciar los dos liferay y apache y listo !
<br />5. Administrar el balanceador
<br />
<br />Aplica para:
<br />
<br /><span class="Apple-style-span" style="font-family:'courier new';">Apache 2.2.x
<br />Liferay Portal 5.2.3
<br />Jboss 4.2 / Jboss 5 / Tomcat 5
<br />Linux / Windows </span>
<br />
<br />Esta configuración es útil cuando se quiere balancear cargas entre varios liferay para atender más clientes, para usar mejor la infraestructura disponible, para aumentar la disponibilidad de un servicio, para sobrepasar limitaciones de la plataforma (como en el caso de windows con < style="font-weight:bold;">0. Definir las máquinas o IPs que harán el balanceo
<br /></span>
<br />Ej, se usará una misma máquina para balancear dos Liferay, cada uno usando un set de puertos diferente con la misma IP.
<br />
<br />Puertos AJP (el estándar es el 8009).
<br />
<br /><span class="Apple-style-span" style="font-family:'courier new';">nodo01- localhost: 8109
<br />nodo02 localhost: 8209 </span>
<br />
<br /><span style="font-weight:bold;">1. Activar los módulos de apache necesarios
<br /></span>
<br /><span class="Apple-style-span" style="font-family:'courier new';">sudo a2enmod proxy
<br />sudo a2enmod proxy_ajp
<br />sudo a2enmod proxy_balancer</span>
<br />
<br /><span style="font-weight:bold;">2. Crear un archivo de configuración para el load balancer
<br /></span>
<br />
<br /><span class="Apple-style-span" style="font-family:'courier new';">/etc/apache2/conf.d/httpd-ajp.conf
<br /></span>
<br />con la siguiente información:
<br />
<br /><div># inicio archivo </div><div><location manager=""><span class="Apple-style-span" style="font-family:'courier new';"><div><span class="Apple-style-span" style="font-family:Georgia, serif;"><span class="Apple-style-span" style="font-family:'courier new';"><div>ProxyRequests Off</div><div><Proxy *></div><div> Order deny,allow</div><div> Allow from all</div><div></Proxy></div><div>
<br /></div><div><Proxy balancer://ajpCluster></div><div> BalancerMember ajp://localhost:8109 route=s1</div><div> BalancerMember ajp://localhost:8209 route=s2</div><div></Proxy></div><div>
<br /></div><div><Location /></div><div>ProxyPass balancer://ajpCluster/ stickysession=JSESSIONID</div><div></Location></div><div>
<br /></div><div><Location /balancer-manager></div><div> SetHandler balancer-manager</div><div></Location></div></span></span></div><div><span class="Apple-style-span" style="font-family:Georgia, serif;"><span class="Apple-style-span" style="font-family:'courier new';">
<br /></span></span></div></span></location>## fin archivo
<br />
<br /><span style="font-weight:bold;">3. Configurar los dos Tomcat incluidos como servicios del JBoss donde corre Liferay para que acepten conexiones desde el proxy vía AJP
<br /></span>
<br />
<br />- Verificar que el conector AJP en <span class="Apple-style-span" style="font-family:'courier new';">server/default/deploy/jbossweb*/server.xml</span> esté sin comentarios
<br /><!-- A AJP 1.3 Connector on port 8009 --> <connector protocol="AJP/1.3" port="8009" address="${jboss.bind.address}" redirectport="8443" uriencoding="UTF-8">
<br />- Configurar el conector HTTP así:
<br /><engine name="jboss.web" defaulthost="localhost" jvmroute="s1">
<br />(jvmRoute debe coincidir con los valores puestos en el archivo http-ajp.conf)
<br />
<br />Es necesario además configurar los scripts de inicio para que el conector ajp escuche en los puertos configurados:
<br />
<br />Para el caso de jboss 5x se envía el parámetro en el arranque así:
<br />
<br /><span class="Apple-style-span" style="font-family:'courier new';"><span class="Apple-style-span" style="font-size: x-small; ">./run.sh -b 0.0.0.0 -Djboss.service.binding.set=ports-01 -Djboss.messaging.ServerPeerID=</span><span class="Apple-style-span" style="font-size: x-small; ">
<br /></span></span>
<br />Para el caso de jboss 4.2 es necesario ajustar el archivo jboss-service.xml y seleccionar el pool de puertos que se quiere usar. (Este bloque está con comentario por defecto )
<br /><span class="Apple-style-span" style="font-family:'courier new';"><span class="Apple-style-span" style="font-size: x-small;">
<br /></span></span></engine></connector></div><div><connector protocol="AJP/1.3" port="8009" address="${jboss.bind.address}" redirectport="8443" uriencoding="UTF-8"><engine name="jboss.web" defaulthost="localhost" jvmroute="s1"><span class="Apple-style-span" style="font-family:'courier new';"><span class="Apple-style-span" style="font-size: x-small;"><div> <mbean code="org.jboss.services.binding.ServiceBindingManager"</div><div> name="jboss.system:service=ServiceBindingManager"></div><div> <attribute name="ServerName">ports-01</attribute></div><div> <attribute name="StoreURL">${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml</attribute></div><div> <attribute name="StoreFactoryClassName"></div><div> org.jboss.services.binding.XMLServicesStoreFactory</div><div> </attribute></div><div></mbean></div></span></span><div>
<br /></div>Para tomcat 5 / 6 es necesario editar directamente el conector en el archivo server.xml y configurar allí el puerto deseado.
<br />
<br />
<br /><span style="font-weight:bold;">4. Reiniciar los dos liferay y apache y listo !
<br /></span>
<br />
<br /><span style="font-weight:bold;">5. Administrar el balanceador
<br /></span>
<br />El balanceador se puede administrar desde el browser usando la URL <span class="Apple-style-span" style="font-family:'courier new';">http://localhost/balancer-manager</span></engine></connector></div><div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-81165621097618830202009-07-06T10:18:00.005-05:002009-07-06T14:08:00.548-05:00Configuración de Liferay y Jackrabbit con PostgreSQLEste artículo da un vistazo rápido a la configuración de la biblioteca documental de Liferay Portal con Jackrabbit con persistencia en una base de datos PostgreSQL. <br /><br />Se asume que se parte de una configuración limpia, es decir, que no se hará migración de datos<br />de una configuración previa. <br /><br /><br />0. <span style="font-weight:bold;">Detener liferay portal</span> <br /><br />1. <span style="font-weight:bold;">Limpiar la configuración de jackrabbit</span> -<br />Mover el repositorio a un directorio nuevo <br /><br />$ mv ~/liferay/jackrabbit ~/liferay/jackrabbit.0<br /><br />2. <span style="font-weight:bold;">Configuración inicial de la base de datos</span> <br />Se creará una base de datos llamada jcr con usuario jcr. <br /><br />Nota. <span style="font-style:italic;">Es necesario descargar una versión actualizada del driver jdbc para postgres desde http://jdbc.postgresql.org y ubicar el jar ~/server/default/lib/ext</span><br /><br />su - postgres <br />createuser jcr -P <br />createdb -E utf8 -O jcr jcr <br /><br />3. <span style="font-weight:bold;">Configurar el repositorio de jackrabbit y documentLibrary<br /></span><br />En ~/deploy/ROOT.war/WEB-INF/classes/portal-ext.properties<br />poner las siguientes líneas:<br /><br />#<br /># JCR<br />#<br />jcr.jackrabbit.repository.root=/home/username/liferay/jcr<br /><br />#<br /># DocLibrary<br />#<br />dl.hook.impl=com.liferay.documentlibrary.util.JCRHook<br /><br /><br />4. <span style="font-weight:bold;">Iniciar Liferay para que se cree el nuevo repositorio en ~/liferay/jcr</span><br /><br />./run.sh <br /><br />5. <span style="font-weight:bold;">Configuración del repositorio </span><br /><br />Editar el archivo ~liferay/jcr/repository.xml para que contenga. <br />Nota. Revisar la configuración de claves de la base de datos. <br /><br /><!--repository.xml --><br /><?xml version="1.0"?><br /><br /><Repository><br /> <!-- Configuracion para PostgreSQL REPOSITORY--><br /> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"><br /> <param name="driver" value="org.postgresql.Driver"/><br /> <param name="url" value="jdbc:postgresql://localhost/jcr" /><br /> <param name="user" value="jcr" /><br /> <param name="password" value="***" /><br /> <param name="schema" value="postgresql"/><br /> <param name="schemaObjectPrefix" value="J_R_FS_"/><br /> </FileSystem><br /> <PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager"><br /> <param name="driver" value="org.postgresql.Driver" /><br /> <param name="url" value="jdbc:postgresql://localhost/jcr" /><br /> <param name="user" value="jcr" /><br /> <param name="password" value="***" /><br /> <param name="schema" value="postgresql" /><br /> <param name="schemaObjectPrefix" value="J_R_PM_" /><br /> <param name="externalBLOBs" value="false" /><br /> </PersistenceManager><br /><br /> <Security appName="Jackrabbit"><br /> <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" /><br /> <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule"><br /> <param name="anonymousId" value="anonymous" /><br /> </LoginModule><br /> </Security><br /> <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="liferay" /><br /> <Workspace name="liferay"><br /> <!-- Configuracion para PostgreSQL PM--><br /> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"><br /> <param name="driver" value="org.postgresql.Driver"/><br /> <param name="url" value="jdbc:postgresql://localhost/jcr" /><br /> <param name="user" value="jcr" /><br /> <param name="password" value="***" /><br /> <param name="schema" value="postgresql"/><br /> <param name="schemaObjectPrefix" value="J_FS_"/><br /> </FileSystem><br /> <PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager"><br /> <param name="driver" value="org.postgresql.Driver" /><br /> <param name="url" value="jdbc:postgresql://localhost/jcr" /><br /> <param name="user" value="jcr" /><br /> <param name="password" value="***" /><br /> <param name="schema" value="postgresql" /><br /> <param name="schemaObjectPrefix" value="J_PM_" /><br /> <param name="externalBLOBs" value="false" /><br /> </PersistenceManager><br /><br /> </Workspace><br /> <Versioning rootPath="${rep.home}/version"><br /> <!-- Configuracion para PostgreSQL VERSIONING--><br /> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"><br /> <param name="driver" value="org.postgresql.Driver"/><br /> <param name="url" value="jdbc:postgresql://localhost/jcr" /><br /> <param name="user" value="jcr" /><br /> <param name="password" value="***" /><br /> <param name="schema" value="postgresql"/><br /> <param name="schemaObjectPrefix" value="J_V_FS_"/><br /> </FileSystem><br /> <PersistenceManager class="org.apache.jackrabbit.core.state.db.SimpleDbPersistenceManager"><br /> <param name="driver" value="org.postgresql.Driver" /><br /> <param name="url" value="jdbc:postgresql://localhost/jcr" /><br /> <param name="user" value="jcr" /><br /> <param name="password" value="***" /><br /> <param name="schema" value="postgresql" /><br /> <param name="schemaObjectPrefix" value="J_V_PM_" /><br /> <param name="externalBLOBs" value="false" /><br /> </PersistenceManager><br /> </Versioning><br /> <DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore"><br /> <param name="url" value="jdbc:postgresql:jcr"/><br /> <param name="user" value="jcr"/><br /> <param name="password" value="***"/><br /> <param name="databaseType" value="postgresql"/><br /> <param name="driver" value="org.postgresql.Driver"/><br /> <param name="minRecordLength" value="1024"/><br /> <param name="maxConnections" value="3"/><br /> <param name="copyWhenReading" value="true"/><br /> <param name="tablePrefix" value=""/><br /> <param name="schemaObjectPrefix" value="JCR_"/><br /> </DataStore><br /></Repository><br /><br />6. <span style="font-weight:bold;">Reiniciar liferay.</span><br /><br />7. Verificar que los objetos se crearon correctamente en la base y que no hay errores en consola, haciendo una prueba de upload de archivo a la DocumentLibrary <br /><br />8. Eso es todo ! <br /><br /><br /><span style="font-weight:bold;">Referencias</span><br /><br />http://jackrabbit.apache.org/getting-started-with-apache-jackrabbit.html<br /><br />http://www.onjava.com/pub/a/onjava/2006/10/04/what-is-java-content-repository.html?page=1<br /><br />http://www.ibm.com/developerworks/java/library/j-jcr/<div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com0tag:blogger.com,1999:blog-5922807741574062368.post-21089725293493435672008-06-27T16:54:00.026-05:002008-06-27T23:46:45.696-05:00Liferay Portal en JBoss AS 4.2.2 GALiferay Portal es distribuido por defecto como un paquete pre-armado(bundle) que incluye la configuración completa de un servidor de aplicaciones dado (Jboss, BEA, Glassfish etc). No obstante, en un entorno de producción es probable que sea necesario utilizar el portal, pero solo como una aplicación más que comparte los recursos con otras aplicaciones y servicios. Otra razón para usar Liferay Portal como una aplicación más dentro de un servidor de aplicaciones existente, es si existe, por ejemplo, la necesidad de utilizar EJBs, pues esta no está disponible en el paquete prearmado distribuido por Liferay.<br /><br />A continuación se presentan los pasos para llevar a cabo la configuración y el despliegue de Liferay en JBoss 4.2.2 GA.<br /><br /><span style="font-weight: bold;">Nota.</span> <span style="font-style: italic;">Este procedimiento presume que se está usando alguna distribución de Linux / Solaris y que se está usando el JDK 1.5</span> <br /><br />1. <span style="font-weight: bold;">Descargar los paquetes necesarios<br /></span><br />+ <a href="http://downloads.sourceforge.net/lportal/liferay-portal-5.0.1.war">Liferay-portal</a><br />+ <a href="http://ufpr.dl.sourceforge.net/sourceforge/lportal/liferay-portal-dependencies-5.0.1.zip">Liferay-portal-dependencies</a><br />+ <a href="http://www.jboss.org/downloading/?projectId=jbossas&url=http://sourceforge.net/project/showfiles.php?group_id=22866&package_id=16942&release_id=548923">JBoss 4.2.2GA</a><br /><br /><br />2. <span style="font-weight: bold;">Crear directorios de trabajo</span><br /><br />mkdir -p ~/apps/tmp<br /><br />3. <span style="font-weight: bold;">Configurar variables de entorno</span><br /><br />export JAVA_HOME=<ruta al jdk instalado ><br />export PATH=$JAVA_HOME/bin:$PATH<br /><br />4. <span style="font-weight: bold;">Instalar y configurar JBoss AS 4.2.2GA</span><br /><br />a. Descomprimir e instalar paquete<br /><br />unzip jboss-4.2.2.GA.zip -d ~/apps<br />cd ~/apps<br />ln -s jboss-4.2.2.GA jboss<br /><br /><br />b. Configurar opciones de memoria para JBoss<br /><br />cd jboss/bin<br />vi run.conf<br /><br />Modificar la línea de JAVA_OPTS que está sin comentar así:<br /><br />JAVA_OPTS="-Xms512m -Xmx1204m -XX:MaxPermSize=256m -Dsun.rmi.dgc.client.gcInterval=3600000 \ -Dsun.rmi.dgc.server.gcInterval=3600000"<br /><br />5. <span style="font-weight: bold;">Probar la instalación de JBoss</span><br /><br />cd ~apps/jboss/bin<br />./run.sh -c default<br /><br />Una vez haya iniciado probar la conexión desde un browser a la dirección de la máquina, puerto 8080, ej http://192.168.0.2:8080<br /><br />Detener luego el proceso usando CTRL+C en la consola donde fue lanzado el script run.sh.<br /><br />6. Configurar una base de datos para Liferay<br />En este caso el ejemplo está con hypersonic, no obstante aplica para cualquier otra base de datos.<br /><br />a. Configurar un datasource en JBoss para Liferay<br /><br />cd ~/apps/jboss/server/default/deploy<br />vi liferay-ds.xml<br /><br />Pegar el texto a continuación:<br /><br /><datasources><br /> <local-tx-datasource><br /> <jndi-name>jdbc/LiferayPool</jndi-name><br /> <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}liferayDB</connection-url><br /> <driver-class>org.hsqldb.jdbcDriver</driver-class><br /> <user-name>sa</user-name><br /> <password></password><br /> <min-pool-size>5</min-pool-size><br /> <max-pool-size>20</max-pool-size><br /> <idle-timeout-minutes>0</idle-timeout-minutes><br /> <prepared-statement-cache-size>32</prepared-statement-cache-size><br /> <metadata><br /> <type-mapping>Hypersonic SQL</type-mapping><br /> </metadata><br /> <depends>jboss:service=Hypersonic,database=liferayDB</depends><br /> </local-tx-datasource><br /><br /> <!-- For hsqldb accessed from jboss only, in-process (standalone) mode --><br /> <mbean code="org.jboss.jdbc.HypersonicDatabase"<br /> name="jboss:service=Hypersonic,database=liferayDB"><br /> <attribute name="Database">liferayDB</attribute><br /> <attribute name="InProcessMode">true</attribute><br /> </mbean><br /></datasources><br /><br /><br />b. Iniciar y detener JBoss para que cree los archivos correspondientes a la nueva base en hypersonic.<br /><br />7. Configurar e Instalar Liferay Portal 5<br /><br />a. Descomprimir el paquete de Liferay en el directorio temporal<br /><br /><br />cp liferay-portal-5.0.1.war ~/apps/tmp<br />cd ~/apps/tmp<br />mkdir tmp-war<br />jar xvf liferay-portal-5.0.1.war -C tmp-war <br /><br />b. Liferay por defecto trata de correr en la raiz del servidor de aplicaciones, pero en este caso queremos que responda a una URL diferente, por ejemplo /portal. Para ello debemos modificar algunos archivos de configuración así:<br /><br />cd tmp-war <br />cd WEB-INF <br /><br />+ <span style="font-weight:bold;">web.xml</span><br />Editar web.xml y agregar después del primer elemento <web-app> lo siguiente:<br /><br /> <context-param><br /> <param-name>root_path</param-name><br /> <param-value>/portal</param-value><br /> </context-param><br /><br /><br />+ <span style="font-weight:bold;">jboss-web.xml</span><br />Editar jboss-web.xml y cambiar el context-root a /portal<br /><br /><context-root>/portal</context-root> <br /><br /><br />+ <span style="font-weight:bold;">portal-ext.properties</span><br />Crear el archivo portal-ext.properties en ~/apps/tmp/tmp-war/WEB-INF/classes<br />y digitar los siguientes datos:<br /><br />#portal-ext.properties <br />portal.ctx=/portal<br />auto.deploy.dest.dir=../server/default/deploy<br />company.security.strangers=false<br />locales=es_ES,en_US<br />auto.deploy.deploy.dir=../liferay/deploy<br /># fin -portal-ext.properties.<br /><br />c. Instalar las dependencias adicionales<br />Es necesario copiar las algunas librerías adicionales al lib de JBoss para que el portal pueda iniciar sin problemas. <br /><br />unzip -j liferay-portal-dependencies-5.0.1.zip -d ~/apps/jboss/server/default/lib<br /><br />d. Copiar Liferay Portal como WAR expandido en JBoss <br /><br />mv ~/apps/tmp/tmp-war ~/apps/jboss/server/default/portal.war <br /><br /><br />8. Eso es todo! <br />Ahora basta con iniciar el servidor de aplicaciones para tener Liferay operando en JBoss y con la posibilidad de usar todas las herramientas adicionales proveídas por el servidor de aplicaciones como por ejemplo los EJB. <br /><br /><br /><span style="font-weight:bold;">Referencias</span><br /><br />1. http://www.liferay.com/web/guest/community/forums/-/message_boards/message/769405;jsessionid=1B48FB7B19DE2F6669A4CB44C5500AC6<br /><br />2. http://wiki.liferay.com/index.php/Liferay_with_EJB3_and_JBoss%2C<br /><br /><span style="font-weight:bold;">Marcas y derechos</span><br /><br /><br />Liferay ®, Liferay Portal son marcas registradas de Liferay Inc. <br />JBoss ®es una marca registrada de Red Hat Inc. <br />Java ®es una marca registrada de Sun Microsystems<br />Linux ®es una marca registrada de Linus Torvalds. <br /><span><!-- ADDTHIS BUTTON BEGIN --><br /><script type="text/javascript"><br />addthis_pub = 'YOUR-ACCOUNT-ID';<br /></script><a href="http://www.addthis.com/bookmark.php" onMouseOver="return addthis_open(this, '', '[URL]', '[TITLE]')" onMouseOut="addthis_close()" onClick="return addthis_sendto()"><img src="http://s9.addthis.com/button1-bm.gif" width="125" height="16" border="0" alt="" /></a><script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script><br /><!-- ADDTHIS BUTTON END --></span><br /><br /><br /></ruta><div class="blogger-post-footer">Grupo DOT (c) 2008 - Todos los derechos reservados</div>Anonymoushttp://www.blogger.com/profile/04479873178324622091noreply@blogger.com2