martes, 30 de mayo de 2017

ORACLE Database Queryes: Ejemplo de Sentencia MERGE.

Hoy daremos un ejemplo de como podemos utilizar la sentencia MERGE en ORACLE. Resolveremos un problema utilizando el esquema HR que ya viene creado en la Base da Datos Oracle XE 11G.

Requisitos:

  • Tener instalada la Base de Datos y tener acceso a ella, de preferencia rol de DBA.
  • Haber desbloqueado el Usuario HR (ALTER USER HR ACCOUNT UNLOCK;).
  • Tener permisos de UPDATE.
  • Tener un IDE para administrar la Base de Datos (Toad, SQLDeveloper, etc.), esto no es requerido al no haber opción esta el sqlplus.

Problema a resolver:

Escriba una sentencia de actualización que incremente en 7% el salario de los empleados (EMPLOYEES.SALARY) si se encuentran cumpliendo años de laborar en la empresa.
Asegurarse que el incremento no exceda los $1,000. Todos recibirán incremento excepto los que cumplen 2 años  o menos. Debe resolver este problema utilizando una única sentencia de actualización y no un bloque de código PL/SQL.


Nota:  hire_date = Fecha de contratación.

Análizamos el problema:
Entonces, tomando el problema en cuestión, podemos definir lo que se quiere:
  1. Vamos a incrementar el Salario en la tabla HR.EMPLOYEES un 0.07%
  2. Solamente a los que tengan más de dos años de laborar en la empresa.
  3. El incremento no debe ser mayor a $1000.


Ideas que se me ocurren para solucionar:
  1. Podríamos usar un CORRELATED UPDATE con subqueryes (código engorroso a mi juicio)
  2. Usamos un MERGE, donde en el SELECT ya vaya la data preparada para actualizarse, siempre usaríamos un subquery.
  3. Lastimosamente, como lo tenemos que hacer con una sola sentencia no es posible usar un bloque PLSQL. Pero definitivamente un bloque anónimo sería una buena opción.
  4. ¿Se les ocurre otra forma, respetando las reglas del problema?
Resolviendo:
1. Hagamos primero el SELECT que utilizaremos con las validaciones.

SELECT EMP.EMPLOYEE_ID
      ,EMP.SALARY
      ,(EMP.SALARY *0.07) INCREASE
 FROM HR.EMPLOYEES EMP
 WHERE MONTHS_BETWEEN(SYSDATE,HIRE_DATE) > 24
Entendiendo el código:
Necesitamos los 3 campos: EMPLOYEE_ID, SALARY y el INCREASE (es el incremento de SALARIO, multiplicamos el salario por 0.07 que es el equivalente al 7%).
En las condiciones usamos MONTHS_BETWEEN, sabiendo que los años tienen 12 meses y queremos solamente aquellos empleados que tienen más de dos años (osea 24 meses).

2. Lo siguiente será aplicar la condición de que el incremento no sea mayor que $1000, para ello recurrimos a convertir nuestro primer query en un subquery y agregar un query principal que solamente tendrá los valores que necesitamos.


SELECT NSAL.EMPLOYEE_ID,
               CASE
                WHEN NSAL.INCREASE < 1000
                  THEN
                    (NSAL.SALARY + NSAL.INCREASE)
                  ELSE
                    (NSAL.SALARY + 1000)
              END NEW_SALARY
 FROM
              (SELECT EMP.EMPLOYEE_ID
                              ,EMP.SALARY
                             ,(EMP.SALARY *0.07) INCREASE
                FROM HR.EMPLOYEES EMP
                WHERE     MONTHS_BETWEEN(SYSDATE,HIRE_DATE) > 24) NSAL;

Entendiendo el código:
Conservamos el EMPLOYEE_ID, que es nuestra llave. Hacemos el incremente de salario tomando en cuenta la condición que no sea mayor a 1000, los que tengan más de 1000 de incremento solamente les sumaremos 1000, y los que sea menor será el nuevo salario sumando el salario anterior más la porción a incrementar.
Usamos como tabla base nuestro primer query, que ya nos había filtrado los datos de los empleados que tenían más de dos años de laborar en la empresa.

3. Para finalizar, usaremos la sentencia MERGE que nos permitirá actualizar la tabla EMPLOYEES utilizando los valores ya filtrados y tomando como llaves los EMPLOYEE_ID que necesitamos.

