Skip to Content
Author's profile photo Former Member

SAP HCP Manual y Configuración Eclipse (Tools) 2016 [ HANA(JDBC, JPA) MDP, HANA XS ]- [Guia Parte1]

Información:

Comparto esta guia en la cual explico las configuraciones a realizar, el entorno de HCP y ejemplos prácticos que se aplican para cualquier desarrollo que queramos hacer en el futuro.

CONFIGURACION INICIAL CON HCP Tools Java

Install Java Tools for Eclipse: https://help.hana.ondemand.com/help/frameset.htm?e815ca4cbb5710148376c549fd74c0db.html

1) Install New Software para cada version correspondiente de eclipse: Se recomienda utilizar Eclipse en su ultima version.


/wp-content/uploads/2016/05/1_954011.png


2) De la lista desplegada, seleccionar los de la siguiente lista:

/wp-content/uploads/2016/05/2_954012.png

3) Quedando de la siguiente forma las utilidades en Eclipse: Es muy recomendable utilizar una version de eclipse luna que no tenga otros plugins previamente instalados.


/wp-content/uploads/2016/05/3_954013.png

/wp-content/uploads/2016/05/4_954014.png

Una vez instalados los plugins, es necesario seguir los siguientes pasos.

/wp-content/uploads/2016/05/5_954015.png

4) INSTALL SAP HANA CLOUD PLATFORM SDK: https://tools.hana.ondemand.com/#cloud


Una vez se ingresa a la pagina mencionada, se observa las opciones de descarga para el SDK.

/wp-content/uploads/2016/05/6_954016.png

Proceso de instalacion:


/wp-content/uploads/2016/05/7_954017.png

Despues de descargar el Sap Hana Cloud Platform SDK, seguir los siguientes pasos:

/wp-content/uploads/2016/05/8_954018.png

Se procede a configurar el SDK de HCP:

/wp-content/uploads/2016/05/9_954019.png

Ahora es necesario configurar el HOST. Para esto escoger el servidor de pruebas que usted utilice para HCP (Hana Cloud Platform).

En este caso utilizo el de Europa:

/wp-content/uploads/2016/05/10_954020.png

/wp-content/uploads/2016/05/11_954021.png

Después de ingresar los valores dar clic en validar para observar que todo este correcto:

/wp-content/uploads/2016/05/12_954022.png

El nombre de usuario se puede obtener desde el HCP,

/wp-content/uploads/2016/05/13_954023.png

Ejemplo:

Imágenes integradas 1

/wp-content/uploads/2016/05/14_954024.png

5) Configuration del Runtime Environment

/wp-content/uploads/2016/05/15_954025.png

Seguir los siguientes pasos:

/wp-content/uploads/2016/05/16_954026.png

Clicen “Next”, y aparecera el siguiente formulario:

/wp-content/uploads/2016/05/17_954027.png

Como se observa, la configuracion de el Servidor para HCP quedo lista:

/wp-content/uploads/2016/05/18_954028.png

6) INSTALL SAP JVM in Eclipse IDE (Opcional pero es recomendado instalarlo en caso de no tenerlo)

Link descarga: https://tools.hana.ondemand.com/#cloud

Escoger el sistema operativo correspondiente:

/wp-content/uploads/2016/05/19_954029.png

Preferiblemente para el SAP JVM la version 7.X o superior.

Proceso de instalación:

/wp-content/uploads/2016/05/20_954030.png

7) Configuración Up the Console Client SDK


Lo primero que se debe hacer es ubicarse por medio de consola Mac o Windows la ruta del SDK instalado. Una vez en ahi, buscar la carpeta llamada “Tools”, dentro de esta se encuentran los programas ejecutables para cada sistema operativo, siendo la extension .bat para Windows y la extension .sh para Mac.

/wp-content/uploads/2016/05/21_954031.png

Ahora se realiza la configuracion basica de los Proxy de conexion:

/wp-content/uploads/2016/05/22_954032.png

Para mas información sobre las configuraciones leer el archivo “readme.txt”.


Creación de la primera aplicacion


Crear un proyecto “Dynamic Web Project”

/wp-content/uploads/2016/05/23_954033.png

Aparece lo siguiente:

/wp-content/uploads/2016/05/24_954034.png

Clic en siguiente, siguiente y se pone lo siguiente:

/wp-content/uploads/2016/05/25_954035.png

Clic en finalizar.


A continuación se procede a crear un nuevo Servlet para el proyecto.

/wp-content/uploads/2016/05/26_954036.png

Se ingresan los siguientes datos, para dar nombre al Servlet y configuracion:

/wp-content/uploads/2016/05/27_954037.png

Clic en “Next”, y se edita la ruta “URL Mappings”

/wp-content/uploads/2016/05/28_954038.png

Clic en “Finish”, y se observa lo siguiente:

/wp-content/uploads/2016/05/29_954039.png

A continuación para el ejemplo, se agrega la siguiente linea de código y se ejecuta el servidor:


/wp-content/uploads/2016/05/30_954040.png

/wp-content/uploads/2016/05/31_954041.png

El resultado de la ejecucion se observa a continuacion:

/wp-content/uploads/2016/05/32_953014.png

8) Deploy aplicacion a SAP HCP (SAP HANA CLOUD PLATFORM)


Para subir la aplicacion al HCP es necesario realizar los siguientes pasos:

Clic derecho en el proyecto -> Run As -> Run on Server

/wp-content/uploads/2016/05/33_953015.png

Aparecera la siguiente pantalla:

/wp-content/uploads/2016/05/34_953018.png

