lunes, 21 de enero de 2019

Ejecutar aplicaciones Kotlin desde Maven

Construir proyecton Kotlin usando Maven en unos tres pasos.


Vue JS (v-model, v-if, v-for)


He aquí un ejemplo de Vue JS.


<!DOCTYPE html>
 <html lang="es">
 <head>
  <meta charset="utf-8"> 
  <title>Curso de Vue JS</title>
  <script src="https://unpkg.com/vue"></script>
</head>
<style>
.clase{
 background-color: #4ac8b8;
 color:black;
 font-weight: bold;
}
</style>
<body>
<h1>Programando con Vue JS</h1>
<div id="app">
<h2>1. {{ titulo }}</h2>

<div>
 <h3>Libros</h3>
 <ol>
  <li v-for="libro in libros">{{ libro }}</li>
 </ol>
</div>

<div>
 <p>{{ usuario.nombre }} ,
 {{ usuario.edad>30? "Hombre de edad madura" : "Hombre en plena madurez" }} ,
 {{ usuario.activo==true? "Activo" : "Inactivo" }}</p>
</div>

<div>
 <h3>Cursos</h3>
 <ul v-for="todo in todos">
  <li>{{ todo.texto }}</li>
 </ul>
</div>

<div>
 <span v-if="ver">Puedes ver esto</span>
 <span v-if="nover">No puedes ver esto</span>
</div>
<br/>
<div>
<button v-on:click="mayuscula">May&uacute;scula en t&iacute;tulo</button>
<button v-on:click="minuscula">Min&uacute;scula en t&iacute;tulo</button>
</div>

<div>
 <h2>Formulario</h2>
 <p>{{ mensaje }}</p>
 <label>Escribe tu texto aqu&iacute;:</label>
 <input v-model="mensaje" type="text" placeholder="Escribe tu texto aquí" /><br/>
 <label>Password:</label>
 <input type="password" v-model="password"/>
 <p>Password: {{ password }}</p>
 <br/>
 <label>Escribe tu comentario:</label>
 <p style="white-space: pre-line;">{{ comentario }}</p><br/>
 <textarea v-model="comentario" placeholder="Coloca tu comentario"></textarea><br/><br/>
 El contrato incluye vacaciones.
 <input type="checkbox" id="checkbox" v-model="checked">Aceptar contato:<b> 
 <label for="checkbox">{{ checked==true? "Has aceptado el contrato" : "Deberías aceptar el contrato" }}</label></b>
 <div>
  <h3>Lenguajes de programaci&oacute;n:</h3>
  <input type="checkbox" id="java" value="Java" v-model="checkedNames">
  <label for="java">Java</label>
  <input type="checkbox" id="kotlin" value="Kotlin" v-model="checkedNames">
  <label for="kotlin">Kotlin</label>
  <input type="checkbox" id="typescript" value="TypeScript" v-model="checkedNames">
  <label for="typescript">TypeScript</label>
  <br/><br/>
  <span>Lenguajes elegidos: {{ checkedNames }}</span>
  <br/>
  <h3>Estado civil:</h3>
  <input type="radio" id="soltero" value="Soltero" v-model="picked">
  <label for="soltero">Soltero</label>
  <br/>
  <input type="radio" id="casado" value="Casado" v-model="picked">
  <label for="casado">Casado</label>
  <br/><br/>
  <span>Estado civil: {{ picked }}</span>
  <br/>
  <h3>Selecciona:</h3>
  <select v-model="selected">
   <option disabled value="">Selecciona un pa&iacute;s</option>
   <option>M&eacute;xico</option>
   <option>España</option>
   <option>Italia</option>
  </select>
  <span>Seleccionaste: {{ selected }}</span>
  <h3>Selecciona lo que quieras:</h3>
  <select v-model="seleccionado" multiple>
   <option>Arroz con leche</option>
   <option>Malteada con fresa</option>
   <option>Flan napolitano</option>
   <option>Gelatina con fruta</option>
  </select>
  <br/>
  <span>Seleccionaste: {{ seleccionado }}</span>
  <br/>
  <h3>Elige lo que m&aacute;s convenga:</h3>
  <select v-model="selectivo">
   <option v-for="option in options" v-bind:value="option.valor">{{ option.texto }}</option>
  </select>
  <span>Seleccionaste: {{ selectivo }}</span>
  
 </div>

</div>

</div>

<script>
var app = new Vue({
 el:"#app",
 data:{
  titulo: "Aprendiendo Vue JS",
  libros: ['El secreto oscuro de la princesa Asabache','Las incidencias de la Señora Malvarategate','Los dos perros del puento rojo'],
  usuario:{
   nombre:'Genaro Juarez',
   edad:45,
   activo:false
  },
  todos:[
  {texto:'Spring Boot para principiantes'},
  {texto:'Vue JS para desarrolladores Java'},
  {texto:'TypeScript como si fuera en primero'}],
  ver:true,
  nover:false,
  mensaje:'',
  comentario:'',
  checked:false,
  checkedNames:[],
  picked:'',
  selected:'',
  seleccionado:'',
  selectivo:'A',
  options:[{texto:'Uno',valor:'A'}
  ,{texto:'Dos',valor:'B'}
  ,{texto:'Tres',valor:'C'}],
  password:''
 },
 methods:{
  mayuscula: function(){
   this.titulo = this.titulo.toUpperCase();
  },
  minuscula: function(){
   this.titulo = this.titulo.toLowerCase();
  }
 }
});
</script>
</body>
</html>

Links:
https://alquimistadecodigo.blogspot.com/2018/06/vue-js.html

miércoles, 9 de enero de 2019

JPA en ejemplos



He aquí un pequeño proyecto hecho con JPA. El proyecto posee una clase principal (Principal.java) la cual tiene varios métodos que muestran el uso que le podemos dar a la Java Persistence API (listar, buscar, crear y eliminar).

persistence.xml
Archivo xml que nos permite colocar los datos de nuestra DB, archivo SQL, permisos, etc.

Las clases Empleado.java y Departamento.java representan a las tablas contenidas en la BD denominada 'curso'.  EmpleadoGenerar.java y DepartamentoGenerar.java son subclases de la superclase JpaGenerar.java, en esta clase creamos los objetos EntityManagerFactory y los EntityManager los cuales nos permiten crear la persistencia se las entidades y su manipulación.




martes, 8 de enero de 2019

Arrancar Tomcat desde Maven

En esta ocasión veremos como arrancar Tomcat usando Maven, específicamente usaremos un plugin (appassembler-maven-plugin).

Necesitamos una estructura de directorios tipo Maven (algo similar a la imagen de abajo).

proyecto/src/main/java/org/codemonkey/Main.java

proyecto/src/main/java/org/codemonkey/servlets/HolaMundoServlet.java

proyecto/src/main/java/resources

proyecto/src/main/java/webapp/index.jsp

proyecto/src/main/java/webapp/WEB-INF/web.xml 

proyecto/pom.xml


Primero comencemos con el pom.xml, este archivo XML nos permitirá gestionar las depemdencias necesarias:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.codemonkey</groupId>
  <artifactId>jeecurso</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>
  <name>Curso JEE</name>



<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <tomcat.version>9.0.0.M6</tomcat.version>
    </properties>

  <dependencies>
   <dependency>
   <groupId>org.jboss.weld</groupId>
    <artifactId>weld-se</artifactId>
    <version>1.0.1-Final</version>
    </dependency>

    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.4</version>
    </dependency>

   <!-- Tomcat inicio -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>${tomcat.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <version>${tomcat.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jasper</artifactId>
        <version>${tomcat.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jasper-el</artifactId>
        <version>${tomcat.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jsp-api</artifactId>
        <version>${tomcat.version}</version>
</dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency> 

        <dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
</dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-logging-juli</artifactId>
            <version>${tomcat.version}</version>
        </dependency>

        <dependency>
    <groupId>javax.el</groupId>
    <artifactId>el-api</artifactId>
    <version>2.2</version>
</dependency>

  <dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>el-impl</artifactId>
    <version>2.2</version>
</dependency>

            <!-- Tomcat fin -->



  </dependencies>




<!-- Ejecutar aplicaciones Tomcat-->
<build>
    <finalName>embeddedTomcatSample</finalName>
    <plugins>

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>appassembler-maven-plugin</artifactId>
            <version>2.0.0</version>
            <configuration>
                <assembleDirectory>target</assembleDirectory>
                <programs>
                    <program>
                        <mainClass>org.codemonkey.Main</mainClass>
                        <name>webapp</name>
                    </program>
                </programs>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>assemble</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>




    </plugins>
  </build>

  
</project>


Clase principal del proyecto.

Main.java
package org.codemonkey;

import java.io.File;

import javax.servlet.ServletException;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class Main {

    public static void main(String[] args) throws LifecycleException, InterruptedException, ServletException {

        String docBase = "src/main/webapp/";

        Tomcat tomcat = new Tomcat();
        String webPort = System.getenv("PORT");
        if(webPort == null || webPort.isEmpty()) {
            webPort = "8080";
        }
        tomcat.setPort(Integer.valueOf(webPort));

        tomcat.addWebapp("/", new File(docBase).getAbsolutePath());
         System.out.println("configuring app with basedir: " + new File("./" + docBase).getAbsolutePath());

        tomcat.start();
        tomcat.getServer().await();
    }

}

Nota: Prestar atención a la ruta "src/main/webapp/" es donde se colocará la página pincipal.

Página JSP (index.jsp)
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <title>Index</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <h1>
           Tomcat en Maven          
        </h1>
        <ul>
            <li><a href="/HolaMundoServlet">Hola Mundo Servlet</a></li>     
        </ul>
        
    </body>
</html>

Servlet (HolaMundoServlet.java)

package org.codemonkey.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//http://localhost:8080/HolaMundoServlet
@WebServlet("/HolaMundoServlet")
public class HolaMundoServlet extends HttpServlet
{
   protected void doGet(HttpServletRequest request
                       ,HttpServletResponse response)
                     throws ServletException,IOException
   {
       // obtenemos un stream vinculado al navegador
      PrintWriter out = response.getWriter();

       // todo lo que escribimos llega al navegador
      out.println("<html><body>");

       // obtengo la fecha y hora actual
      String hoyEs = (new Date()).toString();

      out.println("<h1>Hola Mundo, hoy es: "+hoyEs+"<h1>");
      out.println("</body><html>");

       // cerramos el stream
      out.close();
   }
}

Ahora a definir los Servlets y su mapeo (web.xml).

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">
<display-name>Curso JEE</display-name>
<description>Tomcat con Maven</description>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>HolaMundoServlet</servlet-name>
<servlet-class>org.codemonkey.servlets.HolaMundoServlet</servlet-class>
</servlet>



<servlet-mapping>
<servlet-name>HolaMundoServlet</servlet-name>
<url-pattern>/HolaMundoServlet</url-pattern>
</servlet-mapping>


</web-app>

¿Cómo compilo y ejecuto el programa?
1. Empaquetar (desde una terminal) todo con:

$ mvn package
2. Ejecutar aplicación y abrir el navegdor en http://localhost:8080/
$ sh /target/bin/webapp

¡Listo!


Ejecutar aplicaciones Kotlin desde Maven

Construir proyecton Kotlin usando Maven en unos tres pasos.