Páginas

7/1/15

java.lang.NoClassDefFoundError JUnit Java

java.lang.NoClassDefFoundError JUnit Java

java.lang.NoClassDefFoundError JUnit Java



Caused by: java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory.
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory.

Cuando esto pasa es porque falta agregar la librería de tomcat a las propiedades del proyecto, puedes descargar esta versión tomcat-juli.jar y agregarla a las propiedades de tu proyecto en el cual estás haciendo tus pruebas unitarias con JUnit y asi solucionar esa excepción.

java.lang.ClassNotFoundException JUnit Java

java.lang.ClassNotFoundException JUnit Java

java.lang.ClassNotFoundException JUnit Java



Caused by: java.lang.ClassNotFoundException: org.apache.naming.java.javaURLContextFactory.

Cuando esto pasa es porque falta agregar la librería de catalina a las propiedades del proyecto, puedes descargar esta versión catalina-6.0.20.jar y agregarla a las propiedades de tu proyecto en el cual estás haciendo tus pruebas unitarias con JUnit y asi solucionar esa excepción.

javax.naming.NamingException JUnit Java

javax.naming.NamingException JUnit Java

javax.naming.NamingException JUnit Java




En este dato java estuve explicando paso a paso como utilizar por primera vez JUnit en eclipse/JBoss Developer Studio y nos quedamos en lo que pasaría cuando intentáramos hacer una prueba unitaria de una clase que hiciera una consulta a la base de datos mediante JNDI con Datasource. Al tratar de ejecutar esa prueba unitaria la aplicación nos lanza una excepción de tipo javax.naming.NamingException, ahora eso quiere decir que en algún momento a la hora de obtener la conexión a la base de datos mediante JNDI no puede cargar el Datasource ya que eso está configurado en el archivo de configuración del JBoss y como solo estamos haciendo una prueba unitaria de una clase dentro del mismo contenedor del JUnit y no del JBoss el no encuentra ese Datasource y lanza la excepción. Para resolver este inconveniente tenemos que inyectar el Datasource que vamos a usar al contenedor del JUnit siguiendo estos pasos.

30/12/14

JNDI datasource JUnit test JBoss.

JNDI datasource JUnit test.

JNDI datasource JUnit test JBoss.



Para poder utilizar JUnit en una clase en la cual hacemos una consulta a la base de datos y dicha consulta obtiene la conexión mediante JNDI con el datasource de JBoss 7 tenemos que enlazar ese datasource al InitialContext. Si vas a utilizar esto para hacer la clase "test" de JUnit tienes que hacer que el método donde se enlaza el datasource con el contexto inicial se ejecute primero con la anotación @BeforeClass. Aqui te dejo el codigo para eso:
@BeforeClass
 public static void setUpClass() throws Exception {
  try {
   System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
     "org.apache.naming.java.javaURLContextFactory");
   System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming");
   
   InitialContext initialContext = new InitialContext();
   initialContext.createSubcontext("java:jboss");
   initialContext.createSubcontext("java:jboss/datasources");
   // Reemplaza en nombre del datasource por el tuyo
   initialContext
     .createSubcontext("java:jboss/datasources/DataSourceDatoJava");

   OracleConnectionPoolDataSource poolDataSource = new OracleConnectionPoolDataSource();
   poolDataSource.setURL("jdbc:oracle:thin:@localhost:1521:");
   poolDataSource.setUser("datojava");// Tu usuario
   poolDataSource.setPassword("datojava"); // Tu contraseña

   initialContext.rebind("java:jboss/datasources/DataSourceDatoJava",
     poolDataSource);
  } catch (NamingException ex) {
   ex.printStackTrace();
  }
 }
 
Ya con este dato java podemos ejecutar nuestra clase test de JUnit.


Temas Relacionados:

29/12/14

ERROR. More than the maximum number of request parameters (get plus post)

ERROR. More than the maximum number of request parameters (get plus post) for a single request (512) were detected.

ERROR. More than the maximum number of request parameters (get plus post) for a single request (512) were detected.



ERROR. more than the maximum number of request parameters (get plus post) for a single request (512) were detected, este error se produce cuando estamos mandando en una aplicación web mas parámetros de los permitidos por default en JBoss, la solución a ese error es poner en el archivo de configuración del JBoss un parámetro llamado org.apache.tomcat.util.http.Parameters.MAX_COUNT, le vamos a poner de valor "2000" y así evitamos que se reproduzca de nuevo este error, tranquilos que esto no afecta el comportamiento de la aplicación no desesperes y soluciona ese pequeño bug, es bueno que al crear tu súper aplicación ya le pongas esta propiedad y evites posibles futuros errores, para solucionarlo vamos al archivo de configuración de nuestro JBoss que se encuentra en la siguiente ruta: tuJBoss>standalone>configuration>standalone.xml y vamos agregar esta propiedad justo después que termina la etiqueta "<extensions>"
</extensions> 
 

    

 

Con este dato java ya debería funcionar nuestro aplicativo, si te dice que 2000 es muy poco le pones mas. Depende de la aplicación.


Temas Relacionados:

27/12/14

JNDI Datasource Java JBoss. JDBC Tip.

Datasource (fuente de datos) en Java. JNDI JDBC Tip.

JNDI Datasource Java JBoss. JDBC Tip.



Una buena práctica de programación cuando estamos haciendo una aplicación web en Java es utilizar la api JNDI (Java Naming and Directory Interface), que es una API de java que nos permite buscar objetos mediante un nombre, eso quiere decir que podemos crear una fuente de datos (Datasource) en el cual vamos a declarar todo lo referente a nuestra conexión a la base de datos que vamos a utilizar, y mediante la API JNDI obtenemos la conexión para hacer nuestras consultas. Ok por si no te queda claro ahora te lo explico de otra manera con un breve ejemplo, estás en tu desarrollo de la aplicación web Java que corre en el servidor de aplicaciones JBoss, bueno ahora cuando quieres hacer una consulta a la base de datos primero tienes que conectarte a la misma mediante JDBC , obvio que si utilizamos este ejemplo en una aplicación web funcionara pero no es una buena práctica de programación ya que la aplicación web no se hace portable y aparte de eso si queremos hacer un cambio de un puerto, ip o el nombre del driver hay que hacerlo modificando el código, cuando sería una mejor practica hacerlo mediante JNDI y así cualquier cambio no implica hacer una modificación de código, aparte de eso todas las aplicaciones que corren en el mismo servidor de aplicaciones pueden utilizar el Datasource para conectarse a la base de datos. Imagina hacer una clase de conexión para cada aplicación que desarrollas y todas corren en el mismo servidor de aplicaciones, mejor práctica es hacerlo una sola vez y reutilizarlo en todas las aplicaciones que desarrollas.