tutorial para jdk descargar con java java-ee netbeans glassfish ejb

para - java ee tutorial



cómo crear una sesión remota EJB desde un cliente (1)

Empecé desde cero. La única diferencia que puedo pensar es que en vez de hacer una aplicación EJB, acabo de crear un módulo EJB para el bean. De lo contrario, creo que es lo mismo.

estructura:

thufir@dur:~/NetBeansProjects$ thufir@dur:~/NetBeansProjects$ tree HelloLibrary/ HelloLibrary/ ├── build.xml ├── nbproject │   ├── build-impl.xml │   ├── genfiles.properties │   ├── private │   │   └── private.properties │   ├── project.properties │   └── project.xml └── src └── hello └── HelloBeanRemote.java 4 directories, 7 files thufir@dur:~/NetBeansProjects$ thufir@dur:~/NetBeansProjects$ tree HelloEJB/ HelloEJB/ ├── build.xml ├── nbproject │   ├── ant-deploy.xml │   ├── build-impl.xml │   ├── genfiles.properties │   ├── private │   │   └── private.properties │   ├── project.properties │   └── project.xml └── src ├── conf │   └── MANIFEST.MF └── java └── hello └── HelloBean.java 6 directories, 9 files thufir@dur:~/NetBeansProjects$ thufir@dur:~/NetBeansProjects$ tree HelloClient/ HelloClient/ ├── build.xml ├── nbproject │   ├── ant-deploy.xml │   ├── build-impl.xml │   ├── genfiles.properties │   ├── private │   │   └── private.properties │   ├── project.properties │   └── project.xml ├── src │   ├── conf │   │   ├── application-client.xml │   │   └── MANIFEST.MF │   └── java │   └── helloclient │   └── Main.java └── test 7 directories, 10 files thufir@dur:~/NetBeansProjects$ thufir@dur:~/NetBeansProjects$

codigo del cliente:

package helloclient; import hello.HelloBeanRemote; import javax.ejb.EJB; public class Main { @EJB private static HelloBeanRemote helloBean; public static void main(String... args) { System.out.println(helloBean.Hi()); } }

frijol:

package hello; import javax.ejb.Stateless; @Stateless public class HelloBean implements HelloBeanRemote { @Override public String Hi() { return "hello world"; } @Override public String Bye() { return "goodbye"; } }

interfaz remota:

package hello; import javax.ejb.Remote; @Remote public interface HelloBeanRemote { public String Hi(); public String Bye(); }

De acuerdo con el Tutorial de Netbeans en las aplicaciones del Cliente EJB , parece que no puedo invocar el método:

Error de compilación:

-do-compile: [mkdir] Created dir: /home/thufir/NetBeansProjects/EntAppClient/build/empty [mkdir] Created dir: /home/thufir/NetBeansProjects/EntAppClient/build/generated-sources/ap-source-output [javac] Compiling 1 source file to /home/thufir/NetBeansProjects/EntAppClient/build/jar [javac] /home/thufir/NetBeansProjects/EntAppClient/src/java/entappclient/Main.java:16: error: cannot find symbol [javac] System.err.println("result = " + mySession.getResult()); [javac] ^ [javac] symbol: method getResult() [javac] location: variable mySession of type MySessionRemote [javac] 1 error BUILD FAILED

cliente:

package entappclient; import ejb.MySessionRemote; import javax.ejb.EJB; public class Main { @EJB private static MySessionRemote mySession; /** * @param args the command line arguments */ public static void main(String[] args) { System.err.println("result = " + mySession.getResult()); } }

ejb:

package ejb; import javax.ejb.Stateless; @Stateless public class MySession implements MySessionRemote { public String getResult() { return "This is My Session Bean"; } }

interfaz remota:

package ejb; import javax.ejb.Remote; @Remote public interface MySessionRemote { }

ahora, si la interfaz se modifica:

package ejb; import javax.ejb.Remote; @Remote public interface MySessionRemote { public String getResult(); }

el bean ahora puede @Override el método:

package ejb; import javax.ejb.Stateless; @Stateless public class MySession implements MySessionRemote { @Override public String getResult() { return "This is My Session Bean"; } }

sin embargo, hay un NPE:

-run: [java] java.lang.reflect.InvocationTargetException [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [java] at java.lang.reflect.Method.invoke(Method.java:606) [java] at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446) [java] at org.glassfish.appclient.client.AppClientFacade.main(AppClientFacade.java:166) [java] Caused by: java.lang.NullPointerException [java] at entappclient.Main.main(Main.java:16) [java] ... 6 more [java] Java Result: 1 run: BUILD SUCCESSFUL Total time: 18 seconds thufir@dur:~/NetBeansProjects/EntAppClient$

¿Cómo puedo invocar el método correctamente? ¿El EJB no está instanciado?