Home > Uncategorized > One TCP port to rule them all

One TCP port to rule them all

One thing I hate when I install an application server is the process of determining which and how many TCP ports the application is reserving. On a shared machine, It’s even worse because you need to manually change all the reserved ports to start the application server. Since GlassFish define a lot of ports, I sometime gives up and find another machine. There is still pain because I always have to learn which port support which protocol and under which transport etc. Naaa that sucks. I would like to have a single port to change and run all my requests by that port. The good news is with the help of Grizzly, GlassFish v2 can now define a single port that can be used to serve several protocols and transports(not all yet). Even better, its is easy extend the Grizzly Port Unification mechanism to do whatever you want with the request.

Welcome to the Grizzly Port Unification mechanism!

uport.jpg

The pluggable mechanism is based on two interfaces: ProtocolFinder and ProtocolHandler.

  • ProtocolFinder: This is where you define the logic to determine which protocol is used. From a series of bytes, a ProtocolFinder will try to determine which protocol is used or which transport. As an example, GlassFish by default will install the HttpProtocolFinder and the HttpsProtocolFinder.
  • ProtocolHandler: Once the protocol has been determined, its associated ProtocolHandler will be invoked. ProtocolHandler can do whatever they want, like invoking the appropriate internal container (ex: the EJB container), load balance requests and forward them to an external entity, deliver the request to an embedded container (ex: Jetty), etc.

Below is some possible scenarios:

Client send ProtocolHandler Server Endpoint
http://…:4848 Deliver to the WebContainer http://….:4848
https://…:4848 Redirect to the proper transport http://….:4848
http://…/cometd:4848 Forward the request to Jetty Cometd server http://jetty.mortbay.org/cometd:8888
iiop://…:4848 Deliver the request to the EJB container directly No IIOP port opened

I know I know, in some scenario you wouldn’t want to redirect from https to http :-).

As usual, this feature is not “officially” supported in GlassFish’s domain.xml (we have a very strict process in place internally….not sure it is as open as I would like it to be….OK I stop whining as I needed the property for Grizzly standalone support anyway :-)). To add your own ProtocolFinder and ProtocolHandler, you need to manually add two jvm-options, in domain.xml:


<jvm-options>-Dcom.sun.enterprise.web.connector.grizzly.protocolHandlers=
com.sun.enterprise.web.portunif.protocols.http.HttpProtocolHandler</jvm-options>
<jvm-options>-Dcom.sun.enterprise.web.connector.grizzly.protocolFinders=
com.sun.enterprise.web.portunif.protocols.http.HttpsProtocolFinder,
com.sun.enterprise.web.portunif.protocols.http.HttpProtocolFinder</jvm-options>

The above configuration will configure Grizzly Port Unification to first look for the http protocol, then for the https transport, and then try again the http protocol.

Eventually, we gonna consolidate all GlassFish ports to a single one by writing the appropriate ProtocolFinder and ProtocolHandler. Looks promising, does it? At least just for me, having one port to modify will saves my time…

The mechanism will most probably be officially enabled in build 25 if all my testing goes well, and this include making sure the performance of Grizzly is not reduced by such mechanism.

technorati:

_uacct = “UA-3111670-1″;
urchinTracker();

About these ads
Categories: Uncategorized
  1. March 27, 2012 at 11:00 am | #1

    I believe this is outdated, the classes moved to another packages names and the HttpsProtocolFinder is not found.

    • March 29, 2012 at 3:58 pm | #2

      Salut…might be better to ask the question on the GlassFish mailing list. I’m not with that team since 2008. Thanks!

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 50 other followers

%d bloggers like this: