SOA, ejemplo en la vida real

Si usted ingresa a algún portal de empleos IT, verá que SOA ya es un requerimiento.
Muchos años nos vimos obligados a pensar la teoría y la práctica de SOA como un mecanismo paralelo. Ahora simplemente se está aplicando en empresas de calibre medianos y/o pesados con BMPN o similares.
Si realmente quiere ver como o en qué escenario aplicarlo, esta webpage  nos muestra de manera simple y práctica cuando podemos optar por SOA en nuestra organización desde el punto de vista IT.
Los arquitectos SOA son requeridos por fin, en este 2015.

 

 

Anuncios

RedirectAttributes. Spring MVC 3.1

Muchas veces necesitamos redireccionar la vista en Spring MVC. Por ejemplo, en un Form la vista devuelve la URL pero convencionalmente nos queda en el navegador el llamadado POST realizado.
Para forzar a redireccionar en Spring 3.1 podemos hacerlo con “redirect:/” en el return del método.
Pero como veras, los atributos no viajan en el model…
Para solucionarlo tenemos la clase RedirectAttributes y su método:
redirectAttributes.addFlashAttribute(“objeto”,objeto);

Muy practico.

AndroidSDK, crear un botón de actualización

Algunas veces necesitamos actualizar la aplicación desde el mismo Device o Tablet.Muchas veces estas se encuentran conectadas a alguna red inalámbrica.

El cliente necesita la última versión que, en general arregla algunos bugs o simplemente mejora nuestra aplicación móvil.

En AndroidSDK tenemos la posibilidad de lograrlo con estos simples códigos:

1- Creamos un button y lo conectamos con un método del controlador

2- Creamos una tarea asíncrona

3- Instanciamos la tarea en el método que llama el botón:

A tener en cuenta: Debemos ubicar nuestro APK en una URL válida.

CODIGO DEL ASYNCTASK (TAREA ASINCRONA)


import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import android.content.Context;

import android.content.Intent;

import android.net.Uri;

import android.os.AsyncTask;

import android.util.Log;


public class UpdateApp extends AsyncTask<String,Void,Void>{

private Context context;

public void setContext(Context contextf){

context = contextf;

}



@Override

protected Void doInBackground(String... arg0) {

try {

URL url = new URL(arg0[0]);

HttpURLConnection c = (HttpURLConnection) url.openConnection();

c.setRequestMethod("GET");

c.setDoOutput(true);

c.connect();


String PATH = "/mnt/sdcard/Download/";

File file = new File(PATH);

file.mkdirs();

File outputFile = new File(file, "update.apk");

if(outputFile.exists()){

outputFile.delete();

}

FileOutputStream fos = new FileOutputStream(outputFile);

InputStream is = c.getInputStream();

byte[] buffer = new byte[1024];

int len1 = 0;

while ((len1 = is.read(buffer)) != -1) {

fos.write(buffer, 0, len1);

}

fos.close();

is.close();

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(new File("/mnt/sdcard/Download/update.apk")), "application/vnd.android.package-archive");

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!

context.startActivity(intent);

} catch (Exception e) {

Log.e("UpdateAPP", "Update error! " + e.getMessage());

}

return null;

}

}


CODIGO DEL METODO:


public void sincronizar(View view) throws NumberFormatException, ParseException {

UpdateApp atualizaApp = new UpdateApp();

atualizaApp.setContext(getApplicationContext());

atualizaApp.execute("http://myweb.com/android/myapp.apk");

}

Java 8: From PermGen to Metaspace

Leyendo las novedades de Java 8, en donde LAMBDA es la mas importante, no puedo dejar pasar la que a mi entender es mucho mas importante:

La eliminación del PermGen a beneficio del nuevo Metaspace.

Quienes tenemos sistemas en producción hemos luchado con PermGen y sus parámetros de JVM hasta el cansancio.

En esta Pagina tenemos un detallado ejemplo, muy útil y fácil de leer (en inglés)

 

Json, problema de serializacion bi-direccional

Cuando tenemos una relación bidireccional en @annotations podemos obtener un error de serialización en Json.

En la práctica, se creará un bucle infinito intentando Serializar el objeto relacionado.

Para solucionar esto, en Jackson, tenemos estas anotaciones:

En la Collection agregamos @JsonManagedReference:


@OneToMany(mappedBy = "rubro",cascade = CascadeType.ALL,orphanRemoval=true)

@JsonManagedReference

private List<SubRubro> subrubros;

En la otra relación agregamos @JsonBackReference:


@JoinColumn(name = "rubro_id")

@ManyToOne(cascade = {CascadeType.DETACH})

@JsonBackReference

private Rubro rubro;

 

Problema solucionado.

Children, sustituto a ForEach en ZK

Cuando tenemos un bucle en ZK lo primero que pensamos es utilizar EL.
El problema es que EL no tiene el concepto de Binding tal como lo conocemos en el framework, con sus propiedades @Load, @Bind

Para solucionarlo, podemos utilizar Children.

Un ejemplo simple:


<hlayout children="@bind(frm.stocks)">

<template name="children">

<label class="atributoProducto" value="@load(each.stock)" />

</template>

</hlayout>

Donde frm es el controlador, stocks es la colección y each es cada item de la colección.