sábado 27 de octubre de 2007

¿Es mejor competir o colaborar?

Muchas veces en la vida, en nuestro afán de buscar el mejor resultado para nosotros mismos, preferimos competir que colaborar con las personas que nos rodean.

Como simple ejemplo, basta echar un vistazo al tráfico diario en nuestras calles a la hora punta.



Y es cierto que, en ocasiones, esto nos lleva a "ganar momentáneamente". ¡He conseguido adelantar a todos esos coches y pasar el primero...!, ¡qué listo soy...! Y nos vamos con una sensación de éxito, que nos llevará a intentar repetir la hazaña una y otra vez.

Sin embargo, nos damos cuenta de que pocas veces obtenemos el resultado deseado y que, en nuestro intento, llevamos a otras muchas personas a hacer lo mismo, provocando un atasco diario que nos perdudica a todos. ¡Qué caos...! En general y en promedio salimos perdiendo.

La conclusión es evidente: es mejor colaborar que competir.

Pero hay un problema cuando son muchas las personas y es difícil mantener un acuerdo: basta que alguien se pervierta un poco para que todo el sistema resulte contaminado.

Así es nuestro mundo: tenemos a mano la mejor solución de equilibrio, pero este equilibrio es inestable. Es como un huevo perfectamente colocado en la punta de un alfiler: la más mínima desviación hará que caiga y se rompa.



¿Es que estamos condenados a vivir con la peor de las soluciones?

---

Otro ejemplo: el equilibrio de Nash.

Ver cómo nos lo cuentan en la película "Una mente maravillosa", en oposición a la visión de Adams Smith de que, en la competencia, la visión individual sirve al bien común.


Ver también Equilibrio de Nash y Pensamiento Sistémico, un artículo muy bueno de José Monzó.

Si hay un conjunto de estrategias con la propiedad de que ningún jugador puede beneficiarse cambiando su estrategia mientras que los otros jugadores no alteren la suya, entonces ese conjunto de estrategias y sus beneficios correspondientes constituyen un equilibrio.


John Nash
---

Otro ejemplo es el dilema del prisionero, cuyo enunciado según Wikipedia es:
La policía arresta a dos sospechosos. No hay pruebas suficientes para condenarlos, y tras haberlos separado, los visita a cada uno y les ofrece el mismo trato.
  • Si uno confiesa y su cómplice no, el cómplice será condenado a la pena total, diez años, y el primero será liberado.
  • Si uno calla y el cómplice confiesa, el primero recibirá esa pena y será el cómplice quien salga libre.
  • Si ambos permanecen callados, todo lo que podrán hacer será encerrarlos durante seis meses por un cargo menor.
  • Si ambos confiesan, ambos serán condenados a seis años.

Lo que puede resumirse como:


Tú lo niegas Tú confiesas
Él lo niega Ambos son condenados a 6 meses. Él es condenado a 10 años; tú sales libre.
Él confiesa Él sale libre; tú eres condenado a 10 años. Ambos son condenados a 6 años.

En este caso, lo mejor es llegar a un acuerdo asegurando que ambos permanezcan callados y la condena será simplemente de 6 meses.

---

¿Más ejemplos?
La vida está llena de ellos...

viernes 26 de octubre de 2007

Cómo enfriar una bebida en 2 minutos

¿Has olvidado alguna vez enfriar una bebida?... ¿Ya no te da tiempo?...
Aquí nos muestran (en inglés) cómo enfriar una lata, de 26 a 6 grados en sólo 2 minutos:

  • Un recipiente
  • Hielo
  • Y un puñado de sal




Bueno, si no tenemos sal a mano, siempre podremos echar el hielo a la Coca Cola...
Imagino que funcionará con los botellines de cerveza...

Por recordar: °C = (°F − 32) / 1.8

martes 23 de octubre de 2007

Nuestro cerebro nos engaña - Redes, Eduard Punset



Nuestro cerebro busca nuestra supervivencia a toda costa. Y a veces para conseguirlo es capaz de suplir la información que le falta por fantasías y confabulaciones.
Lo importante es que la información no nos falte, aunque parte de ella no sea exacta. Lo importante es que la realidad se nos presente con un sentido completo y coherente. Que creamos que todos nuestros comportamientos están bajo control. Que nuestra memoria parezca un reflejo de lo ocurrido.
Vivimos en un mundo construido por nuestro cerebro y, a veces, nos muestra cosas que no existen.

Ver la segunda parte del video.

Otros vídeos del programa "Redes", de Eduard Punset, en YouTube.

Búsqueda y sustitución masiva en ficheros con find, sed y expresiones regulares

Supongamos, por ejemplo, que queremos buscar en una determinada carpeta (y en sus subcarpetas incluidas recursivamente) los ficheros de extensión html y hacer una sustitución masiva de un determinado texto que cumpla cierto patrón por otro diferente considerando las coincidencias con el patrón anterior.

Para ello se pueden utilizar los comandos find y sed, de la siguiente manera:

find . -type f -name "*.html" -exec sed -i -e "s/unaCadena/otraCadena/g" "{}" \;
A estas cadenas se pueden aplicar expresiones regulares. Ver también esta hoja rápida de referencia, muy útil.

Otros comandos unix/linux en UNIXhelp.

Si tienes Windows, puedes instalarte Cygwin para ejecutar comandos unix/linux.

domingo 21 de octubre de 2007

Cómo crear una plantilla con JSF y Facelets

Ver también: Cómo crear un componente JSF con Facelets.
Estos son los pasos a seguir:

1. Crear la plantilla
Una plantilla no es más que un documento xhtml con ciertos "huecos", que se definen con <ui:insert name="...">. Cada uno de ellos tiene un nombre.
Por ejemplo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<title><ui:insert name="title">Default title</ui:insert></title>
<link rel="stylesheet" type="text/css" href="./css/main.css"/>
</head>
...
A estos huecos se les puede definir con contenido por defecto, para los casos en que las páginas que usen la plantilla no los cumplimenten.

2. Usar la plantilla en las páginas a desarrollar
Basta con que la página indique la plantilla a usar, con <ui:composition template="...">, y cumplimente los huecos que correspondan, con <ui:define name="...">.
Ejemplo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<ui:composition template="/WEB-INF/layout/layout.xhtml">
<ui:define name="title">CD form</ui:define>
<ui:define name="content">
<!-- use the form tag to set up this form -->
<h:form id="cdForm">
...
</h:form>
</ui:define>
</ui:composition>
</html>

viernes 19 de octubre de 2007

El plan maestro de Google

¿Teoría de la conspiración?



Google es la herramienta de búsqueda más potente del mundo.
Hoy en día, billones de usuarios buscan en Google distintos tipos información.

Lo que fue un proyecto de unos estudiantes, hoy controla la red.
En 1997, Larry Page y Sergey Brin desarrollaron el llamado "Page Rank", un complejo algoritmo matemático que clasifica las web según los enlaces.
Este invento transformó profundamente la forma de acceder a la información.
Google se convirtió rápidamente en la herramienta preferida para la búsqueda en Internet.
Pero esofue sólo el principio.

Actualmente, Google genera enormes beneficios a través de su dominio de la publicidad online.
Esto la hace ser la compañía con más valor del mercado global.
¿Todo esto es por dinero?

Estos hombres tienen un gran "objetivo": "El plan maestro de Google".
Cualquier tipo de información, será accesible a todo el mundo, controlado por el propio Google, con el lema "No seas malo".

Nuevos programas y productos son agregados constantemente al llamado Google Plex. Todo gratis.
¿No está preocupado por tu privacidad?

La fusión perfecta de Software y Hardware, llamada Googleware, le otorga a la compañía un poder mayor al de cualquier otra.
Google almacena todo el conocimiento de la Red en su gigantesca base de datos.
Y hay más...

Gmail ofrece varios gigabytes de libre almacenamiento.
Pero todos tus mails son escaneados.
Google almacena metódicamente los datos personales de varias formas: mediante cookies y cuentas de usuario.
¿Únicamente para ofrecer publicidad contextual?
Google puede crear dossiers increiblemente detallados sobre nosotros.

