I'm developing a web application in Java EE/Spring/SpringWEB.
A part of the application needs to communicate with mobile devices through TCP/UDP (not HTTP). I want that all infrastructure runs in the Java EE container (Tomcat for instance). I wonder whether there's any standard or part of the Java EE container (Tomcat) I can reuse for having a TCP Server for free?
I mean I do not want to implement my own TCP server which needs to be scalable/reliable and efficent. I want to reuse as much as possible and use standards where applicable.
Well, Tomcat is not a true Java EE server, but rather the web servlet part of the Java EE stack. There is no real official TCP server lib included in Java EE, except the Java SE socket libraries. I suggest you use the open source library Apache MINA for TCP/UDP server features. It should work with Tomcat. A full Java EE stack (glassfish, websphere, weblogic, geronimo..) might disallow setting up TCP listeners, so be careful if you migrate from Tomcat to a full java ee stack.
There isn't anything in Java EE, not sure about Spring. For implementing on your own, I would highly recommend using netty as the main building block for your tcp server.
Related
We are required to build some Java JAX-RS web services that will connect to some other external web services to retrieve data. Logically, we should host these new JAX-RS web services on a container like WebLogic. Due to cost saving measures by management, we are told to use IIS to host these JAX-RS web services as it is supposedly cheaper than WebLogic. They want the services to be written in Java because it is OS independent, so using .NET is out of the question.
(1) Is using IIS to host Java JAX-RS web services instead of a fully J2EE compliant container like WebLogic to save cost a good idea?
(2) How do we host Java JAX-RS web services on IIS 7.5? What are the required add ons?
Thanks in advance.
First of all, IIS does not support Java. See this old post in MSDN (2005)
IIS can never directly support the use of JSP because it requires an add-on to run Java code in a JVM to Load,
Therefore you always require a J2EE server to execute J2EE services, and the IIS add-on isapi_redirect (see the link). The add-on will capture the requests and forward them to the J2EE server (in the example is used tomcat)
So the answer to your question
(1) Is using IIS to host Java JAX-RS web services instead of a fully J2EE compliant container like WebLogic to save cost a good idea?
No, because you allways need a J2EE server., so the cost parameter is non applicable (without considering other aspects). I suggest also to consider some free of charge servers like Jboss, Tomcat or Jetty
Note also you do not need a fully compliant J2EE server to use JAX-RS. Latest versions of JVM are shipped with an implementation of JAX-RS.
I have made a Java Swing application, in the GUI the user can select the type of element and choose a date then the element's informations will be shown on a JTable.i used easyPHP to create the DB.
so what is the role of apache server in this case!
can i consider it like an application server ?
A Java swing application (AFAIK out of the box, for alternatives see below) is not available over HTTP/S (and is therefore not classified as a web application) and Apache is a web server (with features such as proxy, TLS terminator etc.). Therefore there would be no need for a web server such as Apache to front your Swing application.
Apache web server is not an application server for a Swing application per se. Although it can run applications in different programming languages such as php through loading of modules. It however does not run Java web applications.
An application server in a Java perspective would be Tomcat, Glassfish, JBoss, WebLogic etc. An application server hosts an application and could provide a set of services such as Naming, HTTP processing and so on.
Perhaps you are referring to Apache Tomcat instead of Apache Web Server. If so, you would be right on the mark as that is an application server for Java web applications.
If you would like to make your application available through HTTP and enjoy the myriad and expansive benefits of an application server, I would recommend you to rethink on using Swing and utilize a technology built over Java Servlets such as JSPs, Spring MVC and so on.
If you would still like to make the Swing application available through a web server (through HTTP/S) there are some solutions out there but I have not tried any of those. Please do a search on "Swing available on HTTP" in that case. I have also provided a link as well.
You can read up on Application Servers on this wiki link.
You can read up on an HTTP end point for a Swing application here.
This Apache is not used in your application. You installed easyPHP so Apache comes with that to provide PHP programming environment.
Moreover Apache is a web server. So any web based application can be deploy here. PHP is a web programming language sot it requires Apache or any other web server.
But your application is standalone developed with JAVA SWING. So you can stop Apache server and check everything is running fine or not.
I found this bit of information about the ACC (Application Client Container):
The ACC uses the IIOP ORB to contact the server during injection. The
default port for the ORB is 3700. The Java Web Start support
automatically sets the ORB-related properties to point to the correct
ORB address. If you are running a cluster then this includes all
currently-active cluster members' ORBs.
https://www.java.net/node/679235
However, the documention, in general, seems light. While it is mentioned in the Development Guide:
Introducing the Application Client Container
The Application Client Container (ACC) includes a set of Java classes,
libraries, and other files that are required for and distributed with
Java client programs that execute in their own Java Virtual Machine
(JVM). The ACC manages the execution of Java EE application client
components (application clients), which are used to access a variety
of Java EE services (such as JMS resources, EJB components, web
services, security, and so on.) from a JVM outside the Oracle
GlassFish Server. The ACC communicates with the GlassFish Server using
RMI-IIOP protocol and manages the details of RMI-IIOP communication
using the client ORB that is bundled with it. Compared to other Java
EE containers, the ACC is lightweight. For information about debugging
application clients, see Application Client Debugging.
GlassFish Server Open Source Edition Application Development Guide Release 4.0
also:
The Application Client Container.
Although accessing an EJB from a client using JNDI is simpler than in
EJB 2.x, it is still rather awkward. The good news is that we can
dispense with JNDI altogether if the client runs from within an
application client container (ACC). The EJB 3 specification does not
mandate that an EJB-compliant application server provides an ACC but
makes its inclusion optional. Consequently not all EJB-compliant
application servers provide an ACC, however GlassFish does.
http://www.developer.am/ejb3/?page=application-client-container
it's more of a general description. There's no official documentation on the ACC and its usage specifically?
The Application Development Guide contains some sections (only available as PDF?):
https://glassfish.java.net/docs/4.0/application-development-guide.pdf
https://glassfish.java.net/documentation.html
How can I connect a realtime application which has a totally different life-cycle with WebApp to JBoss or GlassFish?
I need it to create a realtime reporting system. Using Sockets is not possible.
Is it possible to attach an application rather than a web applications to Java application servers so they can work together?
Yes. Java EE defines application clients, that can be any java apps.
With some full Java EE profiles, connections via CORBA should be possible and you could then also use C++ clients.
Another option to hook up any client could be messaging.
I was reading about "Tornado Web Server".
It says that it is non-blocking web server.
Is there any non-blocking server for java web app ?
You're thus looking for a Java servletcontainer/applicationserver which supports NIO (Non Blocking IO).
Pretty much all of them supports NIO: Apache Tomcat, JBoss AS, Oracle Glassfish, etcetera. On some of them (e.g. Apache Tomcat), you've to make some configuration changes first (see also its HTTP connector documentation with regard to NIO). Glassfish uses under the covers Grizzly as NIO implementation of the HTTP connector.
As to which one to choose, that depends on what parts provided by the huge Java EE 6 API you'd like to utilize. If it's just JSP/Servlet, then Tomcat suffices. If you need a bit more than just JSP/Servlet, the Glassfish Web Profile may suffice. If you'd like to utilize the entire Java EE 6 API, then go ahead with JBoss AS or Glassfish Full Platform.
Also there is a non-blocking library in java called Netty and you can use Netty to write asyn network servers like web servers.
Non-blocking sockets have been available in Java in the java.nio pacakges since Java 1.4.
The Grizzly server is a servlet container based exclusively on NIO. Most established Java webservers are older than the NIO feature and have added support for it at some point.
Besides servers that BalusC listed, there is also Grizzly.
Here is a nice description of it's non-blocking operation.