I've been preparing a new Release Candidate of IWebMvc2 (get it here). This time I wanted to part from Jetty as, although easy to setup, the results were not that amazing (a first access of around forty five seconds required to compile a complex JSP that relies on many tag files). And I've been following closely the development of Glassfish v3 (I really hope IBM does not buy Sun) so this seemed like a perfect opportunity to test the new embedded server feature.
I started collecting some information from here and there and it seemed easy. I just needed a new repository location
I started collecting some information from here and there and it seemed easy. I just needed a new repository location
<ibiblio name="glassfish" m2compatible="true"
root="http://download.java.net/maven/glassfish" />
root="http://download.java.net/maven/glassfish" />
And a couple of lines in my ivy.xml file
<dependency org="org.glassfish.embedded" name="glassfish-embedded-api"
rev="3.0-Prelude-Embedded-b14" conf="run->default" />
<dependency org="org.glassfish.embedded" name="glassfish-embedded-web"
rev="3.0-Prelude-Embedded-b14" conf="run->default" />
rev="3.0-Prelude-Embedded-b14" conf="run->default" />
<dependency org="org.glassfish.embedded" name="glassfish-embedded-web"
rev="3.0-Prelude-Embedded-b14" conf="run->default" />
Unfortunately GFv3Embedded does not offer any Ant tasks yet so you need a Java class. Something like:
EmbeddedInfo ei = new EmbeddedInfo();
Server server = new Server(ei);
server.start();
Server server = new Server(ei);
server.start();
Tedious but hardly a showstopper. On the bright side the server instance is fully configurable and, for example, a pool/datasource can be added via code (mimicking the admin console commands)
CommandExecutor ce = server.getCommandExecutor();
options.setProperty("datasourceclassname", "myDataSourceClass");
options.setProperty("DEFAULT", "myConnPool");
ce.execute("create-jdbc-connection-pool", options);
options.setProperty("datasourceclassname", "myDataSourceClass");
options.setProperty("DEFAULT", "myConnPool");
ce.execute("create-jdbc-connection-pool", options);
Or a WAR deployed dynamically
options.setProperty("DEFAULT", "c:\\temp\\iwebmvc2.war");
ce.execute("deploy", options);
ce.execute("deploy", options);
So far so good. The surprise came later while executing the script. Just take a look of a trimmed version of the output
[ivy:retrieve] found org.glassfish.embedded#glassfish-embedded-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.distributions#web;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.distributions#nucleus;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.osgi-platforms#felix;3.0-Prelude-Embedded-b14
[ivy:retrieve] found com.sun.enterprise#hk2;0.3.32-prelude-b28
[ivy:retrieve] found com.sun.enterprise#hk2-core;0.3.32-prelude-b28
[ivy:retrieve] found com.sun.enterprise#config;0.3.32-prelude-b28
[ivy:retrieve] found com.sun.enterprise#auto-depends;0.3.32-prelude-b28
[ivy:retrieve] found com.sun.enterprise#tiger-types-osgi;0.3.32-prelude-b28
[ivy:retrieve] found org.glassfish.core#api-exporter;3.0-Prelude-Embedded-b14
[ivy:retrieve] found com.sun.enterprise#osgi-adapter;0.3.32-prelude-b28
[ivy:retrieve] found woodstox#wstx-asl;3.2.3 in public
[ivy:retrieve] found org.glassfish#javax.xml.stream;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.core#glassfish;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.core#kernel;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#glassfish-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#internal-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#config-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#common-util;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.external#grizzly-module;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#stats77;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.deployment#deployment-common;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.external#asm-all-repackaged;3.0-Prelude-Embedded-b14
[ivy:retrieve] found com.sun.pkg#pkg-client;1.0.7-15.1269
[ivy:retrieve] found org.glassfish.flashlight#flashlight-framework;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.flashlight#flashlight-agent;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#monitoring-core;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#admin-cli;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#cli-framework;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#launcher;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.branding#branding;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.distributions#nucleus-base;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.docs#basedocs;3.0-Prelude in javanet
[ivy:retrieve] found org.glassfish.deployment#deployment-admin;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.deployment#deployment-autodeploy;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.external#javadb;3.0-Prelude-Embedded-b14
[ivy:retrieve] found javadb#javadb;10.2.2.1-20070823
[ivy:retrieve] found org.glassfish.web#webtier-all;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.web#web-gui-plugin-common;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.web#web-glue;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.web#web-cli;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#container-common;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#glassfish-naming;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.transaction#transaction-internal-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.transaction;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.resource;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.persistence;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.connectors#connectors-internal-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.deployment#dol;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.servlet;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.annotation;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.enterprise.deploy;3.0-Prelude-Embedded-b14
...and so on...
[ivy:retrieve] found org.glassfish.distributions#web;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.distributions#nucleus;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.osgi-platforms#felix;3.0-Prelude-Embedded-b14
[ivy:retrieve] found com.sun.enterprise#hk2;0.3.32-prelude-b28
[ivy:retrieve] found com.sun.enterprise#hk2-core;0.3.32-prelude-b28
[ivy:retrieve] found com.sun.enterprise#config;0.3.32-prelude-b28
[ivy:retrieve] found com.sun.enterprise#auto-depends;0.3.32-prelude-b28
[ivy:retrieve] found com.sun.enterprise#tiger-types-osgi;0.3.32-prelude-b28
[ivy:retrieve] found org.glassfish.core#api-exporter;3.0-Prelude-Embedded-b14
[ivy:retrieve] found com.sun.enterprise#osgi-adapter;0.3.32-prelude-b28
[ivy:retrieve] found woodstox#wstx-asl;3.2.3 in public
[ivy:retrieve] found org.glassfish#javax.xml.stream;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.core#glassfish;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.core#kernel;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#glassfish-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#internal-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#config-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#common-util;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.external#grizzly-module;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#stats77;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.deployment#deployment-common;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.external#asm-all-repackaged;3.0-Prelude-Embedded-b14
[ivy:retrieve] found com.sun.pkg#pkg-client;1.0.7-15.1269
[ivy:retrieve] found org.glassfish.flashlight#flashlight-framework;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.flashlight#flashlight-agent;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#monitoring-core;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#admin-cli;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#cli-framework;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.admin#launcher;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.branding#branding;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.distributions#nucleus-base;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.docs#basedocs;3.0-Prelude in javanet
[ivy:retrieve] found org.glassfish.deployment#deployment-admin;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.deployment#deployment-autodeploy;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.external#javadb;3.0-Prelude-Embedded-b14
[ivy:retrieve] found javadb#javadb;10.2.2.1-20070823
[ivy:retrieve] found org.glassfish.web#webtier-all;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.web#web-gui-plugin-common;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.web#web-glue;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.web#web-cli;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#container-common;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.common#glassfish-naming;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.transaction#transaction-internal-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.transaction;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.resource;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.persistence;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.connectors#connectors-internal-api;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish.deployment#dol;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.servlet;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.annotation;3.0-Prelude-Embedded-b14
[ivy:retrieve] found org.glassfish#javax.enterprise.deploy;3.0-Prelude-Embedded-b14
...and so on...
And worse....
::::::::::::::::::::::::::::::::::::::::::::::
:: FAILED DOWNLOADS ::
:: ^ see resolution messages for details ^ ::
::::::::::::::::::::::::::::::::::::::::::::::
:: org.glassfish.osgi-platforms#felix;3.0-Prelude-Embedded-b14!felix.distribution-fragment
:: com.sun.enterprise#hk2;0.3.32-prelude-b28!hk2.hk2-jar
:: org.glassfish.core#glassfish;3.0-Prelude-Embedded-b14!glassfish.hk2-jar
:: org.glassfish.core#kernel;3.0-Prelude-Embedded-b14!kernel.hk2-jar
:: org.glassfish.common#glassfish-api;3.0-Prelude-Embedded-b14!glassfish-api.hk2-jar
:: org.glassfish.common#internal-api;3.0-Prelude-Embedded-b14!internal-api.hk2-jar
:: org.glassfish.admin#config-api;3.0-Prelude-Embedded-b14!config-api.hk2-jar
:: org.glassfish.common#common-util;3.0-Prelude-Embedded-b14!common-util.hk2-jar
:: org.glassfish.common#stats77;3.0-Prelude-Embedded-b14!stats77.hk2-jar
:: org.glassfish.deployment#deployment-common;3.0-Prelude-Embedded-b14!deployment..
....and many many more....
What was that? A horror movie? In the end I was able to find a JAR file that packaged every dependency (glassfish-embedded-all-10.0-SNAPSHOT.jar) but it looked like overkill (I don't want EJB, JMS, ...). At least I've learned something: Jetty works wonders for me, it's just I hadn't realized it fully :-)
So kudos to the GFv3 team, a full blown embeddable Application Server is a nice feature to have. But there's work till it reaches (something that resembles) a mature option.
So kudos to the GFv3 team, a full blown embeddable Application Server is a nice feature to have. But there's work till it reaches (something that resembles) a mature option.