Un agente de la CIA, denunción que Google cooperaba en secreto con el Gobierno de USA, incluida la CIA.
Pero, aparentando simplemente querer lo mejor para el usuario, Google a comenzado a expandir su dominio online.
Control total, no sólo en la red.

Google dedica parte de su investigación en el terreno de la biología molecular y la genética.
Si Google tuviera un informe acerca de nosotros, incluidos nuestros datos genéticos, cualquier ser humano se convertiría en un ser completamente transparente.

¿Y tú que piensas?
¿Se preocupa realmente Google de nuestra privacidad?

(Vía questchile.wordpress.com).

jueves 18 de octubre de 2007

Cómo crear un componente JSF con Facelets

Ver también: Facelets se ajusta a JSF como un guante.
Los pasos son los siguientes:

1. Instalar y configurar Facelets
Descargar la distribución y copiar jsf-facelets.jar en WEB-INF/lib.
Añadir los siguientes parámetros al fichero web.xml:

<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>

<application>
<locale-config>
<default-locale>en</default-locale>
</locale-config>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
2. Definir el componente
Se hace con <ui:composition>.
Por ejemplo, suponiendo que va a tener los parámetros label, fieldName, sort, backingBean y entity:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:z="http://www.qualcomm.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">

THIS TEXT WILL BE REMOVED
<ui:composition>
<!-- The label attribute is optional. Generate it if it is missing. -->
<c:if test="${empty label}">
<c:set var="label" value="${fieldName}" />
</c:if>

<!-- The sort attribute is optional. Set it to true if it is missing. -->
<c:if test="${empty sort}">
<c:set var="sort" value="${true}" />
</c:if>

<h:column>
<f:facet name="header">
<h:panelGroup>
${label}
<c:if test="${sort}">
[
<h:commandLink styleClass="smallLink"
action="#{backingBean.sort}">
<h:outputText value="asc" />
<f:param name="by"
value="${fieldName}"/>
<f:param name="order" value="asc"/>
</h:commandLink>
,
<!-- Sort descending -->
<h:commandLink styleClass="smallLink"
action="#{backingBean.sort}">
<h:outputText value="asc" />
<f:param name="by"
value="${fieldName}"/>
<f:param name="order" value="dec"/>
</h:commandLink>
]
</c:if>
</h:panelGroup>
</f:facet>
<!-- Display the field name -->
<h:outputText value="${entity[fieldName]}"/>
</h:column>
</ui:composition>
THIS TEXT WILL BE REMOVED AS WELL
</html>
Prestar especial atención al uso de dos parámetros de la siguiente forma:
<h:outputText value="${entity[fieldName]}"/>
3. Crear la libería de etiquetas Facelets
Por ejemplo, el fichero arcmind.taglib.xml declara 3 etiquetas: field, column y columnCommand.
Basta indicar el espacio de nombres, el nombre de cada etiqueta y el fichero de su implementación, cuya ruta es relativa a WEB-INF\facelets\tags.
<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"facelet-taglib_1_0.dtd">
<facelet-taglib>
<namespace>http://www.arc-mind.com/jsf</namespace>
<tag>
<tag-name>field</tag-name>
<source>field.xhtml</source>
</tag>
<tag>
<tag-name>column</tag-name>
<source>column.xhtml</source>
</tag>
<tag>
<tag-name>columnCommand</tag-name>
<source>columnCommand.xhtml</source>
</tag>
</facelet-taglib>
4. Declarar la librería de etiquetas a Facelets en web.xml
Basta indicarlo en el parámetro de contexto facelets.LIBRARIES:
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>
/WEB-INF/facelets/tags/arcmind.taglib.xml
</param-value>
</context-param>
Se pueden indicar múltiples fichero separados por comas.

5. Importarlo y usarlo en las páginas
Importar la librería de etiquetas usando el espacio de nombres definido en el paso 3.
Y con esto, listo para usar.
Ejemplo:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a="http://www.arc-mind.com/jsf">
...
<a:column entity="${cd}" fieldName="title"
backingBean="${CDManagerBean}"/>
...

21/10/2007
Algunas notas importantes:

¿Y si queremos que el componente tenga contenido?
Basta con anotar <ui:insert />, al definir el componente, en el lugar exacto donde se quiere que este contenido aparezca.

