MongoDB, Spark y FreeMarker
Ejemplo de uso de MongoDB, Spark y FreeMarker. Además, se utilizará Maven para incluir las dependencias necesarias para ello.
En primer lugar se necesita el driver de Java, ya que es la tecnología sobre la que está implementado el framework Spark y será el encargado de interactuar o explotar la base de datos.
org.mongodb mongo-java-driver 2.10.1
Un ejemplo de uso de este driver puede ser:
MongoClient client = new MongoClient( new ServerAddress("localhost", 27017)); DB data = client.getDB("course"); DBCollection col = data.getCollection("hello"); DBObject doc = col.findOne();
Spark Web Application Framework
spark spark 0.9.9.4-SNAPSHOT
import static spark.Spark.*; import spark.*; public class HelloWorld { public static void main(String[] args) { get(new Route("/hello") { @Override public Object handle(Request request, Response response) { return "Hello World!"; } }); } }
Para probarlo si estás usando IntelliJ IDEA basta lanzar con run y luego en el navegador http://localhost:4567/hello.
Uso de plantillas con Freemarker
org.freemarker freemarker [2.3.19,2.4)
Ejemplo de plantilla. Se puede observar que hay una variable ${name}. Ésta variable se rellenará mediante el framework de Spark.
< html > < head > < title >Welcome! title > head > < body > < h1 >Hello ${name} h1 > body> html>
final Configuration configuration = new Configuration(); configuration.setClassForTemplateLoading(HelloWorldSparkFreemarkerStyle.class, "/"); Spark.get(new Route("/") { @Override public Object handle(final Request request, final Response response) { StringWriter writer = new StringWriter(); try { Template helloTemplate = configuration.getTemplate("hello.ftl"); MaphelloMap = new HashMap (); helloMap.put("name", "Freemarker"); helloTemplate.process(helloMap, writer); } catch (Exception e) { halt(500); e.printStackTrace(); } return writer; } });
Podría utilizarse el acceso a la BD mediante el driver de java para obtener cualquier información y posteriormente poder mostrarla en una jsp mediante un plantilla freemaker.
Depurar con Logs en Android
Android proporciona un API de logging (la clase android.util.Log).
En Android, todos los mensajes de log llevarán asociada la siguiente información:
– Fecha/Hora del mensaje.
– Criticidad. Nivel de gravedad del mensaje (se detalla más adelante).
– PID. Código interno del proceso que ha introducido el mensaje.
– Tag. Etiqueta identificativa del mensaje (se detalla más adelante).
– Mensaje. El texto completo del mensaje.
Los mensajes de log se van a clasificar por su criticidad:
– Error
– Warning
– Info
– Debug
– Verbose
public class LogsAndroid extends Activity { private static final String LOGS = "LogsAppAndroid"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.e(LOGS , "Mensaje de error"); Log.w(LOGS , "Mensaje de warning"); Log.i(LOGS , "Mensaje de información"); Log.d(LOGS , "Mensaje de depuración"); Log.v(LOGS , "Mensaje de verbose"); } }
Para ver los mensajes de log hay que ir a la vista llamada LogCat en el eclipse.
Evitar reinicio automático de la activity
Cuando por ejemplo se gira la pantalla del dispositivo android se reinicia la actividad. Esto pasa porque el método onCreate es llamado por defecto, según el ciclo de la vida de una aplicación Android. Podemos evitar que ello ocurra, colocando la siguiente etiqueta dentro del fichero Android Manifest.xml de nuestra aplicación (en la etiqueta activity de nuestra actividad):
Para verisones anteriores al API 13
android:configChanges=»orientation|keyboard|keyboardHidden»
Para versiones posteriores al API 13
android:configChanges=»orientation|keyboard|keyboardHidden|screenSize»
Comprobar conexión a internet en un dispositivo Android
En primer lugar se deben dar permisos para conectarse a internet y para consultar el estado de la conexión en el Manifest.
A continuación se puede realizar la comprobación tal que así:
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnectedOrConnecting()) { //Hay conexión. }else{ //No hay conexión. }
Esto es bastante útil cuando se usa por ejemplo el componente WebView para cargar alguna página web.
String vs StringBuffer vs StringBuilder
En Java tenemos distintas formas para realizar la concatenación de las cadenas de texto (tipo String). Las tres formas más habituales son: el uso del operador de suma, usaar StringBuffer y usar StringBuilder.
– El operador suma está sobrecargado en la clase String, y es la forma más básica de concatenar dos cadenas de caracteres. Al concatener dos String con el operador suma, se crea un nuevo String resultante, con lo que constantemente estamos creando objetos nuevos. Lo cuál hace que no se la mejor opción.
String var1 = "Hola, "; String var2 = "mundo"; String holamundo = var1 + var2;
– La clase StringBuffer es una secuencia de caracteres mutable; es decir, es una clase que nos permite concatenar String de una manera simple y muy eficiente.
Los métodos de StringBuffer son sincronizados, por lo cual la podemos usar de manera segura en un ambiente de multihilos.
StringBuffer buffer = new StringBuffer(); buffer.append("Hola, "); buffer.append("mundo"); String holamundo = buffer.toString();
– La clase StringBuilder es una clase que aparece con el JDK 5, y es la clase recomendada para la concatenación de String en la mayoría de los casos. Su uso es idéntico al StringBuffer (tienen el mismo API). Los métodos de StringBuilder no son sincronizados, por lo que tiene mejor rendimiento que StringBuffer cuando solo hay un único hilo.
StringBuilder builder = new StringBuilder(); builder.append("Hola, "); builder.append("mundo"); String holamundo = builder.toString();
Consultar un Servicio Web en Android utilizando la librería KSOAP
Se va a utilizar para el ejemplo el servicio web implementado en la entrada anterior (Recordar que se creó un servicio web con wsdl en php utilizando la librería nusoap).
1 – Descargar la librería Ksoap aquí.
2 – Copiarla en la carpeta libs de tu proyecto Android. Añadirla al «Build path» y seleccionarla en “Order and Export”.
3 – Ahora ya se puede utilizar. Y esto sería un ejemplo de utilización:
private static final String SOAP_ACTION = "getNombre"; private static final String METHOD_NAME = "getNombre"; private static final String NAMESPACE = "http://disastercode.com.es/ws/nusoap"; private static final String URL = "http://disastercode.com.es/ws/servicioWsdl.php?wsdl"; private void pruebaWS(){ String res = ""; SoapObject soapclient = new SoapObject(NAMESPACE,METHOD_NAME); soapclient.addProperty("dni","99999999N"); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(soapclient); HttpTransportSE httpTransportSE = new HttpTransportSE(URL); try { httpTransportSE.call(SOAP_ACTION, envelope); res = envelope.getResponse().toString(); } catch (Exception e) { e.printStackTrace(); } //TODO en la variable res tienes el valor devuelto por el ws }
Plugin para el eclipse que genera aplicación automaticamente
En GitHub he creado un repositorio donde comparto un plugin para el eclipse que he implementado y que facilita el desarrollo aplicaciones J2EE https://github.com/roberto-pf/Sotilizator. El plugin consigue implementar toda la lógica de negocio de una aplicación que utiliza: Struts + Spring + hibernate + JQuery.
Qué es el Sotilizator?
Se trata de un plugin para el eclipse (probado en su versión Helios). La finalidad de este plugin es la creación de una aplicación web de forma automática y con unas determinadas características a partir de un esquema de una Base de Datos.
Estas características son:
1 – La aplicación resultante estará realizada empleando un MVC en J2EE con Struts 1.3, inyección de dependencias con Spring 3.0, hibernate 3.2.6 para el acceso a datos para la parte de la lógica de negocio. Mientras que para la parte de la vista se empleará jquery junto a las tag-libraries de struts. Además, de DWR para interactuar con el servidor desde el cliente.
2 – Se generará un fichero pom.xml para que a través de MAVEN se puedan obtener las dependencias.
3 – Se generará un fichero build.xml donde estarán las tareas Ant necesarias para el despliegue de la aplicación en Tomcat, JBoss y OAS.
4 – La aplicación resultante será capaz de construir las tareas CRUD de las tablas automáticamente. A partir del esquema de la BD obtendrá los campos y su tipo.
5 – Las capas que contendrá la aplicación son las siguientes:
VO: Objetos que hace referencias a las tablas. DAO: Capa que realiza el acceso a la BD. Manager: Capa sobre la que se aplican las transacciones. Delegate: Capa que se encarga de relacionar la parte de la vista con la lógica de negocio. Action: Aquí deberán ir las diferentes acciones que luego el controlador mapea para interactuar con la vista.
Nota: Para más información consultar manuales del usuario y del programador: https://github.com/roberto-pf/Sotilizator/tree/master/Readme
Utilizar Print When Expresion de iReports
Supongamos que tenemos una plantilla de un informe realizada con ireport. Y que hay un label cuyo contenido no queremos que se muestre siempre (p.e. solamente cuando el valor de un parámetro, llamado campo, pasado al informe contiene la cadena «prueba»).
Lo único que hay que hacer es utilizar la propiedad Print When Expresion de la etiqueta label. Colocando en ella lo siguiente:
$P{campo}.equals("prueba")?Boolean.TRUE:Boolean.FALSE
Paginación de informes con iReport (Evaluation Time)
Supongamos que tenemos un informe realizado con ireport que nos genera un documento de 100 páginas. Y queremos que en el pie de página de cada hoja nos vaya marcando el número de página de la siguiente manera:
Página 1 de 100
Página 2 de 100
Página 3 de 100
….
Página 100 de 100
La solución seria utilizar una variable que nos proporciona el propio ireport: $V{PAGE_NUMBER}. Y jugar con el ámbito de ejecución (propiedad Evaluation Time).
Así se podría hacer:
– Label con el contenido «Página »
– Text con el valor «$V{PAGE_NUMBER}» (poniendo el campo Evaluation Time en now)
– Label con el contenido » de »
– Text con el valor «$V{PAGE_NUMBER}» (poniendo el campo Evaluation Time en report)
Ordenar un HashMap
Ejemplo de ordenación de un Map mediante keys. Tener en cuenta que las claves no deben ser repetidas, en otro caso este ejemplo no funcionará correctamente.
Map miMap= new HashMap(); miMap.put("2", "valor2"); miMap.put("1", "valor1"); miMap.put("4", "valor4"); miMap.put("3", "valor3"); Map mapOrdenado = new TreeMap(miMap);
Categorias
- adobe (2)
- agile (1)
- Alfresco (1)
- Android (26)
- Angular (6)
- angularjs (10)
- apache (1)
- axis (2)
- Bases de datos (14)
- Bootstrap (1)
- C# (3)
- Cámara (1)
- chrome (3)
- Codeigniter (2)
- Control de Versiones (2)
- CSS (25)
- CVS (1)
- Django (9)
- Django Rest Framework (1)
- DNS (1)
- Docker (3)
- dominio (1)
- eclipse (5)
- Entity Framework (2)
- ETL (1)
- Firefox (6)
- flash (1)
- freecad (1)
- Git (12)
- GitHub (4)
- gpg (2)
- Groovy (1)
- Handlebars (1)
- hibernate (4)
- hosting (1)
- HTML (50)
- HTML 5 (26)
- Impresión 3D (9)
- Inkscape (1)
- IOS (2)
- ireports (3)
- Java (44)
- Javascript (55)
- JBoss (5)
- JPA (2)
- JQuery (20)
- Json (7)
- JSP (6)
- Keycloak (1)
- Lamp (1)
- LDAP (2)
- lean (1)
- linkedin (1)
- LINQ (1)
- linux (13)
- Livecycle (1)
- log (1)
- microcontroladores (1)
- MongoDB (4)
- MySQL (8)
- Node.js (5)
- OC4J (1)
- Openshift (2)
- Oracle (6)
- Patrones de Diseño (1)
- Photoshop (2)
- php (20)
- PostgreSQL (1)
- python (19)
- rabbitmq (1)
- Raspberry PI (13)
- Raspherry PI (5)
- React (6)
- seguridad (3)
- Selenium (3)
- Sencha Touch (1)
- Sin categoría (29)
- Spring (17)
- spring-boot (3)
- SQL (7)
- SQLServer (1)
- SSO (1)
- struts (2)
- SVN (1)
- Talend (1)
- Tomcat (6)
- unity (3)
- Visual Studio Code (2)
- vmware (5)
- Web Services (11)
- windows (18)
- wordpress (10)
- Xiaomi (1)
- xml (2)
Trabajos Realizados
- App Android – Autoka Fr
- App Android – Cartelera Cántabra
- App Android – Gramática y Vocabulario Ingles
- App Android – Hoja de Gastos
- App Android – Hotel Torre Cristina
- App Android – OcioEnjoy
- App Android – Visor CardBoard
- App Firefox – Managapp
- DiamanteBomba – DisasterCode
- Generador de Partes de Trabajo
- GitHub – Android Web Generator
- GitHub – Dynamic Angular Gallery
- GitHub – Dynamic React Gallery
- GitHub – Sotilizator
- GitHub – SpringAngularJS
- GitHub – Swiper Dynamic Angular Gallery
- HazParejas – DisasterCode
- RompeCabezas – DisasterCode
- Unity Game – English Couple
- Unity Game – Kill Wasp
- WordPress – El Buen Apicultor
- WordPress – El Cajón de los Retales
- WordPress – El Vestidito Azul
- WordPress – Feuchas
- WordPress – Fragua de Navajas Ponce
- WordPress – Humor a las Tres
- WordPress – Photo Places