MERGE INTO HR.EMPLOYEES EMUSING (SELECT NSAL.EMPLOYEE_ID,               CASE                WHEN NSAL.INCREASE < 1000                  THEN                    (NSAL.SALARY + NSAL.INCREASE)                  ELSE                    (NSAL.SALARY + 1000)              END NEW_SALARY            FROM              (SELECT EMP.EMPLOYEE_ID                              ,EMP.SALARY                             ,(EMP.SALARY *0.07) INCREASE                FROM HR.EMPLOYEES EMP                WHERE     MONTHS_BETWEEN(SYSDATE,HIRE_DATE) > 24) NSAL        ) SALON (EM.EMPLOYEE_ID = SAL.EMPLOYEE_ID)WHEN MATCHED THEN  UPDATE SET  EM.SALARY = SAL.NEW_SALARY;

Entendiendo el código:
Dentro de nuestro USING del MERGE tenemos nuestro Query completo, que ya tiene filtrada la data que necesitamos.
El MERGE se hace directo a la tabla EMPLOYEES, usando la llave EMPLOYEE_ID para relacionar (como se puede ver en la sentencia ON).
Cuando los EMPLOYEE_ID hacen match, entonces se actualiza el campo SALARY de EMPLOYEES con el nuevo valor de salario que está dentro de nuestro query.

Como recomendación, en vez de usar SYSDATE usa una fecha cualquiera que te permita segmentar los datos que están en HR.EMPLOYEES  ya que los HIRE_DATES que allí están son antiguos entonces terminará por actualizar todos los empleados a esta fecha. Para mis pruebas usé TO_DATE('14/01/2007','DD/MM/YYYY'), esta fecha me permitió solamente actualizar 25 registros.

Espero que le sirva a alguien este ejemplo, cualquier comentario, corrección o sugerencia puedes comentarnos y será un placer apoyarte.

domingo, 12 de febrero de 2017

Yu-Gi-Oh! DUEL LINKS - Konami

Un saludo a todos los lectores de este blog. En esta ocasión traemos para ustedes un review y una recomendación de un juego que la verdad está excelente y queremos compartirles la experiencia con el mismo :)


El juego esta basado en la serie de Yu-Gi-Oh! y los personajes son los de la serie que salió ya hace algunos años (1998), y básicamente esta basada en un juego de cartas que los personajes de la serie toman como un juego en un inicio hasta que esto se convierte en una situación complicada en la que involucra a tipos peligrosos que manejan poderes oscuros y tienen algún tipo de descendencia egipcia.

Previos a este juego salieron varios para Game Boy, PS, y otras consola que fueron populares en su momento. Diferencia bien marcada de este juego respecto a los otros es que puedes jugar en línea con otra cantidad innumerable de duelistas (vale la pena mencionar que Konami sacó una versión que no tuvo buena recepción para pc).

La plataforma esta vez, ha sido móbiles específicamente lo hemos probado para Android. Y te vamos a mostrar lo que nos ha parecido.


Al iniciar el juego puedes elegir entre el deck de Yugi o el de su némesis Kaiba,  nosotros elegimos el de Yugi y la verdad no nos arrepentimos. Más adelante podrás ganar el deck de Kaiba, y irán saliendo otros personajes que te irán dando nuevas cartas para tus decks y podrás jugarlos.

Personajes como Pegasus, los podrás obtener solamente en eventos especiales. A medida avanzas en el juego podrás tener a Joey, Tea, Mai, Kaiba, Bandit Keith, etc. Cada uno te irá dando recompensans a medida lo vayas avanzando de nivel.


Podrás retar diferentes duelistas que encontrarás en la ciudad, esto te servirá para "farmear" ganar punto, niveles y nuevas cartas que irás añadiendo a tu deck. Además que podrás probar tus cartas para armar un deck lo suficientemente bueno cuando te enfrentes con otros jugadores en el modo online.


A medida vayas ganando llaves podrás jugar contra los duelistas legendarios que a mejor nivel te darán mayores recompensas, entre ellas algunas de las cartas que poseen en sus decks respectivos. Además te servirá para ir cumpliendo las diferentes misiones que el juego te propone.


Podrás jugar en línea a través de los diferentes tipos de duelos, esto te servirá para subir de rangos y ganar recompensas. Además de acuerdo a tu rango podrás participar también en torneos oficiales que Konami patrocina.


Podrás comprar cartas con las gemas que consigas o con dinero a través de google wallet, por el momento hay 4 booster packs que están disponibles para que puedas obtener nuevas cartas. También existe el cambiacartas, que al cambiarle materiales que conseguirás durante el juego te permitirá tener cartas raras.


En cada booster pack podrás obtener algunas cartas raras, que normalmente pueden ser útiles en tu deck de acuerdo a como lo armes.


El cambiacartas estará disponible a medida avances de nivel, y de la misma forma podrás obtener cartas mejores si subes a un buen nivel.


Podrás editar tu deck según requieras para cada duelo o un deck con lo mejor que tengas. Lo importante es que a través de esta opción planees tu mejor estrategia.


En conclusión este juego te mantendrá muy entretenido, y te lo recomendamos definitivamente. Descárgalo para tu celular o tablet, no te arrepentirás.

sábado, 25 de abril de 2015

Heroes of Storm (HotS): La nueva propuesta MOBA de Blizzard

Buen día,

En esta ocasión haré un pequeño review sobre el nuevo juego de Blizzard, en lo personal me parecen entretenidos los de tipo MOBA (Multiplayer Online Battle Arena).

Según el sitio de Battle Net el juego saldrá oficialmente el 02/06/2015, sin embargo ya es posible jugar la Beta Cerrada del juego si tienes una key para la misma. Casualmente me han regalado una key para el juego la cual usaré para probar jugabilidad y hacer el review sobre este juego.


Personajes.
Utilizando los personajes de antiguos juegos de Blizzard, los ha reunido tanto héroes como villanos en la Arena de Batalla. De esta forma podemos ver algunos de los personajes, los podes ver en este sitio:

Heroes

Requerimientos para jugar.


Windows

MINIMUM REQUIREMENTSRECOMMENDED SPECIFICATIONS
Operating System
Windows® XP / Windows Vista® / Windows® 7 / Windows® 8 with the latest service pack
Windows® 7 / Windows® 8 64-bit with the latest service pack
Processor
Intel® Core™ 2 Duo or AMD Athlon™ 64 X2 5600+
Intel® Core™ i5 or AMD™ FX Series Processor or better
Video
NVIDIA® GeForce® 7600 GT, ATI Radeon™ HD 2600 XT, or Intel® HD Graphics 3000
NVIDIA® GeForce® GTX 650 or AMD Radeon™ HD 7790 or better
Memory
2 GB RAM
4 GB RAM
Storage
10 GB available hard drive space
Internet
Broadband internet connection
Media
None for the recommended digital installation
Input
Keyboard and mouse required. Other input devices are not supported.
Resolution
1024 x 768 minimum display resolution



Mac

MINIMUM REQUIREMENTSRECOMMENDED SPECIFICATIONS
Operating System
OS® X 10.9.x (latest version)
OS X® 10.10.x (latest version)
Processor
Intel Core™ 2 Duo
Intel® Core™ i5 or better
Video
NVIDIA® GeForce® GT 330M or ATI Radeon™ HD 4670
NVIDIA® GeForce® GTX 780M or AMD Radeon™ HD 6970 or better
Memory
4 GB RAM
8 GB RAM
Storage
10 GB available hard drive space
Internet
Broadband internet connection
Media
None for the recommended digital installation
Input
Keyboard and mouse required. Other input devices are not supported.
Resolution
1024 x 768 minimum display resolution
Note: FileVault options and case-sensitive formatted volumes are not supported for installation of Blizzard games.
Verificado en BattleNet


Trailers del Juego.





Jugabilidad.
Como la mayoría de juegos de este tipo, Heroes Of Storm cuenta con cuatro roles principales para tus héroes:

  1. Asesino: Hacen mucho daño pero no soportan mucho daño.
  2. Guerrero: Hacen daño melee, y a la vez soportan mucho daño.
  3. Soporte: Tienen habilidades que apoyan a los aliados.
  4. Especialista: Tienen diferentes habilidades que apoyan al equipo.

Diferencias marcadas con otros MOBA.
En este juego se olvida el crear una build a partir de items, y a diferencia a medida avanzas en la partida vas seleccionando entre las diferentes pasivas (algunas veces activas), son actualizables a medidas los campeones suben de nivel.

Adicionalmente también los asesinatos enemigos y toda la experiencia se reparte en equipo, por lo que el teamwork es sumamente importante acá mas allá del trabajo individual.




Acceder a tu servidor CentOS/RHEL 7 desde Escritorio Remoto de Windows

Por alguna razón quisiste acceder remotamente a tu server y estabas usando tu pc Windows, es tiempo de que aprendas a configurar tu servidor para que permita sesiones remotas.



Requisitos

  • Tener instalado el modo gráfico de tu servidor (Gnome es funcional).
  • Tener configurados los repositorios EPEL y nux.
    • # rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 
    • # rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm

Comenzamos
Instalamos xrdp desde los repositorios:
# yum -y install xrdp tigervnc-server

Iniciamos el servicio:
# systemctl start xrdp.service

Hacemos que el servicio este disponible siempre que inicie el servidor:
# systemctl enable xrdp.service

Creamos las reglas en el firewall:
# firewall-cmd --permanent --zone=public --add-port=3389/tcp

# firewall-cmd --reload

Debería funcionar, sino funciona revisa la sección de problemas que podrían presentarse. Para iniciar, entra en Windows colocas la ip de tu servidor (tiene que estar en la misma red que el cliente) y debería pedirte las credenciales.





Sección de problemas
Si estas acá es porque no pudiste accesar desde tu cliente al servidor.

La razón por la que no puedes ingresar a tu servidor podría ser SELINUX, revisa el estado:
#sestatus

Si el estado que te devuelve es diferente a "enabled", entonces detente acá, porque no es problema de SELINUX.

Si el estado esta "enabled", y verificando la línea current mode, tiene definido como valor "enforcing" entonces allí tenemos un problema.

Para resolverlo te recomiendo el siguiente camino:
  1. Usa un editor de texto, puede ser vi. Abre el archivo /ect/selinux/config
  2. Una vez has abierto el archivo cambia la línea SELINUX=enforced
  3. La línea deberá quedarte así: SELINUX=permissive
  4. Reinicia el servidor, e intenta la conexión nuevamente.
Si logras conectarte, hasta aquí llega el tutorial. Si no logras conectarte, habría que buscar otras soluciones para tu problema.

lunes, 20 de abril de 2015

Instalando tus drivers de Nvidia en CentOS 7

En esta ocasion instalaremos los drivers de la tarjeta grafica de Nvidia (en mi caso particular una Geforce 210).



Lo primero sera descargar el driver propietario desde la pagina de Nvidia:

Driver Nvidia

Actualizamos el sistema.

# yum update



 Lo siguiente sera actualizar el kernel:

# yum install kernel-devel kernel-headers gcc make



 Comparamos el kernel instalado con el que se corre actualmente, ambos deben coincidir, sino es asi reinicia y actualiza hasta que coincidan:


En mi caso coincide, si a ti no te coincide actualiza:

# yum -y upgrade kernel kernel-devel 

Colocaremos el diver por defecto Nouveau en lista negra, para evitar cualquier conflicto con el driver que instalaremos:

Tenemos algunas formas para hacerlo, pero lo recomendado es modificar dos archivos:

1. /etc/modprobe.d/blacklist.conf

A este le agregamos la linea:
blacklist nouveau 

2. /etc/default/grub en la parte que dice GRUB_CMDLINE_LINUX le agregamos:

rd.driver.blacklist=nouveau

quedara algo asi:

GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet rd.driver.blacklist=nouveau"

Habiendo modificado estos archivos actualizamos nuestrs configuraciones:

# grub2-mkconfig -o /boot/grub2/grub.cfg 

Reiniciamos el servidor.

Teniendo esta configuracion previa, estamos listos para instalar el driver de Nvidia:

Pasamos a modo sin graficos:

# init  3

Nos dirigimos al directorio donde esta el instalador de Nvidia y le daos permiso de ejectuarse:

# chmod +x <Nvidia file>.run

Luego lo ejecutamos:

./<Nvidia file>.run

Finalizamos acá regresando a modo gráfico:

# init 5

Cualquier consulta en los comentarios.


miércoles, 15 de abril de 2015

CentOS 7 y Windows 7 Dual Boot

¿Que tal gente?

Introducción.
Tenía días de no postear, en esta oportunidad les cuento que acabo de hacerme de un pc sencillo pero que esta haciendo las funciones de servidorcito. Se me ocurrió instalarle CentOS 7 y compartire con ustedes las experiencias con el mismo.





Comenzamos.
Para comenzar tenemos los siguientes requisitos:

  • Tener disco de instalación de Windows 7
  • Descargar el ISO de CentOS7: Descarga CentOS 7

Sección 1: Preparando el espacio en el disco (Windows 7).

(Ver imágenes del proceso seguido al final de esta sección).


  1. Instalamos el Windows 7 de la manera tradicional.
  2. Una vez instalado Windows 7, dirígete a la utilidad Administrador de Discos dando clic derecho en "Equipo" y seleccionando la opción Administrar:
    • En el administrador de discos selecciona la partición  de Windows (la mas grande) clic derecho y selecciona la opción reducir volumen.
    • Se tardara un poco en cargar, cuando cargue sera posible tomar un poco del espacio libre del disco actual y lo utilizaremos para nuestro SO Linux.
    • Seleccionamos una cantidad, recomiendo alrededor de unos 40 Gb para disponer de buen espacio.
  3. Una vez has reducido el disco  principal, se crea una partición nueva que le denomina espacio no asignado. A partir de este momento habrá que formatearlo para que posteriormente sea utilizado en la instalación de Linux.
    • Para darle formato, usaremos el asistente de Nuevo Volumen simple, dando clic derecho sobre la partición nueva.
    • Darle siguiente en todas las pantallas, hasta llegar a la pantalla que pide el sistema de archivos, el tamaño de la unidad de asiganción y  la etiqueta de volumen.
    • En la etiqueta de volumen cambiarlo por Linux o CentOS, algo que les recuerde que esa es la partición que utilizarán.
Sección 1: Paso 2 - Selecciona Reducir Volumen

Sección 1: Paso 2 - Cargando

Sección 1: Paso 2 - Reducir el tamaño del disco

Sección 1: Paso 3 - Formateando la partición

Sección 2: Instalando Linux en nuestra partición.
Una vez tengamos libre nuestra partición para Linux, lo siguiente es instalar el sistema operativo, para ello debemos preparar nuestro CD o nuestra USB con el instalador de CentOS 7.

Si lo harán a través de USB les recomiendo algún programa que les permita crear un instalador booteable a partir de una ISO tipo LinuxLive USB Creator. Adicionalmente recuerden configurar en la BIOS que bootee a partir de la USB.


Para mi caso yo lo hice con un LiveCD.


  1. En el menú seleccionar la opción Instalar CentOS.
  2. Cuando inicia el instalador, verificamos las opciones de Instalación, es decir el destino de la instalación. Esto será desde el menú principal de la instalación.
Seleccionamos la unidad de disco en donde esta nuestra partición y chequeamos la opción de configurar particionamiento .

Vamos a utilizar nuestra partición vacía primero seleccionándola y dándole el símbolo "-" y luego el símbolo "+"



Observamos que nuestra partición se encuentra disponible con el Label que le colocamos en Windows al formatear


Creamos una partición como /home alli estara nuestor home, el device type debe quedar como estandar y de tipo ext4
Creamos la partición SWAP, a diferencia de las demás con ext4 esta queda SWAP y siempre Tipo de dispositivo estándar


La partición mayor, esta en el mount point / con el resto de espacio disponible coloquen un valor mayor para tomar mas capacidad

Al final todas las particiones tienen que quedar estándar y ext4 (excepto la SWAP).

Continuén la instalación hasta que esta haya concluído, al reiniciar el equipo se podrá  apreciar el menú de selección del SO, pero no aparecerá Windows aún.

Sección 3: Configurando GRUB 2
En este punto ya tenemos instalado Windows 7 y CentOS, ya sea en modo gráfico o en modo minimal server (este es mi caso).

Iniciamos CentOS

Nos logueamos con nuestra cuenta

Una vez dentro de CentOS, si estamos en modo gráfico abrimos la consola y buscamos el archivo boot/grub2/grub.cfg y con el editor de texto que utilicemos lo abrimos con permiso de root.

En mi caso utilice vi:
# vi boot/grub2/grub.cfg

Agreguen una línea similar a esta:

menuentry "Windows 7" {
set root='(hd0,1)'
chainloader +1
}

Verificar en que partición tendrían su Windows, esto es importante!

Guardamos los cambios y actualizamos el grub:
# grub2-mkconfig -o /boot/grub2/grub.cfg

Reiniciamos el equipo, y ahora si aparecerá la opción de Windows 7


Cualquier duda o comentario, pueden consultármela y trataré de apoyarles.

jueves, 26 de junio de 2014

Iniciando con Spring Framework.

g


Spring Framework.

Spring es, como lo definen sus autores, un framework ligero para construir aplicaciones empresariales. Spring se encuentra dividido en distintos módulos, cada uno de los cuales se encarga de distintas funcionalides en nuestra aplicación. Posee un gran gama de módulos utilizados para distintas tareas, difícilmente todos se utilizan en una sola aplicación.

Si quieres saber más, te invito a visitar su sitio oficial: Spring Site


Construyendo un Hello Cruelty World con Spring.

Que necesitas:
  • Eclipse IDE (Yo utilizaré el Kepler).
  • Librerías Spring, bajalas Descargar Aquí
Comencemos:

1.
Crea Nuevo Proyecto.
Abrí el eclipse, crea un nuevo proyecto Java. Ponele el nombre que se te venga en gana, yo le puse SpringOne.



2.
Agrega las dependencias en el Java Build Path.

Lista de dependencias:
antlr-runtime-3.0.1
org.springframework.aop-3.1.0.M2
org.springframework.asm-3.1.0.M2
org.springframework.aspects-3.1.0.M2
org.springframework.beans-3.1.0.M2
org.springframework.context.support-3.1.0.M2
org.springframework.context-3.1.0.M2
org.springframework.core-3.1.0.M2
org.springframework.expression-3.1.0.M2
commons-logging-1.1

Descargalas desde aquí, o en el vínculo de más arriba.

Luego agregalas al Build Path. Clic en add external jars, selecciona las librerias que descargaste en el post (descomprimidas lógicamente).




3.
Crea una clase que la usaremos como bean.

Creen un paquete primero al que le pondremos com.betaroot, allí contendremos las clases para que no estén en el source.


Sobre el package creado crea la clase bean que la denominaremos HelloCruelty, el código para esta clase a continuación:

package com.betaroot;

public class HelloCruelty {
private String message;

public void getMessage() {
System.out.println("Your Message : " + message);
}

public void setMessage(String message) {
this.message = message;
}

}

4.
Crea una clase main.

Crea main sobre el paquete com.betaroot A esta le llamaremos MainClass.

package com.betaroot;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainClass {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"Beans.xml");

HelloCruelty obj = (HelloCruelty) context.getBean("helloCruelty");

obj.getMessage();
}
}

5.
Crea el XML de Configuración de Beans.

Este lo vamos a crear en el wizard de New:


Lo nombraremos Beans.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id="helloCruelty" class="com.betaroot.HelloCruelty">
       <property name="message" value="Hello Cruelty World!"/>
   </bean>

</beans>

6.
Corre la aplicación.
El output que debería mostrar la app corriendo es:

Hello Cruelty World!


Explicación.

ClassPathXmlApplicationContext().
Permite cargar la configuración de los beans y eventualidades basadas en la API que se provee, se encarga de la creación e inicialización de todos los objetos.

getBean. 
este método lo utilizamos en el contexto creado. Este permite usar un ID para el bean que retorna un objeto generico que finalmente puede ser  convertido a un objeto actual. Una vez tienes este objeto, lo puedes usar para llamar cualquier método de clase.

Creación del XML de Configuración de Beans:
Por lo general los desarrolladores lo llaman Beans.xml. Es necesario asegurarse que el archivo este disponible en el CLASSPATH y que use el mismo nombre en la aplicación actual cuando se crea el application context como el que se muestra en la clase Main.

El Beans.xml es usado para asignar ID's únicas a los diferentes Beans y para controlar la creación de objetos con diferentes valores sin impactar ninguno de los Spring source files (archivos de fuente Spring). 

Cuando una aplicación Spring carga en memoria, el Framework hace uso del archivo de configuración para crear todos los beans definidos y asignarles un ID único definido en el tag <bean>. Puedes usar un <property> tag para pasar diferentes valores de variables usados en tiempo de creación del objeto.