¿Y si queremos pasarle como parámetro un método (un "action" por ejemplo)?
Esto no se puede hacer con Facelets, pero puede resolverse pasándole un bean e indicando el método a ejecutar.
Por ejemplo:
<a:columnCommand label="Edit" action="editCD" backingBean="${CDManagerBean}"/>
Y después se haría de esta forma al definir el componente:
<h:commandLink id="#{action}" value="#{label}" action="#{backingBean[action]}"/>

miércoles 17 de octubre de 2007

Cosas que hacer con Coca Cola

¿Tienes una botella de Coca Cola?
Si no sabes que hacer con ella, ahí van algunas ideas... vía YouTube:

¿Alguna otra idea?

domingo 14 de octubre de 2007

¿Necesitas conocer la tecnología?

Si crees que lo tienes todo bajo control, es que no vas suficientemente deprisa.

Mario Andretti
Campeón del mundo de F1, 1978

Vivimos en un entorno de cambio acelerado, en el que las empresas grandes ya no se van a comer a las pequeñas, sino las más rápidas a las más lentas.

Rupert Murdoch

La única ventaja competitiva verdaderamente sostenible es la habilidad para aprender más rápido que tus competidores.

Arie De Geus
Head of Strategic Planning - Royal Dutch/Shell


Es necesario aprender más rápido, ser más eficiente, innovar en los niveles de tecnología, procesos y negocio.
En definitiva: es necesario conocer la tecnología o tener socios que la conozcan.

(Vía E. Dans - SAP Keynote 2004).

Los colores de la web 2.0 en 2007

Se ve que en esto de los colores también hay modas.
Mile's Blog no presenta los colores de la web 2.0 en 2007.
Muy útil.

sábado 13 de octubre de 2007

La seducción de las palabras

Nadie podrá medir el poder que oculta una palabra. Contaremos sus letras, el tamaño que ocupa en un papel, los fonemas que articulamos con cada sílaba, su ritmo, tal vez averigüemos su edad; sin embargo, el espacio verdadero de las palabras, el que contiene su capacidad de seducción, se desarrolla en los lugares más espirituales, etéreos y livianos del ser humano.

La seducción de las palabras
Alex Grijelmo

BumpTop, este escritorio es un lío maravilloso

Anand Agarawala presenta un interfaz de usuario que sigue la metáfora del escritorio llevada al extremo: es un lío maravilloso...

Aunque el vídeo está en Inglés, merece la pena echarle un vistazo:

viernes 12 de octubre de 2007

Galería Polaroid de tus fotos en Flickr

Esta galería ha sido generada usando la aplicación Flash Polaroid Gallery y el feed de fotos del holgazán en Flickr.




Puedes mover las fotos y hacer doble clic para aumentarlas o disminuirlas.


Otras galerías Flash, algunas de ellas para Flickr y Picasa:

¿Qué es un feed?

Este vídeo explica bastante bien qué es un feed y cómo se utiliza:



miércoles 10 de octubre de 2007

Cómo hacer fotografías panorámicas



Para realizar fotografías panorámicas, pueden seguirse los siguientes pasos:

1. Hacer las fotográfias necesarias.
Para cubrir la panorámica deseada (que puede ser cilíndrica o esférica), cada fotografía debe solaparse al menos un 20% con las fotografías contiguas.
Para una panorámica cilíndrica suele bastar entre 8 y 16 fotografías.
Estas fotografías deben hacerse utilizando como eje de rotación el punto nodal, que es diferente para cada cámara y se encuentra entre la lente y el sensor.
Para facilitar esta labor puede utilizarse un trípode y unas rótulas.
Ver algunas de estas herramientas.

2. Pegar las fotografías, realizando los retoques y ajustes requeridos.
Para esto pueden utilizarse diversos programas existentes en el mercado.
Ver esta completa lista de aplicaciones relacionadas.

3. Seleccionar un visor para reproducir la imágen panorámica resultante.
Ver algunos estos ejemplos, con visores QuickTime:
Algunos en Flash:
En JavaScript:
Un ejemplo con un visor Java:

¿Conoces algo más sobre estas tecnologías?

12/10/2007:
Software libre para hacer fotografías panorámicas:

martes 9 de octubre de 2007

La música de "Cuestión de sexo"

La hemos escuchado en la serie de cuatro "Cuestión de sexo".

Se trata de Young Folks, de Peter, Bjorn & John.

Es que es muy pegadiza y está llena de connotaciones...



(Vía De quien es la canción).

11/10/2007:
Ver también la letra en inglés y en español, más un video de ellos en directo.

lunes 8 de octubre de 2007

Estilos CSS en función del navegador

Con el siguiente truco, mediante JavaScript, puedes aplicar diferentes estilos CSS en función del navegador del usuario e incluso dependiendo del sistema operativo:

1. Incluye este JavaScript en tu página, de la siguiente manera:

<script src="css_browser_selector.js" type="text/javascript"></script>
2. Utiliza las siguientes clases CSS en tu hoja de estilos: .[so].[nav] (sin espacio entre .[so] y .[nav]), como en los siguientes ejemplos:
html.gecko div#header { margin: 1em; }
.opera #header { margin: 1.2em; }
.ie .mylink { font-weight: bold; }
.mac.ie .mylink { font-weight: bold; }
.[so].[nav] .mylink { font-weight: bold; }
Códigos de sistema operativo disponibles [so]:
  • win - Microsoft Windows
  • linux - Linux (x11 y linux)
  • mac - Mac OS
Códigos de navegador disponibles [nav]:
  • ie - Internet Explorer (todas las versiones)
  • ie6 - Internet Explorer 6.x
  • ie5 - Internet Explorer 5.x
  • gecko - Mozilla, Firefox, Camino
  • opera - Opera (todas las versiones)
  • opera8 - Opera 8.x
  • opera9 - Opera 9.x
  • konqueror - Konqueror
  • webkit or safari - Safari, NetNewsWire, OmniWeb, Shiira

(Fuente: Rafael Lima).

viernes 5 de octubre de 2007

Ilusiones ópticas de movimiento

Estas imágenes han aparecido ya en muchos blogs, pero no dejan de fascinarme...

¡ No son imágenes animadas, son una ilusión óptica !

En "The Journal of Neuroscience" puedes encontrar una explicación neurológica de esta ilusión de movimiento (en inglés).





Unos trucos:
  • Si miras por un pequeño agujero en un papel o simplemente entre los dedos, la ilusión dejará de producirse. Es el mismo efecto que ocurre con el parpadeo de las estrellas.
  • Pudes acelerar y disminuir este "falso movimiento" simplemente variando el movimiento de los ojos.

miércoles 3 de octubre de 2007

Comparación entre Spring y EJB 3.0

En primer lugar:

  • Spring es un framework de aplicaciones Java/J2EE.
  • EJB es una arquitectura de componentes para el desarrollo y despliegue de aplicaciones empresariales orientadas a objetos y distribuidas.
Por tanto, Spring y EJB no son una misma cosa: Spring es una implementación y EJB 3.0 es una especificación. Además, EJB soporta el desarrollo de componentes distribuidos, cuestión que no está incluida en la definición de Spring.

Lo que hace que la comparación pueda resultar natural es que Spring fuera desarrollado como una reacción a EJB y que tengan algunas áreas de solapamiento.

A continuación se comparan las características de persistencia, gestión de transacciones y el manejo del estado.


Persistencia
  • Ambos soportan la persistencia de una forma funcionalmente equivalente basada en el mapeo objeto-relacional mediante anotaciones en las clases Java o mediante ficheros XML.
  • Spring soporta a la vez varios proveedores de persistencia, como Hibernate, JDO, Toplink, iBatis o cualquier otro proveedor compatible con JPA. EJB soporta cualquier proveedor JPA, que es el API estándar implementado por proveedores como Hibernate, Kodo y Toplink.
  • Spring soporta la persistencia JDBC. EJB no.
  • Para implementar una caché de objetos compartidos por distintas unidades de trabajo (transacciones), lo que se hace en Spring es fijar la sesión (y la transacción) al hilo de ejecución, usando variables locales del hilo de ejecución. Aunque Spring proporciona clases para facilitar la implementación, en EJB el contexto de persistencia se propaga automáticamente en la transacción.
  • Para implementar un mecanismo de “lazy loading”, mediante el cual la ejecución de una consulta a base de datos no se realice hasta que realmente sea necesaria, en Spring se usa un interceptor que debe ser configurado (OpenSessionInViewFilter). EJB simplifica esta labor definiendo un nuevo alcance del contexto de persistencia que permite asociar el tiempo de vida de la caché al de un bean de sesión, denominado “extended persistence context”, que puede especificarse mediante anotaciones.
Por tanto, puede decirse que:

Funcionalmente son equivalentes, aunque Spring es más flexible en su compatibilidad con proveedores de persistencia y EJB simplifica el desarrollo en algunos casos concretos.



Gestión de transacciones
  • Funcionalmente son similares: en ninguno de los dos casos la lógica de negocio tiene que ocuparse explícitamente de la gestión de transacciones, ya que esto se realiza de forma declarativa.
  • En Spring, la demarcación, la propagación y el aislamiento de transacciones se declaran mediante programación orientada aspectos, definiendo proxies para las transacciones en los ficheros de configuración XML.
  • EJB 3.0 aplica la semántica de transacciones automáticamente en todos los métodos públicos de los beans de sesión, sin requerir configuración adicional. La propagación de las transacciones puede definirse mediante anotaciones o con XML.
  • Spring se integra con diferentes APIs de transacciones, incluyendo JDBC, Hibernate y JTA.
  • EJB 3.0 sólo soporta transacciones JTA. Hay que considerar que no todos los contenedores (como Tomcat) soportan JTA, aunque los contenedores EJB sí. En cualquier caso, si se requiere acceder a múltiples recursos en una misma transacción, se requiere una implementación JTA (existen implementaciones open source como JOTM).

Por tanto, puede decirse que:

Funcionalmente son similares, aunque Spring es más flexible en su compatibilidad con las APIs de gestión de transacciones y EJB simplifica el desarrollo en algunos casos concretos.



Manejo del estado

Hay que decir que las arquitecturas con estado no tienen el mismo rendimiento ni se escalan igual que las que no tienen estado. Pero hay que tener en cuenta que el estado es importante para muchas aplicaciones, debido a que la interacción del usuario con el sistema implica a veces una serie de pasos con efecto acumulativo.
  • EJB proporciona una construcción de primer nivel denominada “Stateful Session Bean (SFSB)” para gestionar el estado tras diferentes llamadas a una misma instancia, que ha sido diseñado teniendo en cuenta cuestiones de escalabilidad y tolerancia a fallos. Estos beans son gestionados por el servidor.
  • Spring no proporciona ninguna construcción equivalente aunque proporciona otros métodos para obtener el mismo resultado. Para que un bean de Spring tenga estado no deben ser compartidos entre llamadas. Para ello, el alcance de los beans debe configurarse como “prototype”, de manera que cada vez que se recupera un bean de la factoría se cree una nueva instancia.

Ventajas de los SFSBs:
  • Están diseñados para optimizar el rendimiento, permitiendo el intercambio de beans entre memoria el almacenamiento de persistencia.
  • Pueden ser ejecutados en un proceso separado del proceso que lo llama, lo que permite escalar las capas independientemente o separarlas por motivos de seguridad.
  • Pueden implementar el interfaz opcional “SessionSynchronization” para poder deshacer los cambios en caso de deshacerse una transacción.

Opciones para implementar el estado:
  • Base de datos: Tiene la ventaja de que es compartida por todos los servidores de aplicaciones. Sin embargo, esta es la capa menos escalable. Y si se usa una caché de segundo nivel, los datos tendrán que ser replicados.
  • Sesión http: Es fácil de usar, pero los datos deben replicarse y no hay seguridad en las transacciones.
  • Caché en memoria: Compartidos por todos los servidores de aplicaciones, potencialmente más eficiente que usar la base de datos. Los datos deben replicarse y no hay seguridad en las transacciones.

Por tanto, puede decirse que:

Ambos permiten las aplicaciones con estado, aunque con Spring había que implementar la forma de gestionar el rendimiento y la escalabilidad tal y como lo hacen los SFSBs.




(Vía DevX.com).