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 )
TestStatelessLocal.java ( interfaccia locale )
TestStatelessRemote.java ( interfaccia remota )
TestStateless.java ( classse del session bean )
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 ):
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:
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
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: