[Java EE] Problema JUnit e alcuni chiarimenti su jee

Sevenjeak

Utente Attivo
27 Nov 2012
81
2
8
35
sevenjeak.altervista.org
Sto studiando in questo periodo Java EE ( seguendo in particolar modo le guide su html.it ), comunque, ho iniziato con studiare il jsp le servlet e le ejb, ora sto vedendomi i Session Bean Stateless, e fin qui tutto apposto.

Seguendo in particolare questa guida:

http://www.html.it/guide/guida-j2ee/

Come scritto nel capitolo 3, mi sono creato un progetto ear ( che da quello che ho ben capito mi occorre principalmente per distribuire in futuro i moduli ejb contenuti in esso, o sbaglio? ), per poi creare un progetto ejb, ho collegato, come scritto in guida il projetto ejb al modulo enterprise ( progetto ear ), l'unico cambiamento che ho fatto, e nel codice, creando una classe che per adesso, contiene due semplici metodi, uno che ritorna il parametro passato incrementato e l'altro che lo ritorna decrementato.

Tutto il codice, l'interfaccia comune e l'interfaccia locale e remota lo inserito nel pachetto testing.stateless, contenente questi sorgenti:

TestStatelessInterface.java ( interfaccia comune )
Codice:
package testing.stateless;

public interface TestStatelessInterface {
    public int increseValue(int value);
    public int decreaseValue(int value);
}

TestStatelessLocal.java ( interfaccia locale )
Codice:
package testing.stateless;

import javax.ejb.Local;

@Local
public interface TestStatelessLocal extends TestStatelessInterface {

}

TestStatelessRemote.java ( interfaccia remota )
Codice:
package testing.stateless;

import javax.ejb.Remote;

@Remote
public interface TestStatelessRemote extends TestStatelessInterface {

}

TestStateless.java ( classse del session bean )
Codice:
package testing.stateless;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 * Session Bean implementation class TestStateless
 */
@Stateless(mappedName = "TestStateless")
public class TestStateless implements TestStatelessRemote, TestStatelessLocal {

    /**
     * Default constructor.
     */
    public TestStateless() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public int increseValue(int value) {
        // TODO Auto-generated method stub
        return value++;
    }

    @Override
    public int decreaseValue(int value) {
        // TODO Auto-generated method stub
        return value--;
    }

}

Il problema e quando eseguo l'unit test ( provando a crearla sia nel metodo utilizzato nella stessa guida che con junit5, prendendo spunto da altre guide online ).

In poche parole la unit test che ho realizzato e questa ( si trova nel packege test dello stesso progetto ejb ):

Codice:
package test;

import static org.junit.jupiter.api.Assertions.*;

import java.util.Properties;

import testing.stateless.TestStatelessRemote;
import javax.naming.*;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import junit.framework.TestCase;


class IntegrationTest {
    private static Context namingContext;
    private static TestStatelessRemote ejbRemote;
    private static final String REMOTE_JNDI_NAME="/FirstEar/FirstEJBProject/TestStateless!testing.stateless.TestStatelessRemote";
 
