GlassFish Server Open Source Edition 3.1 Milestone 1 is now available. The key functional drivers of this release are:
- Clustering and Centralized Administration
- High Availability
The Feature List shows the complete set of features planned for the release. The Draft Engineering Schedule shows what/when the features will be delivered. Per the schedule, Milestone 1 is the promoted build b02.
This is a bleeding-edge build and the first time clustering capabilities and application versioning are shown in GlassFish 3.1. GlassFish Server Open Source Edition 2.1.1 is the current stable release for all clustering and high availability capabilities.
The key features that work in this milestone build are Basic Clustering Support and Application Versioning. These features are now explained below.
Basic Clustering – This feature allows to create a multi-node cluster with few local/remote server instances and start them. The concept essentially remains similar to GlassFish v2. Here are the key concepts:
- New commands such as "create-cluster", "create-local-instance", "start-instance", and "list-instances" are now available.
- There is a central Domain Administration Server (DAS), corresponds to a GlassFish domain, that manages the entire cluster. This is also the "central repository" of all the artifacts and is the single point of entry to the cluster administration.
- The cluster consists of multiple instances (local and/or remote) that are synchronized with the DAS using SSH Provisioning (as opposed to the "Node Agent" in the v2). The first boot of an instance synchronizes the file system with DAS for configuration files, domain.xml, and any deployed applications. The communication between instance and DAS happen uses CLI interface.
- All applications are deployed to the DAS with a "–target" switch indicating the target cluster.
- Using an interim switch (ENABLE_REPLICATION=true), any command executed on the DAS is re-executed on the local/remote instances. This allows application deployment, JDBC connection pool/resource CRUD, and other similar commands to be re-executed on the instances participating in the cluster.
- Each instance’s administration data is accessible at "http://{host}:{port}/management/domain".
The complete details about how to create a cluster, instances, deploy an application, enable replication etc are available at 3.1 Milestone Clustering Demo Wiki. Here is a quick summary of commands that worked for me. The WAR file used below from the demo wiki.
./bin/asadmin start-domain --verbose &
./bin/asadmin create-cluster c1
./bin/asadmin create-local-instance --cluster c1 --systemproperties HTTP_LISTENER_PORT=18080:HTTP_SSL_LISTENER_PORT=18181:IIOP_SSL_LISTENER_PORT=13800:IIOP_LISTENER_PORT=13700:JMX_SYSTEM_CONNECTOR_PORT=17676:IIOP_SSL_MUTUALAUTH_PORT=13801:JMS_PROVIDER_PORT=18686:ASADMIN_LISTENER_PORT=14848 in1
./bin/asadmin create-local-instance --cluster c1 --systemproperties HTTP_LISTENER_PORT=28080:HTTP_SSL_LISTENER_PORT=28181:IIOP_SSL_LISTENER_PORT=23800:IIOP_LISTENER_PORT=23700:JMX_SYSTEM_CONNECTOR_PORT=27676:IIOP_SSL_MUTUALAUTH_PORT=23801:JMS_PROVIDER_PORT=28686:ASADMIN_LISTENER_PORT=24848 in2
./bin/asadmin list-instances
*** list-instances ***name: in1, host: dhcp-usca14-133-151.SFBay.Sun.COM, port: 14848, state: Not Runningname: in2, host: dhcp-usca14-133-151.SFBay.Sun.COM, port: 24848, state: Not Running
./bin/asadmin deploy --target c1 helloworld.war
./bin/asadmin start-local-instance in1
./bin/asadmin start-local-instance in2
./bin/asadmin list-instances
. . .
name: in1, host: dhcp-usca14-133-151.SFBay.Sun.COM, port: 14848, state: Uptime: 1 minutes, 8 seconds, Total milliseconds: 68984
name: in2, host: dhcp-usca14-133-151.SFBay.Sun.COM, port: 24848, state: Uptime: 31,665 milliseconds, Total milliseconds: 31665
. . .
curl http://localhost:18080/helloworld/hi.jsp
<html><head><title>JSP Test</title>
</head>
<body>
<h2>Hello, World.</h2>
Thu May 27 17:53:47 PDT 2010
</body></html>
curl http://localhost:28080/helloworld/hi.jsp
<html><head><title>JSP Test</title>
</head>
<body>
<h2>Hello, World.</h2>
Thu May 27 17:53:56 PDT 2010
</body></html>
./bin/asadmin stop-instance in1
./bin/asadmin stop-instance in2
./bin/asadmin delete-local-instance in1
./bin/asadmin delete-local-instance in2
./bin/asadmin delete-cluster c1
AS_DEBUG=true and/or AS_LOGFILE=true variables can be set to see some interesting debugging information.
This is only the beginning of a journey and much more exciting features will be released in the subsequent milestones. Milestone 2 is planned for Jun 21st, stay tuned!
Application Versioning – Will Hartung provided an excellent description of why application versioning is important. Basically, multiple versions of an application can be easily deployed concurrently on a GlassFish domain, with one version enabled at a given time. The application may be rolled back to a previous version, quickly is the keyword, in case a bug is encountered in a newer version. The time taken to undeploy the current application, copying the new archive over to server, expanding the archive, deploying/starting the application is all cut down since the application is pre-deployed.
Here is a quick summary of commands that worked for me:
./bin/asadmin deploy helloworld.war
./bin/asadmin deploy --name=helloworld:test helloworld.war
./bin/asadmin deploy --name=helloworld:beta helloworld.war
./bin/asadmin deploy --name=helloworld:rc helloworld.war
./bin/asadmin list-applications
helloworld <web>
helloworld:1 <web>
helloworld:beta <web>
helloworld:rc <web>
./bin/asadmin show-component-status helloworld:beta
Status of helloworld:beta is disabled.
./bin/asadmin show-component-status helloworld:rc
Status of helloworld:rc is enabled.
./bin/asadmin enable helloworld:beta
./bin/asadmin show-component-status helloworld:rc
Status of helloworld:rc is disabled.
./bin/asadmin show-component-status helloworld:beta
Status of helloworld:beta is enabled.
./bin/asadmin undeploy helloworld:1
./bin/asadmin list-applications
helloworld <web>
helloworld:beta <web>
helloworld:rc <web>
An exception with the message "javax.management.MalformedObjectNameException: Invalid character ‘:’ in value part of property" is thrown if this WAR deployed though. This is tracked as issue #12077.
In this milestone build, the "show-component-status" command is used to check the enabled status of a particular version. The milestone 2 build will provide support for "–verbose" option with "list-applications" and "list-components" command that will show the enabled status as part of the console output.
Read more details in Clustering Infrastructure One Pager, Clustering Design Spec, and Application Versioning One Pager.
Please try out these features, help review the different One Pagers, and file issues in the Issue Tracker.
Technorati: totd glassfish 3.1 clustering version cluster application
Related posts:- Screencast #34: GlassFish 3.1 Clustering, High Availability and Centralized Administration
- TOTD #69: GlassFish High Availability/Clustering using Sun Web Server + Load Balancer Plugin on Windows Vista
- TOTD #142: GlassFish 3.1 – SSH Provisioning and Start/Stop instance/cluster on local/remote machines
- TOTD #152: GlassFish Installer – Typical and Custom installation
- GlassFish asadmin CLI-driven Cluster Setup
Alexis recorded shortened screencasts of Tom and Hong’s presentations – see http://blogs.sun.com/alexismp/entry/glassfish_3_1_milestone_1
Comment by Eduardo Pelegri-Llopart — May 28, 2010 @ 8:18 am
Hi Arun,
Hope you are doing great. Gone through your blogs which provided me many valuable information regarding the Glassfish servers.
As i am a starter in Glassfish. I have few basic queries in Glassfish environment. Let me ask you one by one.
1) What is the key difference between Glassfish V2 and V3?
2) I have installed Glassfish V2 in my test machine and i have started DAS successfully, but my problem is that i am unable to create Cluster in Glassfish V3. Is there’s any other option for creating the cluster.
As i was stucked with the above two questions which from which i am unable to move or unable to explore the product.
Please help me regarding this… HAVE A GREAT DAY.
Thanks a lot,
Ajay.
Comment by Ajay — June 2, 2010 @ 9:56 pm
Ajay,
Glad you like the information.
The key differences between GlassFish v2 & v3 are highlighted at:
https://glassfish.dev.java.net/public/comparing_v2_and_v3.html
GlassFish 3 did not have clustering capabilities. GlassFish 3.1 is building this support and had the first milestone build indicating that support. A full-fledged support will be available later this year.
Comment by Arun Gupta — June 3, 2010 @ 2:53 am