ADF tips: Reglas de auditoría en JDeveloper – Crea tus propias reglas (Analizador)

En un post anterior explicamos cómo activar las reglas de auditoría que JDeveloper ya lleva por defecto. En este post explicaremos cómo crear nuestra propia regla de auditoría. JDeveloper nos da una herramienta para poder ampliar e implementar nuestras propias reglas de auditoria, mediante lo que denomina extensiones. Lo primero que haremos será instalar la en nuestro JDeveloper 12c las librerías para poder generar extensiones, realizaremos los siguientes pasos:

Iremos a check for updates:

check

Después instalaremos Extension SDK  y tendremos que reiniciar JDeveloper.

extension

Una vez tengamos Extension SDK instalado comenzaremos a crear nuestras propias reglas, sobre la aplicación que creamos en el post anterior.

Lo primero será crear una aplicación tipo Extension Application:

apExtension

Esta aplicación por ejemplo la llamaremos AuditReglas, Se nos creara una aplicación como vemos en la siguiente imagen:

apliAudit
Aquí podemos ver los dos ficheros de configuración de la extensión MANIFEST.MF y extension.xml, editaremos el fichero extension.xml y iremos a overview desde aquí se ven los dos ficheros.

Lo primero que haremos será  ir a la pestaña dependencias y añadiremos las dependencias necesarias para nuestra extensión:

  1. oracle.ide
  2. oracle.jdeveloper
  3. oracle.ide.audit
  4. oracle.ide.audit.core
  5. oracle.ide.xmlef
  6. oracle.javatools
  7. oracle.javatools-nodeps
  8. oracle.jdeveloper.properties

Nos quedarán las dependencias como se ve en la imagen:

dependencias

El paso siguiente será definir nuestra regla en el fichero  extension.xml en la pestaña Hooks, aquí iremos informando la configuración de nuestra regla hasta tener esto en el extension.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<extension id="com.avanttic.extension.auditreglas" version="1.0.0" esdk-version="2.0" rsbundle-class="com.avanttic.extension.auditreglas.AuditReglas" xmlns="http://jcp.org/jsr/198/extension-manifest">
 <name>${EXTENSION_NAME}</name>
 <owner>${EXTENSION_OWNER}</owner>
 <trigger-hooks xmlns="http://xmlns.oracle.com/ide/extension">
 <!-- TODO Declare triggering functionality provided by extension: com.avanttic.extension.auditreglas -->
 <triggers>
   <audit-hook id="com.avanttic.extension.auditreglas">
    <trigger>
      <technology>Java</technology>
    </trigger>
    <category-definition id="AuditAvanttic"/>
    <category-definition id="ReglaJava">
       <category>AuditAvanttic</category>
    </category-definition>
    <rule-definition id="system-print">
      <category>ReglaJava</category>
      <enabled>true</enabled>
      <severity>error</severity>
    </rule-definition>
    <analyzer-definition>
        <analyzer-class>com.avanttic.extension.auditreglas.analizers.java.JavaAnalizerImpl</analyzer-class>
    </analyzer-definition>
   </audit-hook>
 </triggers>
 </trigger-hooks>
 <hooks>
 <!-- TODO Declare functionality provided by extension: com.avanttic.extension.auditreglas -->
 </hooks>
</extension>

Explicación de los tags:

  • technology: Definimos nuestra regla para la tecnologia java.
  • category-definition: Este tag que puede anidarse será como se mostrará nuestra regla en Tools/preferences/audit.
  • rule-definition: Definición de la regla en este caso estará en la categoría ReglasJava, estará activa y nos dará un mensaje de error. Y se llamará system-print.
  • analyzer-definition: Define una clase java que extenderá oracle.jdeveloper.audit.analyzer.Analyzer, y servirá para analizar nuestro código.

Después crearemos la clase java y la mapearemos con nuestra regla system-print.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.avanttic.extension.auditreglas.analizers.java;
import oracle.javatools.parser.java.v2.model.statement.SourceExpressionStatement;
import oracle.jdeveloper.audit.analyzer.Analyzer;
import oracle.jdeveloper.audit.analyzer.AuditContext;
import oracle.jdeveloper.audit.analyzer.Rule;
import oracle.jdeveloper.audit.extension.ExtensionResource;
public class JavaAnalizerImpl extends Analyzer {
@ExtensionResource("com.avanttic.extension.auditreglas.system-print")
private Rule systemPrint;
public void enter(AuditContext context,Object o) {
System.out.println("enter : "+o.getClass());
}
public void exit(AuditContext context,SourceExpressionStatement stmt) {
String metodo=stmt.getText();
if (metodo.contains("System.out.print")) {
context.report(systemPrint);
}
}
}
  • @ExtensionResource: Con está anotación mapearemos nuestra clase java con nuestra regla system-print.
  • Id audit-hook=com.avanttic.extension.auditreglas, ID regla: system-print.
  • private Rule systemPrint: Constante que pasaremos al report cuando se cumpla esta regla.
  • exit: Metodo donde implementamos el código que nos buscará si se cumple la regla.

Fichero bundle de nuestra extensión tendrá los textos que se verán en tools/preferences/audit y el mensaje que se nos mostrará al cumplir la regla nuestro código:

1
2
3
4
5
6
7
8
9
10
11
# Translatable resources for extension com.avanttic.extension.auditreglas
EXTENSION_NAME=ExtensionAvanttic
EXTENSION_OWNER=avanttic
AuditAvanttic.label=Auditoria Avanttic
ReglaJava.label=Reglas Java
system-print.label=Regla system print
system-print.description=Regla system print
system-print.message=usando pritln

Una vez hechos estos pasos ya podemos probar nuestra regla lo primero será generar  el deploy de la aplicación:

deploy

Una vez lo tengamos generado ejecutamos la aplicación esto hará que se nos abra otra instancia del jdeveloper y en ella tendremos instalada nuestra regla y podremos probarla en el proyecto que queramos.

ejecutar

Ejemplo de como se mostraria la regla en nuestro jdeveloper lo podemos ver en la siguiente imagen:

reglas

prueba

En conclusión hemos podido ver cómo fácilmente podemos crear nuestras propias reglas de codificación, para tener un código de mejor calidad y que cumpla las especificaciones de QA de nuestra empresa.

Twitter
LinkedIn
Evolución, innovación y transformación
37 Service Expertise avalados por Oracle 
Our value proposition
100% Oracle posts
Follow our day-to-day activities