Tuesday, September 24, 2013

Diving into the unknown: the JEUS application server

There are quite a number of Java EE implementations. At the open source front JBoss, GlassFish and increasingly TomEE are very well known. On the commercial side there's WebLogic, WebSphere and increasingly Liberty that are rather well known as well.

A couple of implementations are somewhat less known such as Resin and Geronimo/WASCE, but you'd expect many advanced Java EE developers to have heard of those. Yet another implementation is JOnAS, which arguably is much less known.

Then however, there are also the truly obscure (in the sense of not widely known) ones such as TMax JEUS, Fujitsu Interstage Application Server, Hitachi uCosminexus Application Server and NEC WebOTX Application Server. These seem to be virtually unknown among general Java EE users. The only way I found out that these servers even existed was because of them being mentioned on Oracle's Java EE compatibility page.

The most famous of these unknown servers is JEUS; every ~3 years it makes it into the news as the first server after the RI (GlassFish) to be certified for the new Java EE version. Considering that JEUS is a full Java EE implementation this no small feat. Now Applications Servers have it somewhat easier these days as they rarely have to implement any of the major sub-specs like JSF, CDI, JPA, Bean Validation, etc themselves but can instead choose from one of the readily available open source implementations. Still, there's a lot of extra work into building a complete AS out of them, and for some sub-specs like e.g. JASPIC there isn't a really reusable (open source) implementation available.

As I'm somewhat in the business of testing JASPIC implementations and JEUS should probably ship with its own independent JASPIC implementation, plus the fact that we want to test OmniFaces on as many servers as possible, I found it to be interesting to take a deeper look at it.

The first thing I found out is that JEUS really is obscure. Besides some news articles that JEUS is the first AS to be Java EE 7 certified, there's hardly anything to be found. On StackOverflow for example when you search for "JBoss" there are about 26000 results. Searching for "GlassFish" yields about 16500 results. Searching for "JEUS" however has... 3 results, of which 2 from the same user. Searching on Google gives some results, but nearly all of them are in Korean. The very few (old) posts in English are written by someone who judging by his name is also Korean.

Clearly JEUS is thus very much a Korean thing. It might well be that JEUS enjoys enormous popularity in Korea, but for some reason this popularity doesn't really extend beyond Korea. As mentioned JEUS doesn't really exist on StackOverflow, I've never seen it being mentioned on forums, or in discussions on the various Java (EE) mailing lists (although occasionally TMaxSoft experts do post) and at OmniFaces we have never received any question or bug reports from a JEUS user. The Eclipse marketplace does not carry any plug-in for JEUS and it's not listed among the servers in the "download additional server adapters" dialog either. Yet logic dictates that there must be some user base that justifies the colossal investment of developing and maintaining a full Java EE implementation.