    @BeforeAll
    public static void init() {
        try {
            Properties jndiProperties = new Properties();
            jndiProperties.put("jboss.naming.client.ejb.context", true);
            jndiProperties.put(Context.PROVIDER_URL, "http-remoting://localhost");
            jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
            namingContext = new InitialContext(jndiProperties);
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }

    @Test
    public void testStateless() {
        try {
            ejbRemote = (TestStatelessRemote) namingContext.lookup(REMOTE_JNDI_NAME);
        
            TestCase.assertEquals(ejbRemote.decreaseValue(1), 0);
            TestCase.assertEquals(ejbRemote.increseValue(1), 2);
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
    @AfterAll
    public static void destroy() {
        try {
            namingContext.close();
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Inserendo, nel clash patch, oltre alla libreria JUnit5 ( creata da eclipse ) il jar ( che ho trovato su internet ) wildfly-naming-client-1.0.4.Final.jar ( che mi risolve l'eccezione NoInitialContext, per l'application server che uso )

Fatto questo, eseguo il codice, e mi viene stampata questa eccezione:

gen 06, 2018 11:41:54 AM org.jboss.naming.remote.client.InitialContextFactory <clinit>
INFO: WFNAM00025: org.jboss.naming.remote.client.InitialContextFactory is deprecated; new applications should use org.wildfly.naming.client.WildFlyInitialContextFactory instead
gen 06, 2018 11:41:55 AM org.wildfly.naming.client.Version <clinit>
INFO: WildFly Naming version 1.0.4.Final

Ovviamente il test non mi si esegue proprio.

Per quando riguarda il recupero dell'interfaccia locale in un web project ( come viene anche mostrato nel capitolo 5 della guida postata qui sopra ) mi funziona tutto correttamente ( premettendo che ho provato solamente il primo codice, non ho ancora provato a recuperare la classe locale tramite la classe InitialContext )

Cmq, ritornando a noi, perché l'unit test non mi funziona?

P.S.: Ah.. Quasi dimenticavo, come application server, sto usando WildFly 11.0.0.Final

EDIT
:

Leggendo bene il codice dell'ore mi sono accordo che la classe InitialContext nel package org.jboss.naming.remote.client è obsoleta ed è stata sostituita, quindi ho modificato la mia unit test cosi:

Codice:
package test;

import static org.junit.jupiter.api.Assertions.*;

import java.util.Properties;

import testing.stateless.TestStatelessRemote;
import javax.naming.*;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import junit.framework.TestCase;


class IntegrationTest {
    private static Context namingContext;
    private static TestStatelessRemote ejbRemote;
    private static final String REMOTE_JNDI_NAME="/FirstEar/FirstEJBProject/TestStateless!testing.stateless.TestStatelessRemote";
    
    @BeforeAll
    public static void init() {
        try {
            Properties jndiProperties = new Properties();
            jndiProperties.put("jboss.naming.client.ejb.context", true);
            jndiProperties.put(Context.PROVIDER_URL, "http-remoting://localhost");
            jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
            namingContext = new InitialContext(jndiProperties);
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }

    @Test
    public void testStateless() {
        try {
            ejbRemote = (TestStatelessRemote) namingContext.lookup(REMOTE_JNDI_NAME);
            
            TestCase.assertEquals(ejbRemote.decreaseValue(1), 0);
            TestCase.assertEquals(ejbRemote.increseValue(1), 2);
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    @AfterAll
    public static void destroy() {
        try {
            namingContext.close();
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Ora l'eccezione che mi avverte di non usare l'initialContext obsoleto non appare più, ma mi compare pur sempre l'eccezione:

gen 06, 2018 12:56:12 PM org.wildfly.naming.client.Version <clinit>
INFO: WildFly Naming version 1.0.4.Final

Per risparmiare spazio sul post vi linko un file contenente tutte le eccezioni che JUnit mi da ( cosa che prima non avevo postato:

https://mega.nz/#!fc8EDTyS!8O81gq3jDtf-cabwE5xdCHyaqlfZjVRTlt_yuNY8l5Q
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
F NetBeans problema creazione progetto Java Windows e Software 0
N [Java]problema jasper report dopo compilazione file .jar Java 0
A [java] problema esercizio Java 0
A [java] problema esercizio array Java 5
L Problema con recupero dati in PHP cURL e JAVA con server PHP 1
D Problema Java da risolvere Java 3
G Problema con algoritmo ricorsivo [backtracking] java Java 0
G Problema Firefox 32.0.3 e Sun Java Windows e Software 2
voldemort Java e problema compressione/decompressione LZW Java 0
A [Java] Problema con la dimensione di un jframe Java 2
A Problema gestione galleria fotografica in java Javascript 4
T java-problema con i file wav Java 0
T problema connessione db java Java 4
L Problema con finestre IE e java Windows e Software 1
U Problema java con <div> Javascript 0
T [Java] semplice problema Java 2
T [Java] Problema evento Java 1
A (Java) problema con iteratori Java 1
P Problema con java Java 2
F problema di applet-java Javascript 1
B [Java] Problema cn EircApplet Java 0
L java api_google Javascript 0
Z [java] bufferizzare stream audio da mic Java 1
L java + Api di google Javascript 1
A [Cerchiamo] [Retribuito/a] "Java Solution Architect" Offerte e Richieste di Lavoro e/o Collaborazione 1
F Script java elenco alfabetico non funziona Javascript 3
C Serializzazione in java Java 1
M AIUTO ESERCIZIO JAVA Javascript 1
M Ripasso Java Offerte e Richieste di Lavoro e/o Collaborazione 0
F [OFFRO - RETRIBUITO] Sviluppatori JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
L leggere RGB di un pixel dello schermo in java Java 1
I Creazione programmino JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
F Aiuto java script Javascript 2
T [Java] tipi generici con esempio pratico Java 1
J File audio in java Java 0
V [JAVA] come integrare un software scritto in java su una pagina web? Java 4
C Java client / server Java 0
F [OFFRO][RETRIBUITO] PROGRAMMATORE JAVA Offerte e Richieste di Lavoro e/o Collaborazione 0
C [Java] testare un metodo con Junit Java 1
A [Java] caricare un url esterno senza utilizzo di iframe Java 0
S [OFFRO] Debug delle tue applicazioni Java Offerte e Richieste di Lavoro e/o Collaborazione 1
L [Java] Aggiungere elementi ad array JSON Java 0
B [Java] Paginazione in risposta HTTP Java 0
A [Java]Date diminuite di un giorno su db MySQL Java 0
K [Java] aiuto switch case Java 1
P [Java] limite destro di un JFrame Java 5
D [Java] far partire JProgressBar all'apertura di un JFrame Java 1
N [java con eclipse]metodo ricorsivo che accetta in ingresso un char e restituisce un int Java 0
A Verifica validità data in Java Java 2
L [Java] Errore json conversione Java 0

Discussioni simili