Create a new stateless Enterprise JavaBean
The EJB project has already been setup for us. But we’re missing the EJB. Right-click the SomeApp-ejb project and select New > Java Class…:
This EJB will implement the remote interface we wrote in the last step, but the class library isn’t in our EJB project’s classpath. Right-click the SomeApp-ejb project’s subfolder Libraries and select Add Project…:
In your RemoteSomethingImpl.java file, write this code:
package com.martinandersson.something; import javax.annotation.security.RolesAllowed; import javax.ejb.Stateless; /** * A boring implementation of the remote interface. * @author Martin Andersson */ @Stateless public class RemoteSomethingImpl implements RemoteSomething { @RolesAllowed("someone") @Override public String saySomething(String something) { return something; } }
In this code snippet, we used the annotation @RolesAllowed to demand a particular authenticated role of the caller. This annotation will soon prove that the solution this tutorial provide works just like the regular Java SE based application client you’re probably accustomed with. That is to say the Application Client Container (ACC) will pop up a login screen for the user and let him pass the credentials needed to invoke our EJB as soon as the application client is launched through Java Web Start. Not until thereafter shall the application client go ahead and start a native JavaFX stage.
Here is what your project tree should look like by now:
hi your blog it is very very interessant.
But how you resolve the problem with the call at remote ejb or application client on a glassfish behind a firewall ?
For example i would download and use the appclient and the glassfish it is on a another macheine extenal at the internal net but on intenet .
go at :
https://www.java.net//forum/topic/glassfish/glassfish/ejb-remote-deployed-gf-31-behind-nat-unaccessible
for view the problem .
tanl you very much for your attention
Mauro
read also at :
http://docs.oracle.com/cd/E26576_01/doc.312/e24939/release-notes.htm#glcmm
for the note problem with remote call to ejb behind a firewall .
mauro
I have no solution to your problem. Actually I haven’t read your URL:s, just looked over them briefly. However, all kinds of remoting is always troublesome if you’re behind a firewall. HTTP wired web services has no issue since they talk on port 80, almost always unblocked, and I believe this is the chief reason they have gained so much in popularity. So the moment a firewall gives you a headache, just expose the EJB as a web service. There is nothing stopping you from combining @WebService with @Stateless.
Thanks lot for this very interessent blog Martin Andersson 🙂
Pingback: JavaFX links of the week, July 22 // JavaFX News, Demos and Insight // FX Experience
Grymt martin! Keep it up!
Nice kodat, och nu ska jag ta och kolla igenom resten av bloggen;) Man blir ju sugen på att börja koda själv fan. Verkar skitkul.
Hi. Thanks for this blog post. It is really helpful. I’ve managed to run it inside the Netbeans. Unfortunately I’ve failed to do it outside the Netbeans. I used Glassfish appclient. I have the following errors……
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at org.glassfish.appclient.client.acc.ACCClassLoader.findClass(ACCClassLoader.java:212)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.joy.azura.Sly.main(Sly.java:23)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at org.glassfish.appclient.client.acc.ACCClassLoader.findClass(ACCClassLoader.java:212)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 13 more
In line 14 (Sly.java:23) my code is
javafx.application.Application.launch(SlyFX.class, args);
I’m able to execute it inside the Netbeans. Thus, I think there is a way to do it outside of the Netbeans.
Could it be that the Application Client Container (ACC) cannot find your JavaFX runtime? And when you say “outside of NetBeans”, I hope you mean using Java Web Start? Please review page 8 and see if it helps. And be sure to upgrade your JDK installed if it is anywhere below 1.7.0_6.
Thanks for your prompt reply. I was using the old next to obsolete method. “asadmin …get-client-stubs… appclient …” so you will have the lighter Glassfish on the client’s computer. Then to execute the Client side type “appclient.bat -jar MyApp-Client.jar” in command line. I have a fat client which needed to work offline. Fortunately requirements have changed. Now I have decided to switch to RESTful Web Service. That one has much better option. Thanks again.
Hi
Is this still required/workable in Java/JavaFX 8, Glassfish 4.1 and netbeans 8.02?
I quickly run through this tutorial in them and could not get it to work. I get a non specific security violation when the webstart finishes downloading and attempts to run it.
Thanks!
Pingback: Java desktop links of the week, July 22 – Jonathan Giles