lunes, 30 de enero de 2017

Java EE 7 en producción: Manteniendo las luces encendidas

Java EE 7 en producción: Manteniendo las luces encendidas


Una de las cosas más importantes que hacer en esta etapa del ciclo de vida de Java EE es destacar las historias de adopción con éxito en una cadencia regular. La comunidad ha estado haciendo eso por mucho tiempo, incluso en JavaOne. Varias de estas historias están curadas en Zeef.
Sayo Oladeji recientemente acordó compartir una historia de adopción muy genial sobre un sistema de misión crítica para Eko Electricity - uno de los mayores proveedores de servicios públicos de Lagos. Sayo tenía una serie de cosas interesantes que decir acerca de Java EE vale la pena prestar atención. He destacado pasajes específicos que realmente se destacan.



¿Puede presentarse amablemente?


Soy Sayo Oladeji, ingeniero de software de Crown Interactive y cofundador de Hextremelabs. Comencé a programar hace sólo 10 años y, a través de los años, he tenido oportunidades de trabajar en Java SE, ME y EE, y otros lenguajes JVM, como Groovy y Kotlin, así como tecnologías no Java como C # y Javascript.
Gestiono una gran cantidad de integraciones con sistemas de terceros como motores de lotería, pasarelas de pago, sistemas de soporte empresarial, etc.

¿Puede describir la aplicación que utiliza Java EE? ¿Que hace tu compañía?


Crown Interactive es un importante proveedor de tecnología en el espacio de servicios públicos en Nigeria. En la actualidad ofrecemos la tecnología de gestión de ciclo de ingresos (RCM) de extremo a extremo para EK Electricity Distribution PLC (EKEDP), que sirve a la mitad de Lagos. Para ponerlo en perspectiva, Lagos tiene una población de 21 millones (2016) y el crecimiento de alrededor de 85 personas por hora! Además de los servicios públicos, también contamos con un sistema de lotería, un servicio de medios bajo demanda y algunas otras aplicaciones.

¿Por qué eligió Java EE?


Cuando comenzamos a construir nuestros sistemas, teníamos mucha experiencia en Java EE a bordo. Nuestro consultor también era un socio de JBoss. Java EE es un estándar probado y JBoss EAP nos proporciona muchas cosas fuera de la caja. Estos incluyen soporte para servicios web, clustering, transacciones, concurrencia, almacenamiento en caché, mensajería, así como un rico ecosistema de herramientas; La mayoría siendo de código abierto. No fue una decisión muy difícil de tomar.

¿Cómo utiliza la aplicación Java EE?


Comenzamos a construir el sistema de una manera multi-arrendatario, orientado al servicio desde el primer día. Ahora estamos rompiendo algunos de los módulos en microservicios a medida que surgen las necesidades.

    
Usamos JAX-WS muy fuertemente debido al tipo de integraciones que hacemos. JAX-WS + NetBeans hace que las integraciones de SOAP sean una experiencia agradable, probablemente aún más agradable y definitivamente más rápida que REST debido a la naturaleza de auto-documentación de SOAP (WSDL). Las cadenas de manipuladores nos permiten realizar preocupaciones transversales como leer sobres SOAP entrantes y extraer metadatos como información de autenticación e inquilino.


    
Utilizamos JPA a través del tablero para el acceso de datos.


    
Utilizamos JMS para una comunicación fiable y poco acoplada entre servicios con ActiveMQ como intermediario de mensajes y un adaptador de recursos instalado para WildFly para que WildFly administre las conexiones con el intermediario.


    
Utilizamos JAX-RS para las API de REST, que respaldan nuestra interfaz web AngularJS.


    
Utilizamos EJB para manejar nuestra lógica empresarial básica y también para la comunicación entre nuestros microservicios. Por ejemplo, nuestro portal unificado de colecciones (UCG) es un módulo compuesto por 8 microservicios. Una de ellas publica un EJB que coordina las interacciones entre las restantes. La relación jerárquica entre estos módulos también está bien representada en el código fuente como un proyecto Maven multi-módulo.


    
Sobre todo, utilizamos CDI en gran medida. Por ejemplo, nuestras configuraciones se gestionan de forma centralizada en una base de datos. Leemos esto en un caché Infinispan (envíos con WildFly) en el inicio, y de ahí, los productores de CDI los inyectan en frijoles usando calificadores. Esto se hace de una manera segura. El C en CDI es la cosa más fresca. Los miembros del frijol se inyectan basados ​​en el contexto, muy importante para un sistema multi-tenant. Un filtro JAX-RS o una cadena de manejadores JAX-WS configura información contextual antes de que la ejecución llegue a nuestros beans y los productores que estén adaptados al contexto inyecten configuración específica del contexto. No queremos facturar al socio equivocado ni cargar la plantilla de mensaje incorrecto, por ejemplo.

