Czy ta aplikacja EJB jest poprawna?

0

Witam,

Nie dawno zacząłem się uczyć EJB. Jest ciężko, gdyż jeszcze nie bardzo wiem o co w tym chodzi itp. już nawet nie wspominam o serwerze JBoss, który zupełnie nie chce współpracować.

Do rzeczy... proszę mi sprawdzić czy moja prosta aplikacja EJB jest dobrze zrobiona. Nie wiem czy to wina klienta czy apki EJB.

@Singleton
@Startup
public class HelloWorld {

	public String getMessage() {
		return "Hello EJB";
	}
}
@Stateless
@Remote(HelloInterface.class)
public class HelloService implements HelloInterface {

	@EJB
	private HelloWorld helloWorld;
	
	@Override
	public String printMessage() {
		return helloWorld.getMessage();
	}

}
public interface HelloInterface {

	public String printMessage();
}

Tutaj jest kod klienta:

try {
			File file = new File("text.txt");
			if (!file.exists())
				file.createNewFile();
			
			PrintWriter pw = new PrintWriter(file);
			jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY,
					"org.jboss.naming.remote.client.InitialContextFactory");
			jndiProperties.put(Context.PROVIDER_URL, "remote://localhost:4447");
			jndiProperties.put(Context.SECURITY_PRINCIPAL, "testuser");
			jndiProperties.put(Context.SECURITY_CREDENTIALS, "testpassword");

			Context context = new InitialContext(jndiProperties);
			HelloInterface helloInterface = (HelloInterface) context
					.lookup("java:global/HelloWorld/HelloService!pl.project.HelloInterface");

			pw.write(helloInterface.printMessage());
			pw.close();

Problem w tym, że nie mogę zobaczyć błędów jakie wywala klient ponieważ, gdy odpalam program to cała konsola zostaje zapełniona logami JBoss. Z tego co widzę to program przestaje działać w miejscu, gdzie pobieram z context komponent.

0

Pokaż te logi bo akurat zaparzyłem nową herbatę i zanim dojdę do fusów to chwilę potrwa...
(ostrzegam -> pokaż to co w logach ma error albo warning, nie wszystko...)
Poza tym nie rozumiem czemu nie uruchamiasz tego klienta jako osobnej aplikacji...

0

W logach nie ma żadnego erroru. Ale zrobiłem tak jak mówiłeś i odpaliłem klienta jako osobną aplikację.

I mam taki error:

wrz 04, 2014 12:02:41 PM org.xnio.Xnio <clinit>
INFO: XNIO Version 3.0.3.GA
wrz 04, 2014 12:02:41 PM org.xnio.nio.NioXnio <clinit>
INFO: XNIO NIO Implementation Version 3.0.3.GA
wrz 04, 2014 12:02:41 PM org.jboss.remoting3.EndpointImpl <clinit>
INFO: JBoss Remoting version 3.2.3.GA
javax.naming.NameNotFoundException: global/HelloWorld/HelloService!pl.project.HelloInterface -- service jboss.naming.context.java.jboss.exported.global.HelloWorld."HelloService!pl.project.HelloInterface"
	at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
	at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178)
	at org.jboss.naming.remote.protocol.v1.Protocol$1.handleServerMessage(Protocol.java:127)
	at org.jboss.naming.remote.protocol.v1.RemoteNamingServerV1$MessageReciever$1.run(RemoteNamingServerV1.java:73)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:745)

Chyba podałem złe namiary na komponent... Tylko, że to skopiowałem z JBoss bo tutaj mam się odwoływać do interfejsów a nie konkretnych klas prawda?

Tutaj są nazwy, które JBoss mi wyświetla dla komponentu.

12:08:45,239 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-8) JNDI bindings for session bean named HelloService in deployment unit deployment "HelloWorld.jar" are as follows:

	java:global/HelloWorld/HelloService!pl.project.HelloInterface
	java:app/HelloWorld/HelloService!pl.project.HelloInterface
	java:module/HelloService!pl.project.HelloInterface
	java:jboss/exported/HelloWorld/HelloService!pl.project.HelloInterface
	java:global/HelloWorld/HelloService
	java:app/HelloWorld/HelloService
	java:module/HelloService

12:08:45,240 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-8) JNDI bindings for session bean named HelloWorld in deployment unit deployment "HelloWorld.jar" are as follows:

	java:global/HelloWorld/HelloWorld!pl.project.HelloWorld
	java:app/HelloWorld/HelloWorld!pl.project.HelloWorld
	java:module/HelloWorld!pl.project.HelloWorld
	java:global/HelloWorld/HelloWorld
	java:app/HelloWorld/HelloWorld
	java:module/HelloWorld

Smacznej herbaty życzę :-)

0

Ja bym wywalił z adresu wykrzyknik i to co jest za nim.

0

No niestety nadal ma problem z nazwą.

1

Ok, ale czy ten string lookup nie powinien nie zawierać tego "java:global"? Spróbuj taki:
/HelloWorld/HelloService!pl.project.HelloInterface

1 użytkowników online, w tym zalogowanych: 0, gości: 1