I have a Java swing GUI client.
It is delivered to user's PCs via JNLP in response to a web page request.
It has a javax.jms.MessageListener that listens to a jms.Queue on a remote internet server (glassfish 4) whose Message listener is a MDB.
When I launch the client directly from eclipse, all works well.
But when I launch if from my browser clicking a link to the JNLP filethe client fails to deploy with a NoClassFound for javax.jms.MessageListener.
After many hours it dawned on me that maybe that's because Java JRE doesn't include the JMS API. And therefore I need to package the JMS classes used by the client in my .ear package.
So I'd truly appreciate anyone telling me if they think I'm on the right track before I start. And if so confirming where I should put the MessageListener.class in my .ear/.war package.
Thanks for any help..
It was a dumb question. Of course the fix was to package the few JMS .class files I needed in the .jar file the JNLP file downloaded.
Putting in the entire Javax.jms.jar file was unthinkable since it had to be downloaded with the client.
For other newbees all it took was changing the jms.jar to jms.zip to extract the entire API in .class format. Then repackage only what I needed.
Related
Okay so my problem is that I need to deploy my website from eclipse to an online server which is provided by my university. I've been handled a guide, which suggested that I converted my entire project into a WAR file. The WAR file is placed on my desktop and that particular path is also applied in my Filezilla setup.
The problem is, when I try to run the code through filezilla with the following URL
ftp://Kristian1709tomcat#Kristian1709.tomcat.student.hum.au.dk/webapps/b-exam-ba-newssite.war -
My browser starts downloading the WAR file instead of showing it as a website.
My instructions from my teacher is as followed:
The Host
Kristian1709.tomcat.student.hum.au.dk
Username: Kristian1709#tomcat
Password: *******
Any sort of help will be very welcomed as I have to handle in the entire project for my finally exame tomorrow.
In advance thank you!
FTP stands for File Transfer Protocol, in my experience War files are to be run inside an application server, such as glassfish or tomcat server, and viewed through a browser, not a FTP client
Make sure its hosted within an application server and a change of url should fix your problem.
I have about 4 war files deployed on a glassfish server, that's independent of http and ftp.
go here in your browser Kristian1709.tomcat.student.hum.au.dk
And login/deploy
When I am executing a jar file from the browser, is the class file running on the client end or on the server end?
I am developing a security web application where files are encrypted and decrypted. I need this to be done on the client side through a pin which client chooses.
Therefore when an jar file is running on the browser, is the class file where encryption and decryption is done processes on the client end or in the server end?
You can launch the jar file with jnlp ( Webstart) but it will not run on browser. Only a launch. You can execute code In Applet / JApplet, which will be in browser. Depends what you need at business logic.
mostly as matheszabi mentioned what business demands.
you are not executing jar anytime in client end. Via Applet/JApplet you are loading the byte source into browser which then executes your actions. For this you need to have java run time to be installed on the client machine for browser support.
if you are using jsp/servlet model you would understand the java execution is always on the server side.
I have never used JNLP, and I have no web/war server already running so I will install it from sratch:
Which to use?
GlassFish
Tomcat
Apache
Jetty
Another?
I wonder if someone already using JNLP could make any recomendation for the server.
I just want a blank page with a button in the middle for starting the application nothing more, nothing less.
If you use only JNLP you don't need Java server. JNLP is client side. Simple http server like Apache HTTP Server should be OK. HTTP server will be better solution than use of web container/Java EE server because JNLP (usually) is a static content. Even lighthttpd should be enough.
As already stated any server capable to serve HTTP will do. If your WebStart application is not signed by itself (i.e. you code-signed the corresponding Jar files) you could probably consider to publish the JNLP plus its resources via HTTPS. This way your clients will know that the software they are going to execute came from its rightful origin. Although unsigned WebStart applications are restricted in their privileges on the client's machine it still is a measure to elicit trust in your clients. On the other hand this requires more configuration effort with regard to the server you chose.
If your application will need some extended privileges on the client's machine such as access to the file system then I would recommend that you do sign your jar files to gain the necessary privileges automatically (don't forget to specify them in a element within your JNLP).
These are the default restrictions for unsigned WebStart apps:
No access to local disk.
All your jars must be downloaded from the same host. Note, however, that you can download extensions and JREs from any host as long as they are signed and trusted.
Network connections are allowed only to host from which your jars were downloaded. ("Phone home restriction.")
No security manager can be installed.
No native libraries (not even in extensions).
Limited access to system properties. (The application has read/write access to all system properties defined in the jnlp file, as well as read-only access to the same set of properties as applets
You dont need a server to run JNLP(Webstart).. This is how webstart works
it simply is an application that can be started over the web, this would be the procedure from the user perspective:
user goes to yourwebsite.com
user see's link: run my awesome app
user clicks link, which downloads .jnlp file
user runs the jnlp file through java web start (part of java SE, user requires java runtime environment JRE to run this)
java web start reads jnlp to get information about the server that holds the corresponding application
jar files get downloaded automatically (the first time) and then the application starts
user gets bored and closes application
the next day, user comes back and clicks your link again
application is already downloaded, so it starts right away
user gets bored again and closes your application
1 day later, you decide to update your application and you deploy the new jar file on your
server, replacing one of the old files
after 2 days user clicks your link again
java web start recognizes that the user has a different version, downloads update automatically and starts the application again
...
..
.
I have created an applet that communicates with a MS Access database (or at least, it should). It works fine when I run it through Dr Java or NetBeans, but when I embed the .class file in an html page and open the html page, it seems to run but none of the changes it is supposed to make to the database actually happen and it cannot retrieve data from the database either. What do I need to do?
Note: the html file, the class file, and the java source file are all on my computer, and in the same folder. The html file is not published or anything, I just created it myself to test the applet.
If you want the database on a server, you need to have it on the same server as the applet is on. E.g. Use Jetty and write a Servlet that communicates with the database via JDBC. The applet then has to communicate with your Servlet, maybe as a web service.
applets run in a sandbox environment . if applet requires access to user system resources it needs to be signed.
package your ".class" files in a jar . have an html file outside the jar that references your jar inside applet tag. then sign your applet jar. see http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html
-----------UPDATE------------------------------
There are two ways of connecting to a database on the server side.
1- The hard way. Untrusted applets cannot touch the hard disk of a computer. Thus, your applet cannot use native or other local files (such as JDBC database drivers) on your hard drive. The first alternative solution is to create a digitally signed applet which may use locally installed JDBC drivers, able to connect directly to the database on the server side.
2- The easy way. Untrusted applets may only open a network connection to the server from which they were downloaded. Thus, you must place a database listener (either the database itself, or a middleware server) on the server node from which the applet was downloaded. The applet would open a socket connection to the middleware server, located on the same computer node as the webserver from which the applet was downloaded. The middleware server is used as a mediator, connecting to and extract data from the database
(Comment by OP on the other thread.)
Could you please explain how the applet can "phone home" to its own server?
I suspect the basic problem with your current approach is that the JRE is getting confused as to whether the DB and applet are on the same 'server'. The first thing to do is stop thinking about folders or directories (or their associated URLs), and do everything, including access the applet, via. your local server. So the URL to the applet should be something like..
http://localhost:8080/the/applet.html
Then make sure all calls to the DB are done through the server as well.
One of my requirements is, on load of page, a file is to be created dynamically and downloaded at a particular location on the client's machine.
In case the file is already present, it has to be over written.
is there any way where we can access the client's system and store the file at the required folder?
I feel one cannot access the client machine when the code is being executed on the server..
Senorio:
1-User click on generate document then it took template stream data ,req. data file and then save two file into client machine.
2-After that template open and it fetch the data file from same directory.
Please help me on this. This is an SOS!!
There are probably other solutions, I use a signed applet for this purpose.
As always, there are a few caveats though:
You can't "force" anything against the will of the user. Applets may be disabled in the client's browser, or they may not even have Java installed. Or the target directory might not be writeable by the user.Your server should handle cases where the client doesn't have the correct version of the file gracefully.
You can't do this from the server side obviously but you also really can't do this from a client script either. Browser security will prevent a page script from modifying contents of the file system.
Your only options will be to run a third-party browser plugin software that has elevated permissions.
Examples of such are
Java Applets
Java WebStart
Microsoft Silverlight
ActiveX
Each one is different and most require some level of user interaction to confirm that they allow plugins to run with elevated security.