Curso: Java – Spring

¿Qué es spring?

  • Es un Framework: «entorno de trabajo» compuesto de «reglas» y «herramientas» que facilitan el desarrollo de aplicaciones
  • Es una alternativa al desarrollo de aplicaciones JEE (Java Enterprice Edition) ya que es más simple y ligero

Ventajas de Spring

  • loose coupling: cuando debe hacer una modificación en una clase y se da cuenta que debe hacerla también en muchas más, entonces loose coupling es cuando solo se debe hacer en un único lugar
  • Inyección de dependencias: permite la separación de los módulos de un programa java para que las modificaciones solo se hagan en un solo lugar
  • POJOS (Plain Old Java Objects): son clases sencillas que no hereda de otra y no implementa una interfaz. Ej: persona
  • Boilerplate code: crear plantillas de código
  • AOP: Programación Orientada a Aspectos: permite una modularización muy alta de las tareas que debe realizar cada clase

Core Spring

Contenedor central

  • Esta el creador de Beans
  • Lectura de archivos
  • Archivos config
  • Manejo de propiedades y dependencias
  • Context: almacén de los bits en memoria
  • SpEL: Spring Expression Language: es un lenguaje de expresiones que permite ejecutar objetos en tiempo de ejecución

Infraestructura

  • AOP
  • Transaccines
  • Logeos
  • Seguridad de las aplicaciones

Acceso a Datos

  • JDBC: nos permite acceder a datos con mucho menos código con Helpers class
  • ORM: Object Relational Maping: nos permite acceder a datos con enfoque orientado a objetos, es decir nos permite utilizar la programación orientada a objetos con bases de datos y nos permite la integración con hibernate
  • Transactions: nos permite reducir el código de llamadas a bases de datos
    • OXM
    • JMS: Java Messaging Service: manejo de mensajes java

Web/MVC

  • Servlet
  • WebSocket
  • Web
  • Portlet
  • Nos permiten la integración con JSF / Structs

Pruebas

  • Nos permite desarrollar prueba durante el desarrollo de la aplicación
  • Unit
  • Integration
  • Mock Object: objetos simulados que podemos crear para desarrollar pruebas

Instalación del entorno de desarrollo

Java

  • Instalamos
sudo apt update
sudo apt install default-jdk
java -version

Eclipse

  • Instalamos
sudo apt install default-jre
sudo snap install --classic eclipse

Tomcat

  • https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-10-on-ubuntu-20-04
  • Por seguridad tomcat debe correr con un usuario sin privilegios
sudo useradd -m -d /opt/tomcat -U -s /bin/false tomcat
  • Verificamos que tenemos java
sudo apt update
sudo apt install default-jdk
java -version
  • Lo descargamos
cd /tmp
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.23/bin/apache-tomcat-10.0.23.tar.gz
  • Lo extraemos
sudo tar xzvf apache-tomcat-10*tar.gz -C /opt/tomcat --strip-components=1
  • Como ya creamos el usuario tomcat lo asiganamos como dueño
sudo chown -R tomcat:tomcat /opt/tomcat/
sudo chmod -R u+x /opt/tomcat/bin
  • Configuramos los usuarios Admin
sudo nano /opt/tomcat/conf/tomcat-users.xml
  • Y agregamos las siguientes lineas antes del la etiqueta de cierre
<role rolename="manager-gui" />
<user username="manager" password="AC2" roles="manager-gui" />

<role rolename="admin-gui" />
<user username="admin" password="AC2" roles="manager-gui,admin-gui" />
  • Here you define two user roles, manager-gui and admin-gui, which allow access to Manager and Host Manager pages, respectively. You also define two users, manager and admin, with relevant roles.
  • Tomcat esta configurado para restringir el acceso a las páginas de administración a menos que la conexión venga del propio servidor
  • Para poder acceder a estas páginas con los usuarios que creamos, abrimos
sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml
  • Vamos a comentar las siguientes lineas
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

X
<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
  • Abrimos
sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml
  • Y comentamos
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
X
<!--  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
  • Ahora vamos a configurar el servicio para que inicie con el sistema y que systemd lo reinicie si falla
  • Tomcat requiere java que se instala con el JDK, para esto necesitamos saber donde esta instalado
sudo update-java-alternatives -l
  • Resultado
java-1.11.0-openjdk-amd64      1111       /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64
  • Ahora creamos el archivo que administrará el servicio
sudo nano /etc/systemd/system/tomcat.service
  • Agregamos
  • donde JAVA_HOME es la dirección que obtuvimos anteriormente
[Unit]
Description=Tomcat
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
  • Here, you define a service that will run Tomcat by executing the startup and shutdown scripts it provides. You also set a few environment variables to define its home directory (which is /opt/tomcat as before) and limit the amount of memory that the Java VM can allocate (in CATALINA_OPTS). Upon failure, the Tomcat service will restart automatically.
  • Reiniciamos systemd
sudo systemctl daemon-reload
  • Iniciamos tomcat
sudo systemctl start tomcat
  • Verificamos su estado
sudo systemctl status tomcat
  • Resultado
tomcat.service - Tomcat
     Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor prese>
     Active: active (running) since Wed 2022-08-10 16:38:16 CST; 16s ago
    Process: 99578 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/>
   Main PID: 99585 (java)
      Tasks: 29 (limit: 19075)
     Memory: 168.4M
     CGroup: /system.slice/tomcat.service
             └─99585 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.uti>

ago 10 16:38:16 SER-DESA systemd[1]: Starting Tomcat...
ago 10 16:38:16 SER-DESA startup.sh[99578]: Tomcat started.
ago 10 16:38:16 SER-DESA systemd[1]: Started Tomcat.
  • Lo habilitamos para que inicie con el sistema
sudo systemctl enable tomcat
  • Ingresamos al servicio
http://10.20.200.137:8080/

Instalación de Spring

  • Extraemos el archivo
  • Y dentro encontramos una carpeta «lib» que contiene todas librerías necesarias de spring
  • Ahora abrimos eclipse
  • Vamos al menú->Windows->Perpective-> Open Perpective->Other
  • Seleccionamos Java (Default)
  • Ahora creamos un Nuevo Projecto
  • File->New->Java Project
  • Se crea el proyecto
  • Hay encontramos la carpeta de las librerías java y la carpeta «src» donde esta el código

Imnportar Spring al proyecto

  • Ahora para importar spring al Proyecto
  • Creamos una carpeta Proyecto->Clic Derecho ->New->Folder
  • Ahora vamos a la carpeta de libs de Spring copiamos los archivos
  • Y los arrastramos a la carpeta
  • Ahora para decirle al proyecto que utilice esta carpeta
  • Ingresamos a las propiedades del proyecto: carpeta proyecto->clic derecho->Propiedades
  • Y vamos a la ruta Java Build Path -> Libraries -> Classpath -> Add JARs
  • Buscamos la carpeta y seleccionamos los archivos