4 comentarios:
Thanks for trying Embedded GlassFish! Looks like you ran into some maven issues. While we look into those, you may download the latest promoted build jar from here. The Javadocs are available here.
Please note that embedded is under development. We plan to make this modular similar to GFv3; i.e., you will be able to pick and choose what features you want.
Please join the embedded discussions at embedded@glassfish.dev.java.net and help us to make this the embedded server you want! I appreciate your inputs and looking forward to hearing from you.
--
Nazrul
Thanks for trying Embedded!
* Note that for deployment you might want to use the EmbeddedDeployer object like so:
EmbeddedDeployer dep = server.getDeployer();
dep.deploy(someWar1);
dep.deploy(someWar2);
//.....
dep.undeploy();
====================
(2) You CAN run Embedded without writing API code with the plugin.
I had the xml details here but I don't know how to escape them in this blogger. For details send me an email:
byron.nevins@sun.com
Hola Jose. "embedded@glassfish.dev.java.net" es un buen lugar para preguntas. Varios grupos han explicado como lo han hecho, incluyeno Nuxeo [1]. Nuxeo presentara la semana que viene en TheAquarium Online; no se si van a mencionar embedded. - eduardo
[1]http://wikis.sun.com/display/TheAquarium/BogdanStefanescuNuxeoWebEngine
@Nazrul: I'm concerned about the number of artifacts involved (because the maven/ivy errors are easily solvable bugs). Having dozens of dependencies to check and download for every compilation is something to consider when you are evaluating distributing GFv3 embedded. I'm joining the mailing list, thanks for the tip.
@Byron: Thanks for the API info. It looks much cleaner that way. I tried https://embedded-glassfish.dev.java.net/ and although the javadocs are there I missed other more user oriented documentation (but I know it's a question of time)
Publicar un comentario en la entrada