¿Cómo fue su experiencia general con Java EE? ¿Lo usarías de nuevo?


Mi experiencia general con Java EE ha sido muy buena. Java EE + Maven + NetBeans + IntelliJ IDEA es una combinación realmente buena. Existen plugins adecuados para configurar nuestro servidor y manejar nuestras implementaciones, generar documentos API desde los puntos finales REST, generar entidades JPA desde el esquema de la base de datos y así sucesivamente.
Es muy rápido y fácil conseguir un proyecto de trabajo en funcionamiento con Java EE 7. Casi todo es POJO y orientado a anotaciones y los archivos WAR generados son pequeños. EE 7 es de hecho ligero. Antes de usar un servidor completo de Java EE, he usado plataformas basadas en Java como AppEngine y Tomcat, pero generalmente he encontrado que los servidores EE completos como WildFly son mucho más productivos.
De hecho, con el complemento WildFly Maven + plugin Docker, es muy fácil hacer un entorno totalmente funcional y preparado para la nube desde el archivo pom.xml mvn clean install –P prod.


Esto también es excelente para el propósito de la documentación. Simplemente mirando las fuentes, puede decir con confianza cómo se va a ejecutar la aplicación. He tenido un gran tiempo en desarrollo con Java EE 7, y voy a hacer nuevos proyectos con él.

El lenguaje de programación Java

El lenguaje de programación Java


Java - una isla de Indonesia, un tipo de café, y un lenguaje de programación. Tres significados muy diferentes, cada uno en diferentes grados de importancia. La mayoría de los programadores, sin embargo, están interesados ​​en el lenguaje de programación Java. En tan sólo unos pocos años (desde finales de 1995), Java ha tomado la comunidad de software por la tormenta. Su éxito fenomenal ha convertido a Java en el lenguaje de programación de más rápido crecimiento jamás visto. Hay un montón de bombo sobre Java, y lo que puede hacer. Muchos programadores y usuarios finales están confundidos acerca de lo que es exactamente, y lo que Java ofrece.

Java es un lenguaje revolucionario


Las propiedades que hacen que Java sea tan atractivo están presentes en otros lenguajes de programación. Muchos idiomas son ideales para ciertos tipos de aplicaciones, incluso más que Java. Pero Java reúne todas estas propiedades en un solo idioma. Este es un avance revolucionario para la industria del software.
Echemos un vistazo a algunas de las propiedades con más detalle:

  •     orientado a objetos
  •     portátil
  •     Multihilo
  •     Recogida automática de basura
  •     seguro
  •     Red y "Internet" consciente
  •     Simplicidad y facilidad de uso

Orientado a objetos


Muchos lenguajes antiguos, como C y Pascal, eran lenguajes procedurales. Los procedimientos (también llamados funciones) eran bloques de código que formaban parte de un módulo o aplicación. Los procedimientos pasaron parámetros (tipos de datos primitivos como números enteros, caracteres, cadenas y números de coma flotante). El código fue tratado por separado para los datos. Tuvieron que pasar alrededor de las estructuras de datos, y los procedimientos podrían modificar fácilmente su contenido. Esto fue una fuente de problemas, ya que partes de un programa podrían tener efectos imprevistos en otras partes. Seguimiento de qué procedimiento fue culpable desperdició una gran cantidad de tiempo y esfuerzo, sobre todo con los grandes programas.
En algún lenguaje de procedimiento, incluso podría obtener la ubicación de memoria de una estructura de datos. Armado con esta ubicación, podría leer y escribir en los datos más adelante o sobrescribir accidentalmente el contenido.
Java es un lenguaje orientado a objetos. Un lenguaje orientado a objetos se ocupa de objetos. Los objetos contienen datos (variables de miembro) y código (métodos). Cada objeto pertenece a una clase particular, que es un plano que describe las variables miembro y los métodos que ofrece un objeto. En Java, casi todas las variables son un objeto de algún tipo u otro - incluso cadenas. La programación orientada a objetos requiere una forma diferente de pensar, pero es una mejor manera de diseñar software que la programación de procedimientos.
Hay muchos lenguajes orientados a objetos populares disponibles hoy en día. Algunos como Smalltalk y Java están diseñados desde el principio para estar orientados a objetos. Otros, como C ++, están parcialmente orientados a objetos y parcialmente procesales. En C ++, todavía puede sobrescribir el contenido de estructuras de datos y objetos, haciendo que la aplicación se bloquee. Afortunadamente, Java prohíbe el acceso directo a los contenidos de la memoria, lo que lleva a un sistema más robusto.


Portátil


La mayoría de los lenguajes de programación están diseñados para un sistema operativo y una arquitectura de procesador específicos. Cuando el código fuente (las instrucciones que componen un programa) se compilan, se convierte en código de máquina que se puede ejecutar sólo en un tipo de máquina. Este proceso produce código nativo, que es extremadamente rápido.
Otro tipo de lenguaje es el que se interpreta. El código interpretado es leído por una aplicación de software (el intérprete), que realiza las acciones especificadas. El código interpretado a menudo no necesita ser compilado - se traduce como se ejecuta. Por esta razón, el código interpretado es bastante lento, pero a menudo portátil a través de diferentes sistemas operativos y arquitecturas de procesador.
Java toma lo mejor de ambas técnicas. El código Java se compila en un código de máquina neutral de la plataforma, que se llama Java bytecode. Un tipo especial de intérprete, conocido como Java Virtual Machine (JVM), lee el bytecode y lo procesa. La Figura 1 muestra un desmontaje de una pequeña aplicación Java. El bytecode, indicado por la flecha, se representa en forma de texto aquí, pero cuando se compila se representa como bytes para conservar el espacio.


El enfoque de Java ofrece algunas grandes ventajas sobre otros lenguajes interpretados. En primer lugar, el código fuente está protegido de la vista y la modificación - sólo el bytecode debe ponerse a disposición de los usuarios. En segundo lugar, los mecanismos de seguridad pueden escanear bytecode para detectar signos de modificación o código dañino, complementando los otros mecanismos de seguridad de Java. Sin embargo, lo más importante es que el código Java se puede compilar una vez y ejecutarse en cualquier combinación de máquina y sistema operativo que admita una máquina virtual Java (JVM). Java puede funcionar en Unix, Windows, Macintosh, e incluso el piloto de la palma. Java puede incluso ejecutarse dentro de un navegador web, o un servidor web. Ser portátil significa que la aplicación sólo tiene que ser escrita una vez - y luego puede ejecutarse en una gama más amplia de máquinas. Esto ahorra mucho tiempo y dinero.

Multihilo


Si alguna vez ha escrito aplicaciones complejas en C, o PERL, probablemente habrá encontrado el concepto de múltiples procesos antes. Una aplicación puede dividirse en copias independientes, que se ejecutan simultáneamente. Cada copia replica código y datos, lo que resulta en un mayor consumo de memoria. Obtener las copias para hablar juntos puede ser complejo y frustrante. La creación de cada proceso implica una llamada al sistema operativo, que también consume tiempo de CPU adicional.
Un mejor modelo es utilizar múltiples subprocesos de ejecución, conocidos como subprocesos para abreviar. Los hilos pueden compartir datos y código, facilitando el intercambio de datos entre instancias de subprocesos. También utilizan menos memoria y sobrecarga de la CPU. Algunos lenguajes, como C ++, tienen soporte para los subprocesos, pero son complejos de usar. Java tiene soporte para múltiples subprocesos de ejecución construidos directamente en el lenguaje. Los hilos requieren una manera diferente de pensar, pero se pueden entender muy rápidamente. Soporte de subprocesos en Java es muy simple de usar, y el uso de subprocesos en aplicaciones y applets es bastante común.


Recolección automática de basura


No, no estamos hablando de sacar la basura (aunque una computadora que literalmente podría hacer que sería algo ordenado). El término recolección de basura se refiere a la recuperación del espacio de memoria no utilizado. Cuando las aplicaciones crean objetos, la JVM asigna espacio de memoria para su almacenamiento. Cuando el objeto ya no es necesario (no existe ninguna referencia al objeto), el espacio de memoria se puede recuperar para su uso posterior.
Los idiomas como C + + obligan a los programadores a asignar y desasignar la memoria de datos y objetos manualmente. Esto agrega complejidad adicional, pero también causa otro problema - pérdidas de memoria. Cuando los programadores olvidan desasignar memoria, la cantidad de memoria libre disponible se disminuye. Los programas que con frecuencia crean y destruyen objetos pueden eventualmente descubrir que no queda memoria. En Java, el programador está libre de tales preocupaciones, ya que la JVM realizará la recolección automática de objetos basura.


Seguro


La seguridad es un gran problema con Java. Dado que los applets de Java se descargan de forma remota y se ejecutan en un navegador, la seguridad es una gran preocupación. No querríamos que los applets lean nuestros documentos personales, eliminen archivos o causen daño. En el nivel de API, hay fuertes restricciones de seguridad en el acceso a archivos y redes para applets, así como el soporte de firmas digitales para verificar la integridad del código descargado. En el nivel de bytecode, se realizan comprobaciones para hacks obvios, como manipulación de pila o bytecode no válido. Los fuertes mecanismos de seguridad en Java ayudan a proteger contra violaciones inadvertidas o intencionales de seguridad, pero es importante recordar que ningún sistema es perfecto. El eslabón más débil de la cadena es la máquina virtual Java en la que se ejecuta: una JVM con conocidas debilidades de seguridad puede ser propensa a atacar. También vale la pena señalar que, si bien ha habido algunas deficiencias identificadas en JVM, son raras, y por lo general se fijan rápidamente.


Red y "Internet" consciente


Java fue diseñado para ser "Internet" consciente, y para apoyar la programación de red. La API de Java proporciona un amplio soporte de red, desde sockets y direcciones IP, a URL y HTTP. Es extremadamente fácil escribir aplicaciones de red en Java, y el código es completamente portátil entre plataformas. En lenguajes como C / C ++, el código de red debe ser reescrito para diferentes sistemas operativos, y suele ser más complejo. El soporte de red de Java ahorra mucho tiempo y esfuerzo.
Java también incluye soporte para una programación de red más exótica, como la invocación de métodos remotos (RMI), CORBA y Jini. Estas tecnologías de sistemas distribuidos hacen de Java una opción atractiva para sistemas distribuidos grandes.


Simplicidad y facilidad de uso


Java extrae sus raíces del lenguaje C ++. C ++ es ampliamente utilizado, y muy popular. Sin embargo, se considera un lenguaje complejo, con características como herencia múltiple, plantillas y punteros que son contraproducentes. Java, por otro lado, está más cerca de un lenguaje "puro" orientado a objetos. El acceso a los punteros de memoria se elimina, y las referencias de objeto se utilizan en su lugar. Se ha eliminado el soporte para la herencia múltiple, lo que se presta a diseños de clase más claros y más sencillos.
La biblioteca de E / S y de red es muy fácil de usar, y la API de Java proporciona a los desarrolladores mucho código de ahorro de tiempo (como redes y estructuras de datos). Después de usar Java por un tiempo, la mayoría de los desarrolladores se resisten a volver a otros idiomas, debido a la sencillez y elegancia de Java.
 

Resumen


Java ofrece a los desarrolladores muchas ventajas. Mientras que la mayoría de estos están presentes en otros idiomas, Java combina todos estos juntos en un solo idioma. El rápido crecimiento de Java ha sido nada menos que fenomenal, y no muestra signos (¡aún!) De desaceleración. En la columna del mes que viene, hablaré más sobre el corazón de Java: la Máquina Virtual Java.



  

viernes, 14 de octubre de 2016

Oracle negó nuevo juicio en disputa de derechos de autor con Google sobre Java

Oracle había afirmado que algunas pruebas fue retenido por Google

Un tribunal federal de California ha negado Oracle otro ensayo en su larga disputa con la infracción de copyright a Google por el uso del código de Java en el sistema operativo Android.

bolsa seca
46% de descuento en la Tierra Pak impermeable seco Bolsa de compresión Saco - Tratar de alerta
Mientras kayak, varar, rafting, canotaje, senderismo, camping o pesca, esta super resistente y
LEE AHORA
Un jurado había aclarado Google de infracción de derechos de autor en mayo de este año, la defensa de la postura de la empresa que el uso de 37 API de Java (interfaces de programación de aplicaciones) en su sistema operativo móvil Android era un uso justo, negando así a Oracle hasta US $ 9 mil millones en daños y perjuicios que que estaba buscando.