A continuación pide la clave del usuario previamente configurado en un numeral anterior:

/wp-content/uploads/2016/05/35_953019.png

Después de esperar unos minutos al realizar el Deploy, ingresar al HCP, para observar la nueva aplicacion:

/wp-content/uploads/2016/05/36_953020.png

Al dar clic en la aplicacion, se observa las configuraciones y propiedades de la aplicacion:

/wp-content/uploads/2016/05/37_953021.png

Se observa la ejecución de la aplicacion correctamente:

/wp-content/uploads/2016/05/38_953022.png



COMENZAR CON SAP HANA TOOLS


1) Instalar el plugins, https://tools.hana.ondemand.com/mars

/wp-content/uploads/2016/05/39_953023.png

/wp-content/uploads/2016/05/40_953027.png

Una vez instalados, se empezara a configurar lo necesario para realizar el primer ejemplo con una Base de datos Hana.

Ingresar al HCP, y realizar lo siguiente:

/wp-content/uploads/2016/05/41_953028.png

El resultado esperado es el siguiente:

/wp-content/uploads/2016/05/42_953030.png

A continuación, se resumen los pasos:

/wp-content/uploads/2016/05/43_953031.png

2) Conectar a una base de datos HANA en Eclipse IDE  

/wp-content/uploads/2016/05/44_953032.png

A continuación se detallan los pasos a seguir:

/wp-content/uploads/2016/05/45_953036.png

Seleccionar SAP HANA ADMINISTRATION CONSOLE y pulsar Ok.

/wp-content/uploads/2016/05/46_953037.png

Se procede a agregar un nuevo Sistema Cloud:

/wp-content/uploads/2016/05/47_953038.png

/wp-content/uploads/2016/05/48_953039.png

A continuación ingresar la clave del HCP:

/wp-content/uploads/2016/05/49_953040.png

Se muestra a continuación los esquemas disponibles. Seleccionar el creado previamente “ejemplo1”.

/wp-content/uploads/2016/05/50_953042.png

Si todo lo anterior fue correcto, se deberá mostrar en el entorno de trabajo lo siguiente:

/wp-content/uploads/2016/05/51_953044.png

3) Crear un Subpackage

/wp-content/uploads/2016/05/52_pn_953046.png

A continuación se describen los pasos a seguir.

Cambiar de perspectiva:

/wp-content/uploads/2016/05/53_953047.png

Ahora se selecciona el siguiente nodo del esquema base de datos:

/wp-content/uploads/2016/05/54_953052.png

Una vez seleccionado, clic derecho crear nuevo paquete:

/wp-content/uploads/2016/05/55_953053.png

Al dar clic en “Package”, se muestra lo siguiente:

/wp-content/uploads/2016/05/56_953057.png

Se muestra el paquete creado correctamente.

/wp-content/uploads/2016/05/57_953058.png


4) Crear un repositorio WorkSpace.

/wp-content/uploads/2016/05/58_953059.png

A continuación se muestran los pasos a seguir detalladamente.

Crear repositorio:

/wp-content/uploads/2016/05/59_953075.png

/wp-content/uploads/2016/05/60_953076.png

Una vez creado el repositorio, se mostrara la ruta en la cual fue alojado:

/wp-content/uploads/2016/05/61_953077.png

5) Crear un proyecto HANA XS


Nota: XS es JavaScript del lado del servidor extension xsjs


/wp-content/uploads/2016/05/62_953078.png

A continuación se detallan los pasos a seguir:

/wp-content/uploads/2016/05/63_953079.png

/wp-content/uploads/2016/05/64_953080.png

Ingresar el nombre de la aplicacion y dar clic en “Next”.

/wp-content/uploads/2016/05/65_953090.png

Seleccionar el repositorio previamente creado:

/wp-content/uploads/2016/05/66_953091.png

/wp-content/uploads/2016/05/67_953092.png

/wp-content/uploads/2016/05/68_953096.png

Una vez finalice, se creara la aplicacion XS como se muestra en la siguiente imagen:

/wp-content/uploads/2016/05/69_953097.png

6) Creando la aplicacion con Descriptor y roles:


Application descriptor

/wp-content/uploads/2016/05/70_953099.png

El archivo a crear posee como extension .xsapp

/wp-content/uploads/2016/05/71_953100.png

Application access file


Tambien se creara un archivo con extension .xsaccess y el contenido de este archivo sera:

{ "exposed" : true, "default_file": "hola.xsjs" }

/wp-content/uploads/2016/05/72_953101.png

Application privileges file


Crear otro archivo con nombre extension .xsprivileges Con el siguiente contenido:

{ "privileges" :
  [ { "name" : "Basic", "description" : "Basic usage privilege" } ]}

/wp-content/uploads/2016/05/73_953110.png

Role:

Crear un archivo con el nombre model_access.hdbrole el contenido sera el siguiente:

role <package name>::model_access {
application privilege: <package name>::Basic;
}

/wp-content/uploads/2016/05/74_953117.png

7) Creando un archivo JavaScript


/wp-content/uploads/2016/05/75_953118.png

/wp-content/uploads/2016/05/76_953119.png


Código:


$.response.contentType = "text/html"; var output = "Hello, " + $.session.getUsername() + " <br><br>"; var conn = $.db.getConnection(); var pstmt = conn.prepareStatement( "SELECT CURRENT_USER FROM DUMMY" ); var rs = pstmt.executeQuery(); if (!rs.next()) { $.response.setBody( "Failed to retrieve data" ); $.response.status = $.net.http.INTERNAL_SERVER_ERROR; } else { output = output + "This is the response from my SQL. The current user is: " + rs.getString(1); } rs.close(); pstmt.close(); conn.close(); $.response.setBody(output);

