come creare un EJB di sessione remota da un client

Come per Netbeans Tutorial sulle applicazioni EJB Client , non riesco a richiamare il metodo:

errore di compilazione:

-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"; } } 

interfaccia remota:

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

ora, se l’interfaccia è modificata:

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

il bean ora può @Override il metodo:

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

tuttavia, c’è 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 [email protected]:~/NetBeansProjects/EntAppClient$ 

Come posso invocare il metodo correttamente? Il bean non viene istanziato?

Ho iniziato da zero. L’unica differenza che posso pensare è che invece di creare un’applicazione EJB, ho appena creato un modulo EJB per il bean. Altrimenti, penso che sia lo stesso.

struttura:

 [email protected]:~/NetBeansProjects$ [email protected]:~/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 [email protected]:~/NetBeansProjects$ [email protected]:~/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 [email protected]:~/NetBeansProjects$ [email protected]:~/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 [email protected]:~/NetBeansProjects$ [email protected]:~/NetBeansProjects$ 

codice 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()); } } 

fagiolo:

 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"; } } 

interfaccia remota:

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