Un número de desarrolladores y científicos realizó la copia de Google diciendo que las API, que son las especificaciones que permiten a los programas se comunican entre sí, no eran derechos de autor y cualquier intento de cambio que pudiera obstaculizar la innovación. La administración del presidente Barack Obama tenía en su opinión caras con Oracle y dijo que las API son de derechos de autor como otro código de computadora.

Oracle pidió a la corte para un nuevo juicio por, entre otros motivos, la afirmación de que Google ocultó información durante el descubrimiento de sus planes para integrar aplicaciones de Android con el sistema operativo Chrome se ejecuta en ordenadores de sobremesa y portátiles, para así ampliar el alcance de la infracción más allá de los teléfonos inteligentes y las tabletas .

El juez de distrito William Alsup de la Corte de Distrito de EE.UU. para el Distrito Norte de California en una orden el martes rechazó la petición de Oracle para un nuevo juicio, lo que habría sido el tercero en la controversia.

En 2015, Google comenzó un nuevo proyecto, que se llama internamente como ARC ++. Su objetivo, según registros de la corte era la de "[p] rovide usuarios de Chrome OS con el juego de aplicaciones de Android en Chrome OS sin la acción del revelador."

"ARC ++ correría un caso aislado de Android (con todas las API públicas de Android, incluidos los reescrita con respecto a Java) con el fin de permitir a los usuarios ejecutar todas las aplicaciones de Android en los dispositivos Chrome OS. Google planea incluir su 'Play Store' - aplicación de Google en el que los usuarios pueden comprar y descargar otras aplicaciones de Android - como parte de ARC ++ para facilitar el acceso a esas aplicaciones ", escribió el juez Alsup en su orden.

El juez no ir junto con la reclamación de Oracle que Google había "puesto trabas y había ocultado por completo el proyecto ARC ++." Google se había producido al menos nueve documentos discusiones sobre las metas y los detalles técnicos de ARC ++ en 2015, al menos cinco meses antes del juicio, escribió el juez, quien ha añadido que "el fracaso de Oracle para revisar la ARC ++ documentos es su propia culpa."

Juez Alsup señaló que las pruebas en las ARC ++ no hubiera impactado el juicio en mayo debido a ninguna prueba relacionada con las implementaciones de Android en dispositivos distintos de los teléfonos inteligentes y las tabletas estaban comprendidas en su ámbito de aplicación.

"Bien puede ser cierto que el uso de las API de derechos de autor en ARC ++ (o cualquier otro uso posterior) no se considerará un uso justo, pero que no lo hará, y no significa que el argumento de Google en el uso transformador en cuanto a la original utiliza en ensayo (smartphones y tabletas) fue inadecuada. Que Oracle no pudo detectar el arco ++ documentos en su poder tenían ninguna importancia dentro del ámbito definido en nuestro ensayo ", escribió el juez Alsup.

Oracle había discutido en la propuesta de un nuevo juicio que era un error limitar los dispositivos a los teléfonos inteligentes y tabletas.

puesta en marcha del sistema Android completa en el sistema operativo Chrome de Google es incluso ahora en la etapa de revisión disponible sólo para los desarrolladores y en un conjunto limitado de dispositivos, el juez observó.

La orden del juez también rechazó la demanda de Oracle para un nuevo juicio debido a la exclusión de lo que el juez describió como "prueba de menor importancia y el testimonio" de Stefano Mazzocchi, un miembro del consejo de administración de la Apache Software Foundation en 2008. También rechazó Oracle afirmación de que el tribunal había excluido indebidamente su documento contiene respuestas a la Comisión Europea, que había pedido una explicación de la diferencia entre Google y Sun Microsystems, la empresa que desarrolló Java y luego fue adquirida por Oracle.

Google y Oracle no pudieron ser contactados inmediatamente para hacer comentarios sobre la orden.

Java microservices group busca un menor control de Oracle

El grupo MicroProfile.io prevé la creación de una fundación para gobernar microservicios Java sin un solo proveedor dominante

MicroProfile.io, un grupo que ha establecido para mejorar la empresa de Java para microservicios implementaciones, los planes para formar su propio fundamento.