Downloading JEUS proved to be a bit troublesome. There's a company site at tmaxsoft.com, but this is the typical corporate website that contains some nice projections and customer testimonials (indeed mainly Korean companies again) without any real technical information or any kind of download link. Frustrating is that despite the site being composed of static documents, it uses JavaScript to put new content on a page making it impossible to link to anything. Even worse is that a number of links just don't seem to work. At the JEUS section (to which I can't link because of the js issue), there's a link to download the brochure, but after clicking on it simply nothing happens. I tried to register from the JEUS section and got directed to an actual URL (http://tmaxsoft.com/jsp/popup/info_reg.jsp), but after filling out the form nothing happened. When trying to register from the index page I got redirected to another URL (http://tmaxsoft.com/member/memberRegister.do?strMode=INSERT&join_gubun=web) which presented a rather similar but still different form. After I filled this one out I was rewarded with a friendly confirmation:

Register has been completed.
Please authentication with your email address which is registerd when you signing up.
But when I did just that, a got a somewhat less friendly message:
this ID has not been certificated
 with your e-mail for register yet.
Besides the not entirely correct usage of English (which is a sin I also not rarely commit despite being partially of English descent), this was all not really encouraging.

After some Googling, I stumbled upon another TMaxSoft site, a proper technical one this time: technet.tmax.co.kr :) Unfortunately it's all in Korean. You can change to English, but that gives you a rather different site instead: technet.tmaxsoft.com. Luckily Google Translate does a fairly decent job. Reading the content it's weird that for an application server that always wins the certification race for a new Java EE version, the overall description of the server is about J2EE 1.3 features! :( At the bottom of the document it goes on to describe that JEUS 4.2 is compatible with J2EE 1.3, and not a word about JEUS 7 (Java EE 6) let alone JEUS 8 (Java EE 7).

Registering again via this site using the translated Korean version however finally did work! I could now access a download page, which offered me to download JEUS 5 (J2EE 1.4) and JEUS 6 (Java EE 5). After browsing some more through the site I found a JEUS 4.x Development Guide (which should be over a decade old), and clicking on the online manual brought up some JEUS 5 docs (nearly a decade old), and when downloading the manual I would get something for JEUS 6 (still some 6 years old). I checked the JEUS section of their corporate Chinese site, but it too has JEUS 6 listed as the latest version. From here I could downloaded the brochure, but it doesn't say much. There are links to a US site, but the domain seems to be gone. Some clever fiddling with the URL of the online manual at the Korean site revealed that the JEUS 7 online manual is in fact there, namely at technet.tmax.co.kr/kr/edocs/jeus/70/index.html. Why this isn't linked as the default (is it even linked from somewhere at all?) is beyond me.

Just to be sure I also tried the English technet.tmaxsoft.com. Curiously, I had to register again for this one (it really is a separate site). Unfortunately, here too the latest JEUS version that can be downloaded from the Trial Versions section is JEUS 6 and the latest manual is again JEUS 6. Even stranger is that the US version of the TMaxSoft site apparently did mention JEUS 7 and had some clear download links for a jeus60_unix_generic_en.bin and jeus70_linux_x86.bin, according to an archived capture of the domain when it was still up.

This all didn't exactly boost my confidence in JEUS. How can they be the first with a new Java EE version all the time, yet have a website that seems stuck years in the past and inconsistently presents me documentation about different (ancient) versions? It just didn't make a whole lot of sense. At any length the JEUS 7 manual that I found seemed fairly professional and thorough, but it's mainly about the classic Java EE stuff (Servlet, JSP, EJB (including CMP!), JCA, etc). I didn't see JSF and CDI being mentioned anywhere, but it does cover JPA.

After some more Googling I finally landed on a developer preview page at the corporate site again that did contain a direct download link for JEUS 8. (Again, I wonder why this isn't directly linked from the tech site, and why it isn't on the main download page.) Via this I got a 160.5MB large file called jeus80_unix_generic_ko.bin. The first few hundred lines of this file are a shell script that starts some Java based installer that extracts itself. It's a clever trick to have a one file kind of universal installer. Unfortunately it wouldn't run on OS X:

Preparing to install...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...

Launching installer...

Preparing CONSOLE Mode Installation...

===============================================================================
JEUS8.0                           (created with InstallAnywhere by Macrovision)
-------------------------------------------------------------------------------


The installer cannot run on your configuration. It will now quit.
Luckily I have an Ubuntu machine as well, on which the install did work:
Introduction
------------

InstallAnywhere will guide you through the installation of JEUS8.0.

It is strongly recommended that you quit all programs before continuing with 
this installation.
I was of course not going to quit all programs (does anyone seriously do this???) and continued. After accepting the license I could choose a platform:
Choose Platform
---------------

Choose the operating system and architecture :
1)HP-UX PA-RISC
2)HP-UX Itanium
3)Solaris UltraSPARC
4)Solaris x86
5)Solaris x64
6)AIX 5.x, 6.x, 7.x PowerPC
7)Linux Itanium
8)Linux x86
9)Linux x64
Quit) Quit Installer

Choose Current System (DEFAULT: 9): 
And after asking for an installation folder I could choose a type (?):
Installation type
-----------------

Please choose the Install Set to be installed by this installer.

  ->1- Domain Admin Server
    2- Managed Server

ENTER THE NUMBER FOR THE INSTALL SET, OR PRESS  TO ACCEPT THE DEFAULT
As I have no idea what the difference is, I went for the default. After that it asked me for an installation type (production/dev), for a JDK path (interestingly it only accepted a JDK 7 version), an administrator password (it wanted a minimal length and some numbers, I choose "admin007" and a "domain" name (I went for the default "jeus_domain"). This installed 207MB in a folder, with the following layout:
bin    docs     lib      nodemanager  setup      ThirdPartyLicenses.txt
derby  domains  license  readme.txt   templates  UninstallerData
Interestingly setup/lib_native had the following content:
aix5l_32  hp-ux_64       linux_ia64    linux_x86_32  sunos_32   sunos_x86
aix5l_64  hp-ux_ia64_32  linux_ppc_32  linux_x86_64  sunos_64   win32
hp-ux_32  hp-ux_ia64_64  linux_ppc_64  mac           sunos_x64  win64
Note the presence of the mac folder! While setup/bin only contains "binaries" for win and unix, the actual binaries are just shell scripts. E.g. /bin/startDomainAdminServer contains this as its most important part:
#!/bin/sh

[...]

# execute jeus with echo
set -x
"${JAVA_HOME}/bin/java" $VM_OPTION  $SESSION_MEM                            \
    -Xbootclasspath/p:"${JEUS_HOME}/lib/system/extension.jar"               \
    -classpath "${LAUNCHER_CLASSPATH}"                      \
    -Dsun.rmi.dgc.client.gcInterval=3600000                                 \
    -Dsun.rmi.dgc.server.gcInterval=3600000                                 \
    -Djava.library.path="${JEUS_LIBPATH}"                                   \
    -Djava.endorsed.dirs="${JEUS_HOME}/lib/endorsed"                        \
    -Djava.naming.factory.initial=jeus.jndi.JNSContextFactory               \
    -Djava.naming.factory.url.pkgs=jeus.jndi.jns.url                        \
    -Djava.net.preferIPv4Stack=true                                         \
    -Djava.util.logging.manager=jeus.util.logging.JeusLogManager            \
    -Djava.util.logging.config.file="${JEUS_HOME}/bin/logging.properties"   \
    -Djeus.home="${JEUS_HOME}"                                              \
    -Djeus.jvm.version=${VM_TYPE}                                           \
    -Djeus.tm.checkReg=true                                                 \
    -Djeus.properties.replicate=jeus,sun.rmi,java.util,java.net             \
    ${JAVA_ARGS}                                                            \
This all looks like it could possibly run on OS X anyway but I didn't try this for now.

Most of the libraries that make up the server are in lib/system:

activation.jar                                            http.jar                    jeus-omgapi.jar                    resolver.jar
appcompiler.jar                                           jasper.jar                  jeus-servlet.jar                   saaj-impl.jar
bootstrap.jar                                             javaee.jar                  jeus-store.jar                     sasl.jar
classmate-0.8.0.jar                                       javax.json.jar              jeus-tm.jar                        serializer.jar
com.ibm.jbatch-ri-spi.jar                                 jaxb1-impl.jar              jeus-toplink-essentials.jar        shoal.jar
com.ibm.jbatch-runtime-all.jar                            jaxb2-basics-runtime.jar    jeusutil.jar                       sigar-1.6.4.jar
commons-cli.jar                                           jaxb-impl.jar               jeus-websocket.jar                 sjsxp.jar
commons.jar                                               jaxb-xjc.jar                jeus-ws.jar                        snmp_agent.jar
corba-asm.jar                                             jaxrpc-impl.jar             jline.jar                          stax-ex.jar
corba-codegen.jar                                         jaxrpc-spi.jar              jms.jar                            streambuffer.jar
corba-csiv2-idl.jar                                       jaxws-rt.jar                jmx-description.jar                tmaxjce_jdk15x.jar
corba-internal-api.jar                                    jaxws-tools.jar             jmxremote.jar                      TMAX-JEUS7.0-MIB.mib
corba-newtimer.jar                                        jboss-logging-3.1.1.GA.jar  jmxtools.jar                       toplink-essentials-agent.jar
corba-omgapi.jar                                          jeus-ant-util.jar           jsse14_repack.jar                  toplink-essentials.jar
corba-orbgeneric.jar                                      jeusapi.jar                 jxerces.jar                        trilead-ssh2.jar
corba-orb.jar                                             jeusasm.jar                 libCUtility.so                     weld-api.jar
deploy.jar                                                jeus-concurrent.jar         libJeusNet.so                      weld-core.jar
derby.jar                                                 jeus-config.jar             libjtiagent.so                     weld-spi.jar
derbynet.jar                                              jeus-console2.jar           libNSStream.so                     woodstox.jar
ecj.jar                                                   jeus-console-executor.jar   libRunner.so                       wsit.jar
eclipselink.jar                                           jeus-eclipselink.jar        libsigar-amd64-linux.so            xalan.jar
el-impl.jar                                               jeus-gms.jar                libsigar-universal64-macosx.dylib  xercesImpl.jar
extension.jar                                             jeus-hotswap.jar            libWebtoBAdmin.so                  xml-apis.jar
FastInfoset.jar                                           jeus.jar                    mail.jar                           xml_resource.jar
hibernate-validator-5.0.1.Final.jar                       jeusjaxb.jar                message-bridge.jar                 xmlsec.jar
hibernate-validator-annotation-processor-5.0.1.Final.jar  jeus-launcher.jar           mimepull.jar                       xsltc.jar
hibernate-validator-cdi-5.0.1.Final.jar                   jeus-network.jar            Module-Version-Info.txt
We see the usual suspects here, like Hibernate Validator as implementation for Bean Validation, the IBM JBatch implementation (it's Java EE 7, remember ;)), EclipseLink for JPA, Weld for CDI etc. Here we see again a Mac OS X artifact libsigar-universal64-macosx.dylib. It might be that TMaxSoft is working on OS X support, but just hasn't finished it (this is a developer preview after all).

Some additional "system" dependencies are in lib/shared:

jax-rs-ri-2.0  jsf-injection-provider.jar  jsf_ri_1.2  jsf_ri_2.2  jsf-weld-integration.jar  jstl_1.2  libraries.xml
The directories contain jars like jax-rs-ri-2.0.jar (Jersey), jsf-ri.jar (Mojarra) and jstl-impl.jar. (I wonder though why these aren't also in the lib/system directory with the other Java EE dependencies.) While JEUS is definitely not GlassFish it's clear that it uses the exact same set of dependencies.

The readme.txt is luckily in English and explains how to start the server. I used the following command from the JEUS installation directory:

./bin/startDomainAdminServer -domain jeus_domain -u administrator -p admin007
And lo it behold, it started at the first attempt:
***************************************************************
  - JEUS Home         : /home/arjan/jeus8                           
  - Java Vendor       : Sun                         
  - Added Java Option :                            
***************************************************************
+ /opt/jdk/bin/java -server -Xmx512m -Xbootclasspath/p:/home/arjan/jeus8/lib/system/extension.jar -classpath /home/arjan/jeus8/lib/system/jeus-launcher.jar:/home/arjan/jeus8/lib/system/xalan.jar:/home/arjan/jeus8/lib/system/xsltc.jar:/home/arjan/jeus8/lib/system/jaxb-impl.jar:/home/arjan/jeus8/lib/system/woodstox.jar:/home/arjan/jeus8/lib/system/xml_resource.jar:/home/arjan/jeus8/lib/system/commons-cli.jar:/home/arjan/jeus8/lib/system/jaxb2-basics-runtime.jar:/home/arjan/jeus8/lib/system/javaee.jar:/home/arjan/jeus8/lib/system/tmaxjce_jdk15x.jar -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.library.path=/home/arjan/jeus8/lib/system -Djava.endorsed.dirs=/home/arjan/jeus8/lib/endorsed -Djava.naming.factory.initial=jeus.jndi.JNSContextFactory -Djava.naming.factory.url.pkgs=jeus.jndi.jns.url -Djava.net.preferIPv4Stack=true -Djava.util.logging.manager=jeus.util.logging.JeusLogManager -Djava.util.logging.config.file=/home/arjan/jeus8/bin/logging.properties -Djeus.home=/home/arjan/jeus8 -Djeus.jvm.version=hotspot -Djeus.tm.checkReg=true -Djeus.properties.replicate=jeus,sun.rmi,java.util,java.net jeus.launcher.Launcher -domain jeus_domain -u administrator -p admin007

================ JEUS LICENSE INFORMATION ================
=== VERSION : JEUS 8.0 (Fix#0) (8.0.0.0-b1)
=== EDITION: Enterprise (Trial License)
=== NOTICE: This license restricts the number of allowed clients.
=== Max. Number of Clients: 5
==========================================================
[2013.09.24 22:48:11][2] [launcher-1] [Launcher-0012] Starting the server [adminServer] with the command
 /opt/jdk1.7.0_40/jre/bin/java -DadminServer -Xmx1024m -XX:MaxPermSize=128m -server -Xbootclasspath/p:/home/arjan/jeus8/lib/system/extension.jar -classpath /home/arjan/jeus8/lib/system/bootstrap.jar -Djava.security.policy=/home/arjan/jeus8/domains/jeus_domain/config/security/policy -Djava.library.path=/home/arjan/jeus8/lib/system -Djava.endorsed.dirs=/home/arjan/jeus8/lib/endorsed -Djeus.properties.replicate=jeus,sun.rmi,java.util,java.net -Djeus.jvm.version=hotspot -Djava.util.logging.config.file=/home/arjan/jeus8/bin/logging.properties -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.util.logging.manager=jeus.util.logging.JeusLogManager -Djeus.home=/home/arjan/jeus8 -Djava.net.preferIPv4Stack=true -Djeus.tm.checkReg=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Djeus.domain.name=jeus_domain -Djava.naming.factory.initial=jeus.jndi.JNSContextFactory -Djava.naming.factory.url.pkgs=jeus.jndi.jns.url -Djeus.server.protectmode=false -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=/home/arjan/jeus8/domains/jeus_domain/servers/adminServer/logs/jvm.log jeus.server.admin.DomainAdminServerBootstrapper -domain jeus_domain -u administrator -server adminServer .
[2013.09.24 22:48:11][2] [launcher-1] [Launcher-0014] The server[adminServer] is being started ...
[2013.09.24 22:48:17][2] [adminServer-1] [SERVER-0248] The JEUS server is STARTING.
[2013.09.24 22:48:17][0] [adminServer-1] [SERVER-0000] Version information - JEUS 8.0 (Fix#0) (8.0.0.0-b1).
[2013.09.24 22:48:17][0] [adminServer-1] [SERVER-0001] java.specification.version=[1.7], java.runtime.version=[1.7.0_40-b43], vendor=[Oracle Corporation]
[2013.09.24 22:48:17][2] [adminServer-1] [SERVER-0002] Domain=[jeus_domain], Server=[adminServer], baseport=[9736], pid=[7151]
[2013.09.24 22:48:17][2] [adminServer-1] [SERVER-0004] The current system time zone : sun.util.calendar.ZoneInfo[id="Europe/Amsterdam",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=180,lastRule=java.util.SimpleTimeZone[id=Europe/Amsterdam,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
[2013.09.24 22:48:17][2] [adminServer-1] [SERVER-0571] All JEUS system properties have been confirmed.
[2013.09.24 22:48:17][2] [adminServer-1] [SERVER-0568] [Network] service ip:port = [0.0.0.0 : 9736], representation ip = [0.0.0.0], hostname = [java.local], inetAddress = [java.local/0.0.0.0]
[2013.09.24 22:48:17][2] [adminServer-1] [SERVER-0561] The default RMI export port = 9743.
[2013.09.24 22:48:17][2] [adminServer-1] [UNIFY-0102] There's no selectors count setting for Non-blocking listener 'BASE', applying available processors count 1 instead of it.
[2013.09.24 22:48:17][2] [adminServer-1] [NET-0002] Beginning to listen to NonBlockingChannelAcceptor: /0.0.0.0:9736.
[2013.09.24 22:48:17][2] [adminServer-1] [UNIFY-0102] There's no selectors count setting for Non-blocking listener 'http-server', applying available processors count 1 instead of it.
[2013.09.24 22:48:17][2] [adminServer-1] [NET-0002] Beginning to listen to NonBlockingChannelAcceptor: /0.0.0.0:8808.
[2013.09.24 22:48:17][2] [adminServer-1] [UNIFY-0102] There's no selectors count setting for Non-blocking listener 'jms-internal', applying available processors count 1 instead of it.
[2013.09.24 22:48:17][2] [adminServer-1] [NET-0002] Beginning to listen to NonBlockingChannelAcceptor: /0.0.0.0:9941.
[2013.09.24 22:48:17][2] [adminServer-1] [GMS-0100] The GMS instance for the cluster group jeus_domain_1111111111 has been successfully initialized.
[2013.09.24 22:48:18][2] [adminServer-1] [JNSS-0009] The JNDI naming server has been successfully initialized.
[2013.09.24 22:48:18][2] [adminServer-1] [JNDI.Local-0001] Starting JNDI Local Client...
[2013.09.24 22:48:18][2] [adminServer-1] [JMXR-0138] JMXConnector service URL : service:jmx:jmxmp://0.0.0.0:9736/JeusMBeanServer
[2013.09.24 22:48:18][2] [adminServer-1] [JMXR-0138] JMXConnector service URL : service:jmx:jmxmp://0.0.0.0:9736/JEUSMP_adminServer
[2013.09.24 22:48:18][2] [adminServer-1] [JMX-0051] JMXConnector started with the JNDI name [mgmt/rmbs/adminServer].
[2013.09.24 22:48:18][2] [adminServer-1] [GMS-1000] The member adminServer has joined the cluster group jeus_domain_1111111111.
[2013.09.24 22:48:21][2] [adminServer-1] [CORBA-1002] ORB(SE-ORB) started.
[2013.09.24 22:48:22][2] [adminServer-1] [JMS-7374] The persistence store manager for the JMS broker 'adminServer' has been started.
[2013.09.24 22:48:22][2] [adminServer-1] [JMS-6822] The JMS engine with the broker named adminServer has started.
[2013.09.24 22:48:22][2] [adminServer-1] [WEB-1003] Socket send buffer size of this operating system = [8192]
[2013.09.24 22:48:24][2] [adminServer-1] [WEB-1030] The web engine has started successfully.
[2013.09.24 22:48:24][2] [adminServer-1] [Deploy-0095] Distributing the application[webadmin].
[2013.09.24 22:48:24][2] [adminServer-1] [WEB-3857] 
- session descriptor -
    - timeout           : 30(min)
    - shared            : false
    - reload-persistent : false
- session tracking mode -
    - Cookie     : true
    - URL Rewrite: false
    - SSL        : false

- session cookie config -
    - cookie-name : JSESSIONID
    - version         : 0
    - domain          : null
    - path            : null
    - max-age         : -1 (browser-lifetime)
    - secure          : false
    - http-only       : true

[2013.09.24 22:48:24][2] [adminServer-1] [WEB-1032] Distributed the web context [webadmin] information
- Virtual host    : DEFAULT_HOST
- Context path    : /webadmin
- Document base   : /home/arjan/jeus8/lib/systemapps/fakeWebadmin_war

[2013.09.24 22:48:25][2] [adminServer-1] [WEB-3480] The web module [webadmin] has been successfully distributed.
[2013.09.24 22:48:25][2] [adminServer-1] [Deploy-0096] Successfully distributed the appliacion[webadmin].
[2013.09.24 22:48:25][2] [adminServer-1] [WEB-3484] ServletContext[name=webadmin, path=/webadmin, ctime=Tue Sep 24 22:48:24 CEST 2013] started successfully.
[2013.09.24 22:48:25][2] [adminServer-1] [SERVER-0248] The JEUS server is STANDBY.
[2013.09.24 22:48:25][2] [adminServer-1] [SERVER-0248] The JEUS server is STARTING.
[2013.09.24 22:48:25][2] [adminServer-1] [WEB-3413] The web engine is ready to receive requests.
[2013.09.24 22:48:25][2] [adminServer-1] [SERVER-0602] Successfully sent the JoinedAndReady event. JEUS GMS=[Group=jeus_domain_1111111111,ServerToken=adminServer]
[2013.09.24 22:48:25][2] [adminServer-1] [UNIFY-0100] Listener information
                                    BASE (plain, 0.0.0.0 : 9736) - VIRTUAL - SecurityServer
                                                                           - FileTransfer
                                                                           - BootTimeFileTransfer
                                                                           - ClassFTP
                                                                           - JNDI
                                                                           - JMXConnectionServer/JeusMBeanServer
                                                                           - JMXConnectionServer/JEUSMP_adminServer
                                                                           - GMS-NetworkManager
                                                                           - TransactionManager
                                                                 - HTTP Listener
                             http-server (plain, 0.0.0.0 : 8808) - VIRTUAL
                                                                 - HTTP Listener
                            jms-internal (plain, 0.0.0.0 : 9941) - VIRTUAL - JMSServiceChannel-internal

[2013.09.24 22:48:25][0] [adminServer-1] [SERVER-0242] Successfully started the server.
[2013.09.24 22:48:25][2] [adminServer-1] [SERVER-0248] The JEUS server is RUNNING.
[2013.09.24 22:48:25][2] [adminServer-1] [SERVER-0401] The elapsed time to start: 13779ms.
[2013.09.24 22:48:25][2] [launcher-10] [Launcher-0034] The server[adminServer] initialization completed successfully[pid : 7151].
[2013.09.24 22:48:25][0] [launcher-1] [Launcher-0040] Successfully started the server. The server state is now RUNNING.
The server listens on port 8808 by default. While 8080 seems to be sort of the universal default, there are certainly more servers that deviate from this (e.g. WebLogic defaults to 7001). There doesn't seem be a web app configured on the root, as requesting localhost:8808 yields the following result:

You can enable a web console by adding <enable-webadmin>true</enable-webadmin> to [jeus install dir]/domains/jeus_domain/config/domain.xml as a child of the domain node, e.g. :



    false
    1111111111
    
    adminServer
    true

After this I should have been able to request http://localhost:9736/webadmin, but unfortunately this didn't work:

After some investigation it looks like this web app should have been in [jeus install dir]/jeus8/lib/systemapps/webadmin, but in my case this directory only contained a WEB-INF folder with empty lib and classes folders. When I created an a.jsp file with just the content "hello" in the [jeus install dir]/jeus8/lib/systemapps/webadmin folder and requested the URL again, I got a result :)

Most likely TMaxSoft is doing an overhaul of their web console and it's not added to this developer preview yet. I assume that on the current production version JEUS 7 this would just have worked.

Finally with the command ./stopServer -host localhost -u administrator -p admin007 JEUS can be stopped. Luckily, it indeed stopped correctly.

Conclusion

For a seasoned Java EE developer and library writer it's rather intriguing that there's a complete Java EE server out there that's virtually unknown outside Korea, or at the very least seems to be completely unknown in the West. JEUS may be a very capable server going from the impressive list of testimonials, but there are very high barriers for the casual Java EE developer to come into contact with JEUS.

The most direct issue is that people outside Korea just don't know about JEUS. It's as simple as that. News postings about JEUS being certified is probably the only thing people ever hear about it. JEUS should really have an Eclipse plug-in in the Eclipse marketplace or in the list of "download additional server adapters", if only to raise awareness that it exists. A few (English) blog posts now and then wouldn't hurt either (a very good example is how David Blevins is raising awareness of TomEE's existence).

For the curious developer who is interested in discovering what JEUS is, the current TmaxSoft websites are a VERY high barrier as well. The USA domain which is just gone, the mandatory login to see documentation or access the download page and above all the absence of links to the most recent versions of JEUS (JEUS 7) are HUGE barriers that will probably shoe away even the more enthusiastic developers.

But JEUS -always- winning the Java EE certification race and the fact that they have been working on their server since at least 2001 (the year JEUS 3 was released) must mean they're doing something right. In a next article I hope to actual run some code on JEUS. My main goal is run the OmniFaces showcase application (which intensively tests JSF, CDI and some BeanValidation), my JASPIC test suite (which obviously tests JASPIC) and our Java EE kickstart application (which tests JSF, EJB, JPA, and the default datasource among others).

Arjan Tijms



References: Further reading:

No comments:

Post a Comment