Ejecutar el proyecto:


Para subir el proyecto y verificar que no existen errores, es necesario realizar lo siguiente:

/wp-content/uploads/2016/05/77_953120.png

Después de activar correctamente la aplicacion, se procede a ingresar al HCP, he ingresar a la sección HANA XS APPLICATIONS,

/wp-content/uploads/2016/05/78_953121.png

El resultado de la aplicacion es el siguiente:

/wp-content/uploads/2016/05/79_953122.png

INSTALAR SAP HANA CLOUD CONNECTOR

https://tools.hana.ondemand.com/#cloud

SAP Hana Cloud Connector sirve de enlace entre las aplicaciones bajo demanda en SAP HANA Cloud Platform y sistemas en las instalaciones existentes. Combina una fácil configuración con una configuración clara de los sistemas que están expuestos a SAP HANA Cloud Platform. Además, puede controlar los recursos disponibles para las aplicaciones en la nube en esos sistemas. Por lo tanto, puede beneficiarse de sus activos existentes sin exponer todo el paisaje interno.

/wp-content/uploads/2016/05/80_953126.png
/wp-content/uploads/2016/05/81_953127.png

Una vez descargado el archivo comprimido, se procede a extraerlo. A continuación posicionándose en la carpeta extraída

ejecutar al archivo .SH con nombre .go.sh

/wp-content/uploads/2016/05/82_953128.png

Se ingresa en el navegador la ruta: https://localhost:8443 y mostrara lo siguiente:

/wp-content/uploads/2016/05/83_953132.png

Para nombre de usuario ingrese Administrator y para la clave manage     (case sensitive).

Después de ingresar, aparece lo siguiente, por el momento escoger la opción Master.


/wp-content/uploads/2016/05/84_953133.png

A continuación, el sistema solicita el cambio de clave:

/wp-content/uploads/2016/05/85_953134.png

Configuración inicial con el hanatrial:

/wp-content/uploads/2016/05/86_953138.png

Si la configuración se realizo correctamente deberá aparecer la siguiente pantalla con toda la información de conectividad con el hanatrial:

/wp-content/uploads/2016/05/87_953139.png

Configuración del proxy. NOTA: Para este caso no fue necesario

/wp-content/uploads/2016/05/88_953140.png


Agregar persistencia con JDBC (Java Web SDK)


Este tutorial paso a paso se muestra cómo se puede utilizar JDBC para guardar los datos en una sencilla aplicación web Java EE que maneja una lista de las personas.


/wp-content/uploads/2016/05/89_953141.png


1) Creación de un Dynamic Web Proyect


/wp-content/uploads/2016/05/90_953142.png

/wp-content/uploads/2016/05/91_953143.png

/wp-content/uploads/2016/05/92_953150.png

Ahora se procede a crear un nuevo Servlet:


/wp-content/uploads/2016/05/93_953206.png

Configuración del Servlet a crear:

/wp-content/uploads/2016/05/94_953219.png

A continuación se observa el Servlet creado correctamente:

/wp-content/uploads/2016/05/95_953220.png

2) Se procede a crear una nueva clase para el Servlet creado.

/wp-content/uploads/2016/05/96_953221.png

/wp-content/uploads/2016/05/97_953225.png

Cuando se crea la clase correctamente se observa lo siguiente:

/wp-content/uploads/2016/05/98_953226.png


Se procede a pegar el siguiente codigo en la clase. Este codigo declara las variables y metodos basicos para el programa.

package com.sap.cloud.sample.persistence; public class Person { private String id; private String firstName; private String lastName; public String getId() { return id; } public void setId(String newId) { this.id = newId; } public String getFirstName() { return this.firstName; } public void setFirstName(String newFirstName) { this.firstName = newFirstName; } public String getLastName() { return this.lastName; } public void setLastName(String newLastName) { this.lastName = newLastName; } }

La clase queda de la siguiente forma:

/wp-content/uploads/2016/05/99_953227.png

3) Crear la clase PersonDAO

/wp-content/uploads/2016/05/100_953228.png

/wp-content/uploads/2016/05/101_953229.png

Para esta clase, se necesita el siguiente codigo Java:

import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.sql.DataSource; /** * Data access object encapsulating all JDBC operations for a person. */ public class PersonDAO { private DataSource dataSource; /** * Create new data access object with data source. */ public PersonDAO(DataSource newDataSource) throws SQLException { setDataSource(newDataSource); } /** * Get data source which is used for the database operations. */ public DataSource getDataSource() { return dataSource; } /** * Set data source to be used for the database operations. */ public void setDataSource(DataSource newDataSource) throws SQLException { this.dataSource = newDataSource; checkTable(); } /** * Add a person to the table. */ public void addPerson(Person person) throws SQLException { Connection connection = dataSource.getConnection(); try { PreparedStatement pstmt = connection .prepareStatement("INSERT INTO PERSONS (ID, FIRSTNAME, LASTNAME) VALUES (?, ?, ?)"); pstmt.setString(1, UUID.randomUUID().toString()); pstmt.setString(2, person.getFirstName()); pstmt.setString(3, person.getLastName()); pstmt.executeUpdate(); } finally { if (connection != null) { connection.close(); } } } /** * Get all persons from the table. */ public List<Person> selectAllPersons() throws SQLException { Connection connection = dataSource.getConnection(); try { PreparedStatement pstmt = connection .prepareStatement("SELECT ID, FIRSTNAME, LASTNAME FROM PERSONS"); ResultSet rs = pstmt.executeQuery(); ArrayList<Person> list = new ArrayList<Person>(); while (rs.next()) { Person p = new Person(); p.setId(rs.getString(1)); p.setFirstName(rs.getString(2)); p.setLastName(rs.getString(3)); list.add(p); } return list; } finally { if (connection != null) { connection.close(); } } } /** * Check if the person table already exists and create it if not. */ private void checkTable() throws SQLException { Connection connection = null; try { connection = dataSource.getConnection(); if (!existsTable(connection)) { createTable(connection); } } finally { if (connection != null) { connection.close(); } } } /** * Check if the person table already exists. */ private boolean existsTable(Connection conn) throws SQLException { DatabaseMetaData meta = conn.getMetaData(); ResultSet rs = meta.getTables(null, null, "PERSONS", null); while (rs.next()) { String name = rs.getString("TABLE_NAME"); if (name.equals("PERSONS")) { return true; } } return false; } /** * Create the person table. */ private void createTable(Connection connection) throws SQLException { PreparedStatement pstmt = connection .prepareStatement("CREATE TABLE PERSONS " + "(ID VARCHAR(255) PRIMARY KEY, " + "FIRSTNAME VARCHAR (255)," + "LASTNAME VARCHAR (255))"); pstmt.executeUpdate(); } }

El resultado seria algo como esto:

/wp-content/uploads/2016/05/102_953230.png

4) Preparando la aplicacion web para JDBC


Primero se importaran algunas librerías necesarias de Sap Hana Cloud platform SDK

/wp-content/uploads/2016/05/103_953240.png/wp-content/uploads/2016/05/104_953241.png

A continuación buscamos el directorio local en el cual fue alojado el Sap Hana Cloud SDK

Para este caso se debe tener descargado el SDK que se muestra a continuación : https://tools.hana.ondemand.com/#cloud

/wp-content/uploads/2016/05/105_953242.png

Con esto ya podemos seguir con la importacion de la libreria  com.sap.security.core.server.csi_1.x.y.jar

ubicada en la ruta repository/plugins dentro del directorio raiz del SDK.

/wp-content/uploads/2016/05/106_953252.png

/wp-content/uploads/2016/05/107_953253.png

Después de dar clic en finalizar se observa la libreria importada correctamente:


/wp-content/uploads/2016/05/108_953254.png

Adaptando Java build path:


/wp-content/uploads/2016/05/109_953258.png

/wp-content/uploads/2016/05/110_953259.png

Después de actualizar el Build Path se procede a agregar las referencias y descripción de los recursos en el web.xml

/wp-content/uploads/2016/05/111_953260.png

Agregar las siguientes lineas al archivo:

<resource-ref> <res-ref-name>jdbc/DefaultDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> </resource-ref>
<!--Opcional-->
<servlet-mapping> <servlet-name>PersistenceWithJDBCServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

El resultado seria el siguiente:


/wp-content/uploads/2016/05/112_953273.png

5) Extendiendo servlet para usar persistencia


Editamos el archivo que se muestra en la siguiente imagen:


/wp-content/uploads/2016/05/113_953275.png

Agregamos el siguiente código:
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.sap.security.core.server.csi.IXSSEncoder;
import com.sap.security.core.server.csi.XSSEncoder;

/**
* Servlet implementing a simple JDBC based persistence sample application for
* SAP HANA Cloud Platform.
*/
public class PersistenceWithJDBCServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LoggerFactory
.getLogger(PersistenceWithJDBCServlet.class);

private PersonDAO personDAO;

/** {@inheritDoc} */
@Override
public void init() throws ServletException {
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx
.lookup("java:comp/env/jdbc/DefaultDB");
personDAO = new PersonDAO(ds);
} catch (SQLException e) {
throw new ServletException(e);
} catch (NamingException e) {
throw new ServletException(e);
}
}

/** {@inheritDoc} */
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("<p>Persistence with JDBC!</p>");
try {
appendPersonTable(response);
appendAddForm(response);
} catch (Exception e) {
response.getWriter().println(
"Persistence operation failed with reason: "
+ e.getMessage());
LOGGER.error("Persistence operation failed", e);
}
}

/** {@inheritDoc} */
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
doAdd(request);
doGet(request, response);
} catch (Exception e) {
response.getWriter().println(
"Persistence operation failed with reason: "
+ e.getMessage());
LOGGER.error("Persistence operation failed", e);
}
}

private void appendPersonTable(HttpServletResponse response)
throws SQLException, IOException {
// Append table that lists all persons
List<Person> resultList = personDAO.selectAllPersons();
response.getWriter().println(
"<p><table border=\"1\"><tr><th colspan=\"3\">"
+ (resultList.isEmpty() ? "" : resultList.size() + " ")
+ "Entries in the Database</th></tr>");
if (resultList.isEmpty()) {
response.getWriter().println(
"<tr><td colspan=\"3\">Database is empty</td></tr>");
} else {
response.getWriter()
.println(
"<tr><th>First name</th><th>Last name</th><th>Id</th></tr>");
}
IXSSEncoder xssEncoder = XSSEncoder.getInstance();
for (Person p : resultList) {
response.getWriter().println(
"<tr><td>" + xssEncoder.encodeHTML(p.getFirstName())
+ "</td><td>"
+ xssEncoder.encodeHTML(p.getLastName())
+ "</td><td>" + p.getId() + "</td></tr>");
}
response.getWriter().println("</table></p>");
}

private void appendAddForm(HttpServletResponse response) throws IOException {
// Append form through which new persons can be added
response.getWriter()
.println(
"<p><form action=\"\" method=\"post\">"
+ "First name:<input type=\"text\" name=\"FirstName\">"
+ " Last name:<input type=\"text\" name=\"LastName\">"
+ " <input type=\"submit\" value=\"Add Person\">"
+ "</form></p>");
}

private void doAdd(HttpServletRequest request) throws ServletException,
IOException, SQLException {
// Extract name of person to be added from request
String firstName = request.getParameter("FirstName");
String lastName = request.getParameter("LastName");

// Add person if name is not null/empty
if (firstName != null && lastName != null
&& !firstName.trim().isEmpty() && !lastName.trim().isEmpty()) {
Person person = new Person();
person.setFirstName(firstName.trim());
person.setLastName(lastName.trim());
personDAO.addPerson(person);
}
}
}

A continuacion se muestra un ejemplo mas completo en el cual tendra como objetivo, creacion de tablas, insert, select a base de datos Hana desde una aplicacion Java con JPA.


Agregar administrador de contenido Persistente con JPA (Java EE 6 Web Profile SDK)


Esquema:


/wp-content/uploads/2016/05/115_953299.png

Prerequisitos:


Para continuar con la creación de aplicaciones Java con JPA es necesario lo siguiente:

1) Link de descarga: https://tools.hana.ondemand.com/#cloud

/wp-content/uploads/2016/05/117_953312.png

2) Descargar EclipseLink JAR file (requiere eclipselink.jar)  http://www.eclipse.org/eclipselink/downloadsInformation published on non-SAP site version 2.5.x


/wp-content/uploads/2016/05/118_953313.png

3) Crear un Dynamic web proyect en eclipse Start of the navigation path File Next navigation step New Next navigation step Dynamic Web Project (En pasos anteriores se explica el proceso) para este ejemplo el nombre del proyecto sera pesistence-with-ejb


/wp-content/uploads/2016/05/119_953314.png

/wp-content/uploads/2016/05/120_953331.png

/wp-content/uploads/2016/05/121_953332.png

Después clic en siguiente, siguiente y aparecera la siguiente ventana en la cual se seleccionara EclipceLink

/wp-content/uploads/2016/05/122_953333.png

Clic en siguiente y marcar el CheckBox:

/wp-content/uploads/2016/05/123_953334.png

Por ultimo clic en finalizar.


/wp-content/uploads/2016/05/125_953393.png

4) Con esto ya podemos crear aplicaciones persistentes con JPA. A continuación se creara un Servlet nuevo Start of the navigation path File Next navigation step New Next navigation step Servlet End of the navigation path


/wp-content/uploads/2016/05/126_953396.png

/wp-content/uploads/2016/05/126_953396.png



/wp-content/uploads/2016/05/127_953401.png

Ahora es necesario crea una nueva clase llamada Person que tiene el siguiente código:


import javax.persistence.Basic; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.NamedQuery; import javax.persistence.Table; /** * Class holding information on a person. */ @Entity @Table(name = "T_PERSON") @NamedQuery(name = "AllPersons", query = "select p from Person p") public class Person { @Id @GeneratedValue private Long id; @Basic private String firstName; @Basic private String lastName; public long getId() { return id; } public void setId(long newId) { this.id = newId; } public String getFirstName() { return this.firstName; } public void setFirstName(String newFirstName) { this.firstName = newFirstName; } public String getLastName() { return this.lastName; } public void setLastName(String newLastName) { this.lastName = newLastName; } }


/wp-content/uploads/2016/05/128_953402.png


5) Ahora es necesario configurar el archivo XML con nombre persistence.xml


/wp-content/uploads/2016/05/129_953403.png

El detalle de los pasos anteriores es el siguiente:


5.1) Abrir el editor XML adecuado para editar el archivo:

/wp-content/uploads/2016/05/130_953404.png

5.2) Verificar la siguiente información en el Tab General:


/wp-content/uploads/2016/05/131_953405.png

5.3) Verificar la siguiente información en el Tab Options:


/wp-content/uploads/2016/05/132_953407.png

5.4) Verificar la información del tab Connection:

/wp-content/uploads/2016/05/133_953408.png


6) Crear EJB Session Bean:


En este archivo se encuentran las operaciones a realizar sobre la base de datos. Para crearlo seguir los siguientes pasos:


Start of the navigation path File Next navigation step New Next navigation step Other Next navigation step EJB Next navigation step Session Bean (EJB 3.x)  End of the navigation path

/wp-content/uploads/2016/05/134_953409.png

/wp-content/uploads/2016/05/135_953410.png

/wp-content/uploads/2016/05/136_953411.png

Al final se debe tener el proyecto lo siguiente:


/wp-content/uploads/2016/05/137_953412.png


El código que tendra EJB PersonBean.java es el siguiente:


import java.util.List; import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; /** * Session Bean implementation class PersonBean */ @Stateless @LocalBean public class PersonBean { @PersistenceContext private EntityManager em; public List<Person> getAllPersons() { return em.createNamedQuery("AllPersons").getResultList(); } public void addPerson(Person person) { em.persist(person); em.flush(); } }

7)  Preparando la aplicacion web para JPA


Es necesario importar la libreria com.sap.security.core.server.csi_1.x.y.jar que se encuentra en el SDK Java EE 6 web.


Para esto seguir los siguientes pasos:


/wp-content/uploads/2016/05/138_953413.png


/wp-content/uploads/2016/05/139_953414.png


En la ventana que aparece, clic en Browser, para buscar la siguiente ruta:


/wp-content/uploads/2016/05/140_953415.png

Una vez se escoge la ruta, aparece lo siguiente:

/wp-content/uploads/2016/05/141_953416.png

Ahora se importara la libreria eclipselink.jar


/wp-content/uploads/2016/05/142_953420.png

/wp-content/uploads/2016/05/143_953421.png

Al final la carpeta Lib deberá de contener las siguientes librerías:


/wp-content/uploads/2016/05/144_953422.png


8) Extendiendo un Sevlet usando Persistencia.


En el archivo PersistenceEJBServlet.java agregar el siguiente código


import java.io.IOException; import java.sql.SQLException; import java.util.List; import javax.ejb.EJB; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sap.security.core.server.csi.IXSSEncoder; import com.sap.security.core.server.csi.XSSEncoder; /** * Servlet implementation class PersistenceEJBServlet */ @WebServlet("/") public class PersistenceEJBServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final Logger LOGGER = LoggerFactory .getLogger(PersistenceEJBServlet.class); @EJB PersonBean personBean; /** {@inheritDoc} */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("<p>Persistence with JPA!</p>"); try { appendPersonTable(response); appendAddForm(response); } catch (Exception e) { response.getWriter().println( "Persistence operation failed with reason: " + e.getMessage()); LOGGER.error("Persistence operation failed", e); } } /** {@inheritDoc} */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { doAdd(request); doGet(request, response); } catch (Exception e) { response.getWriter().println( "Persistence operation failed with reason: " + e.getMessage()); LOGGER.error("Persistence operation failed", e); } } private void appendPersonTable(HttpServletResponse response) throws SQLException, IOException { // Append table that lists all persons List<Person> resultList = personBean.getAllPersons(); response.getWriter().println( "<p><table border=\"1\"><tr><th colspan=\"3\">" + (resultList.isEmpty() ? "" : resultList.size() + " ") + "Entries in the Database</th></tr>"); if (resultList.isEmpty()) { response.getWriter().println( "<tr><td colspan=\"3\">Database is empty</td></tr>"); } else { response.getWriter() .println( "<tr><th>First name</th><th>Last name</th><th>Id</th></tr>"); } IXSSEncoder xssEncoder = XSSEncoder.getInstance(); for (Person p : resultList) { response.getWriter().println( "<tr><td>" + xssEncoder.encodeHTML(p.getFirstName()) + "</td><td>" + xssEncoder.encodeHTML(p.getLastName()) + "</td><td>" + p.getId() + "</td></tr>"); } response.getWriter().println("</table></p>"); } private void appendAddForm(HttpServletResponse response) throws IOException { // Append form through which new persons can be added response.getWriter() .println( "<p><form action=\"\" method=\"post\">" + "First name:<input type=\"text\" name=\"FirstName\">" + " Last name:<input type=\"text\" name=\"LastName\">" + " <input type=\"submit\" value=\"Add Person\">" + "</form></p>"); } private void doAdd(HttpServletRequest request) throws ServletException, IOException, SQLException { // Extract name of person to be added from request String firstName = request.getParameter("FirstName"); String lastName = request.getParameter("LastName"); if (firstName != null && lastName != null && !firstName.trim().isEmpty() && !lastName.trim().isEmpty()) { Person person = new Person(); person.setFirstName(firstName); person.setLastName(lastName); personBean.addPerson(person); } } } 

Con este ultimo paso, se puede ejecutar localmente el proyecto y empezar a almacenar datos en una base de datos HANA. Por el momento se ejecutara localmente, mas adelante se mostrara como actualiza los registros en la base de datos Hana en la nuve (HCP).


Para ejecutar el programa realizar lo siguiente:


/wp-content/uploads/2016/05/145_953423.png


Escoger a continuación el servidor Java EE 6 Web:


/wp-content/uploads/2016/05/146_953424.png

El servidor empieza a iniciar, mostrando en la siguiente ventana en la parte inferior:


Perspective Java EE


/wp-content/uploads/2016/05/147_953425.png


9) Desplegar aplicativo en la nube HCP (Deploy)


El paso para realizar deploy es sencillo y al finalizar se observara los esquemas creados para el aplicativo. Se vera un ejemplo de Select a la base de datos para observar en tiempo real la actualización de la tabla de personas.


Para realizar deploy:


/wp-content/uploads/2016/05/148_953426.png


Se seleccionara la plataforma en la nube HCP, para desplegar el aplicativo.


/wp-content/uploads/2016/05/149_953427.png


Clic en siguiente. El deploy toma al rededor de 5 minutos.


/wp-content/uploads/2016/05/150_953428.png


Clic en finalizar.


Una vez finaliza el Deploy, se agregara el nuevo esquema localmente para poder ver las tablas creadas en la base de datos HANA para posteriormente realizar operaciones SQL.


Para configurar el Host ir a la perspectiva :  /wp-content/uploads/2016/05/151_953429.png


En esta perspectiva seleccionar la pestaña del explorador con el nombre Systems:


/wp-content/uploads/2016/05/152_953430.png


Para agregar un nuevo esquema de base de datos realizar lo siguiente:

/wp-content/uploads/2016/05/153_953431.png


Aparecera la siguiente pantalla:


/wp-content/uploads/2016/05/154_953435.png

/wp-content/uploads/2016/05/156_953436.png

Clic en finalizar, y se mostrara el esquema de base de datos correctamente instanciado desde el HCP:


/wp-content/uploads/2016/05/157_953437.png

Por el momento dejemos este punto quieto ya que se utilizara mas adelante. Ahora se procede a ingresar al HCP y observar la aplicacion Java creada correctamente:


/wp-content/uploads/2016/05/158_953441.png

Clic en el nombre de la aplicacion. Atributos y propiedades de la aplicacion:


Application URLs: Url de la aplicacion a ser ejecutada.

/wp-content/uploads/2016/05/159_953442.png

Clic en Data Source Bindings:

/wp-content/uploads/2016/05/160_953443.png

El esquema mencionado es el que se configuro en Eclipse.

Con todo lo visto anteriormente, se ejecuta la aplicacion y se procede a agregar datos.


/wp-content/uploads/2016/05/161_953444.png


Ahora se mira el esquema para buscar la tabla “T_PERSON” en la cual se están alojados los datos.

Se busca la tabla en la siguiente ruta:


/wp-content/uploads/2016/05/162_953445.png

Para realizar un Select a la tabla seguir los siguientes pasos:

/wp-content/uploads/2016/05/163_953446.png


Esto genera el Script del Select a la tabla automaticamente:

/wp-content/uploads/2016/05/164_953447.png


Clic en el icono verde de la parte superior derecha para ejecutar el Script:


/wp-content/uploads/2016/05/165_953448.png

Como se observa en la imagen se obtienen los dos datos ingresados previamente.




SAP HCP MOBILE SERVICES


En esta sección se explicaran los conceptos de HCPms. Referencia: https://help.hana.ondemand.com/hana_cloud_platform_mobile_services/frameset.htm

servicios móviles de la plataforma de la nube de SAP HANA ofrece autenticación, segura en el embarque, las notificaciones push nativas, y generación de informes para aplicaciones móviles de la empresa. Los servicios móvile proporciona un portal web de administración y el seguimiento global único para configurar y gestionar aplicaciones móviles.


1) Habilitar HCP Mobile Services


/wp-content/uploads/2016/05/166_953449.png

/wp-content/uploads/2016/05/167_953450.png


2) Configuración de SAP HANA Mobile Services

Prerequisitos:


1) Poseer una cuenta HCP

2) Subscripción HTML5 Applications

3) Subscripción Java Applications

4) Habilitar la propiedadPrincipal Propagation Start of the navigation path Trust Next navigation step Local Service Provider End of the navigation path.



/wp-content/uploads/2016/05/168_953451.png


5) Configuración Mobile Services:


/wp-content/uploads/2016/05/169_953452.png

A continuación, se muestra el enlace para el administrador de HCPms. clic en el enlace:


/wp-content/uploads/2016/05/170_953453.png


A continuación se muestra el siguiente panel de administración:


/wp-content/uploads/2016/05/171_953454.png


SAP HANA (MDC): CREACION DE BASE DE DATOS Y ESQUEMAS HANA XS EN HCP


Nota: Antes de empezar, es necesario tener una cuenta en HCP trial.


En esta sección se procede a crear un base de datos llamada HANA MDC (Multitenant Database Containers). Pero que tiene de especial esta base de datos, a los esquemas creados anteriormente? Pues bien lo especial consiste en que te brinda una base de datos completa en la cual puedes ver los recursos utilizados en el Sap Hana Database Administration, crear varios esquemas para diferentes aplicaciones, entre otras utilidades.

SAP HANA (MDC) permite alojar múltiples bases de datos SAP HANA en un único sistema SAP HANA. Todas las bases de datos de inquilinos en el mismo sistema comparten los mismos recursos del sistema (memoria y CPU ), pero cada base de datos del arrendatario es totalmente aislado con sus propios usuarios de bases de datos, catálogo, repositorio, persistencia (archivos de datos y archivos de registro) y servicios.


1) Lo primero a realizar es crear la base de datos de la siguiente forma estando en HCP. El proceso puede demorar varios minutos mientras crea la base de datos.

Nota: SAP ofrece como alternativa Windows Azure y Amazon para alojar el SAP Hana Developer Edition. (Muy a tener en cuenta para futuros desarrollos y mas que todo con tecnologia Microsoft)

/wp-content/uploads/2016/05/172_953455.png

2) Una vez creada la base de datos se obtiene lo siguiente:


/wp-content/uploads/2016/05/173_953456.png

/wp-content/uploads/2016/05/174_953457.png


Una vez se da clic en SAP Hana Cockpit aparece el siguiente panel de administración.

Nota: El usuario del Login es “SYSTEM”

/wp-content/uploads/2016/05/175_953458.png

Como se observa en la imagen, se tiene un panel de administración en el cual se observa el estado del servidor.


Ahora bien, como actualmente no se tiene ningún usuario configurado, es necesario crear uno nuevo en el panel mostrado anteriormente dando clic en “Manage Roles and Users”

/wp-content/uploads/2016/05/176_953459.png

Una vez se da clic en el icono, aparece la siguiente imagen:


/wp-content/uploads/2016/05/177_953460.png

Buscar el usuario “SYSTEM”


/wp-content/uploads/2016/05/178_953461.png

Aparecera la siguiente ventana:

/wp-content/uploads/2016/05/179_953462.png

Se muestra el usuario creado correctamente:


/wp-content/uploads/2016/05/180_953463.png


Se selecciona el usuario creado y se procede a agregar los roles necesarios.


/wp-content/uploads/2016/05/181_953464.png


Se muestra una ventana en la cual se filtraran los roles de “Developer” y “Admin”.

/wp-content/uploads/2016/05/182_953465.png