Se espera que la fundación a caer bajo el paraguas de la Fundación Eclipse, dijo Rich Sharples, director senior de gestión de productos de Red Hat, que ha participado en MicroProfile.io.

Que proporcionaría "justo e incluso el control", sin hablaba del proveedor único, y frente a las responsabilidades como infraestructura legal y técnica, así como las marcas y derechos de autor asignación. MicroProfile.io ha tomado la postura de que Oracle, que supervisa Java, ha sido demasiado dominante en el desarrollo de Java.

"Esperamos que moverse rápido con la tecnología que los desarrolladores pueden jugar de inmediato, sin restricciones, y lo haremos de una manera colaborativa e inclusivo, no sólo grandes proveedores", dijo Sharples. "Vamos a llegar la tecnología de refinado y apto para el propósito entonces estandarizar idealmente a través de la JCP [Java Community Process] en algún momento." Se espera que una solicitud formal de especificación Java que ser presentada para MicroProfile.

Pero Sharples subrayó la necesidad de reformar la JCP, que dijo que no es un organismo de normalización atractiva para muchos porque está dominado por Oracle y tiene reglas de licenciamiento bastante anticuados.

Además, la base proporcionaría una sola entidad para la representación legal, tratará de impulsar la participación y proporcionar publicidad, dijo Sharples.

MicroProfile.io lanzado recientemente la versión 1.0 de MicroProfile, que está destinada a tomar el relevo en el desarrollo de Java Enterprise Edition. Oracle ha sido criticado en los últimos meses por el estancamiento en Java EE, pero la empresa se establece ahora en el desarrollo de poner en marcha para cubrir microservicios y la computación en nube. Oracle también quiere mejorar las relaciones con las facciones como MicroProfile.io y ha expresado su interés en la obra de MicroProfile.io.

Esta historia, "grupo microservicios Java busca un menor control de Oracle", fue publicado originalmente por InfoWorld.

viernes, 23 de septiembre de 2016

Las Anotaciones JAVA - Documented, Target, Inherited y Retention

1-@Documented

@Documented anotación indica que los elementos que utilizan esta anotación debe documentar JavaDoc. Por ejemplo:

java.lang.annotation.Documented
@Documented
public @interface MiAnotacion {
  //cuerpo de la anotacion
}

@MiAnotacion
public class MiClase { 
     //Cuerpo de la clase
}

Mientras que la generación de la Javadoc de la clase MiClase, el @MiAnotacion anotación se incluiría en eso.

2-@Target

En él se especifica en el que podemos usar la anotación. Por ejemplo: En el código de abajo, hemos definido el tipo de destino como el método que significa la anotación a continuación sólo se pueden utilizar en los métodos.

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})
public @interface MiAnotacion {

}


public class MiClase {
   @MiAnotacion
   public void miMetodo()
   {
       //Hacer algo
   }
}

Nota: 1) Si no se define ningún tipo de destino que significa anotación se puede aplicar a cualquier elemento.
2) Además de ElementType.METHOD, una anotación siguiente puede tener posibles valores objetivo.
ElementType.METHOD
ElementType.PACKAGE
ElementType.PARAMETER
ElementType.TYPE
ElementType.ANNOTATION_TYPE
ElementType.CONSTRUCTOR
ElementType.LOCAL_VARIABLE
ElementType.FIELD

3-@Inherited

Las señales de anotación @Inherited de que una anotación personalizado que se utiliza en una clase deben ser heredados por todos sus subclases. Por ejemplo:

java.lang.annotation.Inherited

@Inherited
public @interface MiAnotacion {

}

@MiAnotacion
public class ClasePadre { 
  ... 
}

public class ClaseHija extends ClasePadre { 
   ... 
}

Aquí el ClasePadre clase está utilizando @MiAnotacion anotación que está marcado con la anotación @inherited. Esto significa que el ClaseHija subclase hereda el @MiAnotacion.

4-@Retention

Se indica cómo han de permanecer a largo anotaciones con el tipo de anotación.

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@interface MiAnotacion {
    
}

Aquí hemos utilizado RetentionPolicy.RUNTIME. Hay otras dos opciones también. Vamos a ver qué es lo que significan:
RetentionPolicy.RUNTIME: La anotación debe estar disponible en tiempo de ejecución, para la inspección a través de Java reflexión.
RetentionPolicy.CLASS: La anotación sería en el archivo .class pero no estaría disponible en tiempo de ejecución.
RetentionPolicy.SOURCE: La anotación estaría disponible en el código fuente del programa, no sería ni en el archivo .class, ni estará disponible en el tiempo de ejecución.


Creación de anotaciones personalizadas en JAVA




  • Las anotaciones se crean mediante @interface, seguido del nombre de la anotación como se muestra en el ejemplo siguiente.
  • Una anotación puede tener elementos. Se ven como métodos. Por ejemplo, en el código de abajo, tenemos cuatro elementos. No debemos proporcionar la implementación de estos elementos.
  • Todas las anotaciones se extiende interfaz java.lang.annotation.Annotation. Las anotaciones no pueden incluir cualquier cláusula se extiende.


import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MiAnotacion{
    int studentAge() default 18;
    String studentName();
    String stuAddress();
    String stuStream() default "CSE";
}


Nota: Todos los elementos que tienen valores predeterminados establecidos, mientras se crea anotaciones pueden ser omitidos durante el uso de la anotación. Por ejemplo, si estoy aplicando la anotación anterior a una clase, entonces lo haría así:

@MiAnotacion(
    studentName="Juan",
    stuAddress="uru, Mich"
)
public class MiClase {
...
}

Como se puede ver, no hemos dado ningún valor a los elementos studentAge y stuStream ya que es opcional para establecer los valores de estos elementos (valores por defecto ya se han establecido en la definición de anotación, pero si se desea se puede asignar un nuevo valor durante el uso de la anotación de la misma manera como lo hicimos para otros elementos). Sin embargo tenemos que proporcionar los valores de otros elementos (los elementos que no tienen conjunto de valores por defecto), mientras que el uso de la anotación.

Nota: También podemos tener elementos de matriz en una anotación. Así es como podemos usarlos:

definición anotación:

@interface MiAnotacion {
    int      count();
    String[] books();
}

Uso:

@MiAnotacion(
    count=3,
    books={"PHP", "Java"}
)
public class MyClass {

}

Le permite volver al tema de nuevo: En el ejemplo de anotación personalizada hemos utilizado estos cuatro anotaciones: @Documented, @Target, @Inherited y @Retention. Vamos a discutir en detalle.en el siguiente post.


Las anotaciones incorporadas en Java

Java tiene tres anotaciones incorporadas:



  • @Override
  • @Deprecated
  • @SuppressWarnings




1-@Override

Mientras que sustituir un método en la clase del niño, debemos utilizar esta anotación para marcar ese método. Esto hace que el código legible y evitar problemas de mantenimiento, tales como: mientras se cambia el método de firma de la clase padre, debe cambiar la firma en las clases hijas (donde se utiliza esta anotación) de lo contrario compilador tiraría error de compilación. Esto es difícil de rastrear cuando usted no ha utilizado esta anotación.

Ejemplo:

public class PadreClass {

    public void justoMetodo() {
        System.out.println("Metodo de la clase padre");
    }
}


public class HijaClass extends MyParentClass {

    @Override
    public void justoMetodo() {
        System.out.println("Metodo de la clase hija");
    }
}

Creo que el ejemplo se explica por sí solo.


2-@Deprecated

@Deprecated anotación indica que el elemento de marcado (clase, método o campo) es obsoleto y ya no debe ser utilizado. El compilador genera una advertencia cada vez que un programa utiliza un método, clase, o un campo que ya ha sido marcado con la anotación @Deprecated. Cuando está en desuso un elemento, sino que también debe ser documentada mediante la etiqueta Javadoc @deprecated, como se muestra en el siguiente ejemplo. Tome nota de la diferencia con el caso @Deprecated y @deprecated. @deprecated se utiliza a modo de documentación.

Ejemplo:

@Deprecated
public void algunMetodo(){
    // Hacer algo
}

Ahora, siempre que cualquier programa quiera utilizar este método, el compilador generaría una advertencia.


3-@SuppressWarnings

Esta anotación instruye compilador de hacer caso omiso de las advertencias específicas. Por ejemplo, en el código de abajo, yo estoy llamando a un método en desuso (supongamos que el método deprecatedMethod () está marcado con la anotación @Deprecated) por lo que el compilador debería generar una advertencia, sin embargo estoy usando @@ SuppressWarnings anotación que suprimiría que deprecation advertencia.

@SuppressWarnings("deprecation")
    void miMetodo() {
        myObject.deprecatedMethod();
   }