/wp-content/uploads/2016/05/183_953466.png

Por ultimo se guardan las configuraciones.


/wp-content/uploads/2016/05/184_953467.png

Una vez se apliquen los roles correctamente, es hora de abrir el editor de trabajo.


3)  SAP HANA Web-based Development Workbench


/wp-content/uploads/2016/05/185_953477.png

Se ingresa con el usuario creado anteriormente.


/wp-content/uploads/2016/05/186_953478.png

Nota: Es posible que pida cambiar la clave nuevamente. Muy parecido a SAP ERP.

Nota: Si tienen problemas con los permisos para el usuario nuevo, agregar los roles mencionados anteriormente al usuario “SYSTEM” ingresar con este

al aplicativo.

/wp-content/uploads/2016/05/187_953479.png

Ahora continuemos…

Como es muy lento por razones obvias el acceso al entorno de desarrollo web IDE para administra la base de datos HANA, se procede a configurar la conexión respectiva de la base de datos en el Eclipse. (Si tienen problemas ver mas arriba la configuración y agregar conexiones.)

Para agregar la base de datos seguir los siguientes pasos:

/wp-content/uploads/2016/05/188_953480.png

Es hora de elegir la base de datos creada previamente:


/wp-content/uploads/2016/05/189_953481.png


Si la conexión se a realizado correctamente, se vera algo como esto


/wp-content/uploads/2016/05/190_953483.png

4) Creación de paquetes y configuraciones para el proyecto

Creación del nuevo paquete en la siguiente ruta:

/wp-content/uploads/2016/05/191_953484.png

Ingresar los siguientes datos:

/wp-content/uploads/2016/05/192_953485.png


Después de dar clic en “OK”, el paquete se ha creado correctamente.

/wp-content/uploads/2016/05/193_953486.png

NOTA: Ahora lo que sigue es de mucho cuidado y se va a poner a prueba el conocimiento visto en la sección “Creación de una aplicacion HANA XS” . Seguir esta sección nuevamente y asociar la aplicacion al paquete creado para hacer Deploy. Una vez realizado esto pueden proceder con la guía.

5) Creación de un proyecto XS

Se crear un proyecto XS en el cual se elegirá el espacio de trabajo Codejam (Es la base de datos creada anteriormente).

/wp-content/uploads/2016/05/194_953487.png

Una vez se elige el proyecto a crear aparece la siguiente ventana:


/wp-content/uploads/2016/05/195_953488.png

Clic en “Next”. Ahora es necesario seleccionar la base de datos en la cual sera alojado el proyecto XS.


/wp-content/uploads/2016/05/196_953489.png


/wp-content/uploads/2016/05/197_953490.png

Ingresar la siguiente información. Click en finalizar.


/wp-content/uploads/2016/05/198_953491.png

A continuación se muestra el proyecto correctamente creado en la base de datos.

/wp-content/uploads/2016/05/199_953492.png

Antes de subir la aplicacion, se realizaran algunos pasos. Se creara el esquema de la base de datos para la aplicacion “codejam”.

Una vez posicionados en este archivo, se ingresara el siguiente código:

/wp-content/uploads/2016/05/200_953493.png

Creación de un archivo CSV para los datos a ser insertados en la base de datos:

/wp-content/uploads/2016/05/201_953495.png

Es hora de crear un archivo de importación de datos. Con el objetivo de migrar toda la información del archivo CSV a la base de datos.


/wp-content/uploads/2016/05/202_953496.png

/wp-content/uploads/2016/05/203_953497.png

A continuación se debe subir la aplicacion al servidor, para esto es necesario activar todos los elementos del proyecto XS.

Nota importante: Configurar los roles. Ver el proyecto XS creado anteriormente. dejare algunas imagenes de como quedo en este proyecto.

/wp-content/uploads/2016/05/204_953498.png

/wp-content/uploads/2016/05/205_953499.png

/wp-content/uploads/2016/05/206_953500.png

Continuando, se procede con la activación del proyecto:


/wp-content/uploads/2016/05/207_953501.png


Después de activar es necesario ingresar al administrador de base de datos en HCP con el fin de asignar al usuario el rol creado al activar la aplicacion. Tener en cuenta que esta aplicacion tiene como objetivo principal, la actualizacion automatica de datos desde un archivo CSV a una tabla en HANA, la creación de un esquema y la asignación de roles.

Una vez dentro del administrador de HANA, realizar los siguientes pasos:

/wp-content/uploads/2016/05/208_953502.png

Asignación del rol:

/wp-content/uploads/2016/05/209_953503.png


Con esto se asigna control sobre el nuevo esquema creado y se podrá visualizar desde Eclipse:


/wp-content/uploads/2016/05/210_953507.png

Para comprobar de que la inserción de datos desde el archivo CSV sea correcta, se procede a realizar lo siguiente:

/wp-content/uploads/2016/05/211_953508.png


Se ejecuta el Select y al final se observara los los datos importados desde el archivo CSV.

Espero les sirva esta informacion con ejercicios practicos.

Cualquier duda, me pueden contactar en el siguiente Twitter: https://www.twitter.com/locoalien

Saludos,


Assigned Tags

      1 Comment
      You must be Logged on to comment or reply to a post.
      Author's profile photo Carlos Lopez
      Carlos Lopez

      Santiago,

      Excelente guia, muy completa. Aun no me tomo el tiempo de realizar las pruebas para mayores comentarios, pero gracias por darte el tiempo de compartir tus conocimientos.

      Saludos,

      Carlos Lopez