We're extremely excited to announce the immediate availability of TorqueBox 2.1.0! This release includes a lot of bug fixes (especially around clustering) and several new features, described in a bit more detail below. We've also had a change in the TorqueBox project leadership and produced an updated roadmap to share so be sure to keep reading.
- Download TorqueBox 2.1.0 (ZIP)
- Browse HTML manual
- Browse JavaDocs
- Browse Gem RDocs
- Download PDF manual
- Download ePub manual
Highlights of major changes
-
The version of AS7 that TorqueBox is based on has been updated to an incremental build based on their 7.1 branch. This fixed several clustering-related bugs.
-
The
inject
method has been renamed tofetch
to reduce confusion with Enumerable's built-ininject
method. All your old code will continue to work withinject
but in some future release, probably 2.2.0,inject
will be removed. -
The default clustering mode of
TorqueBox::Infinispan::Cache
is now distributed instead of invalidated. See the caching clustering mode documentation for more details on the different modes. -
TorqueBox now respects the
$JRUBY_OPTS
environment variable which is useful for setting default 1.8 vs 1.9 Ruby modes or various other JRuby settings that aren't exposed in our torquebox.yml or torquebox.rb configuration. See the documentation for more details. -
InvokeDynamic support in JRuby is now disabled by default in TorqueBox to work around a bug in current JDK 7 builds that manifests itself as a
NoClassDefFoundError
. This is just a temporary measure to keep things working until a fixed JDK 7 is released. -
Scheduled jobs now support configurable timeout and concurrency options for more control over how long a job is allowed to run and how many jobs can be run in parallel. See the scheduled job timeout and concurrency documentation for more details.
Leadership change
Almost four years ago, Bob McWhirter took the crazy idea of running Ruby applications on top of JBoss Application Server and made it into reality with the first release of JBoss Rails. About one year after that initial prototype, the project was renamed and TorqueBox was born. In these past 3 years Bob has lead over 40 new TorqueBox releases, assembled an amazing team of developers, and convinced Red Hat to support TorqueBox both financially (by hiring said team) and technologically (by offering TorqueBox as a supported Red Hat product - more on this below).
While Bob is still very active in TorqueBox, being the Director of Polyglot for JBoss means he has plenty of other cool projects in various stages of development that also require his attention. So, effective last Friday, Ben Browning is now the project lead of TorqueBox. Ben has been an integral part of the TorqueBox team for the past two years and has been unofficially driving things for the past few months anyway - now it's just official.
Upgrading from 2.0.3
As mentioned above, we've renamed the inject
method from
TorqueBox::Injectors to fetch
. However, we still alias this method
to inject
so old code continues to work. All references to inject
in our documentation have been changed to fetch
and we suggest you
start thinking about changing your code to do the same. In a future
version we will deprecate inject
by logging a warning when it is
used and then in some future version past that we will actually remove
it.
Because we've rebased to a newer upstream AS7 build, this release also includes some changes to the standalone.xml, standalone-ha.xml, and domain.xml configuration files. If you never touch these files and don't know what they are anyway then continue to ignore them. However, if you store your configuration files in source control somewhere be sure to take a look at the changes. The configuration file from 2.0.3 will not boot without some modification on 2.1.0.
What happened to 2.0.4?
Some of our astute users have noticed that we used to have a 2.0.4 release scheduled but instead decided to release 2.1.0. The decision was made to drop 2.0.4 and go forward with 2.1.0 once we realized that to fix some clustering bugs in 2.0.3 we had to bring in an upstream AS7 build that had the aforementioned config file changes. We didn't want to break config files in a point release so 2.1.0 came a little early.
Roadmap update
We've updated our roadmap in JIRA and will continue to keep it updated so users have a better idea when new releases are coming out and what general features or bug fixes should be in each release. If you prefer not to dig through JIRA issues, here's a high-level overview of what you can expect.
We're trying to move towards a monthly release cycle, with each point release (2.1.1, 2.1.2) keeping backwards compatibility with applications and configuration files. Right now 2.1.1 is scheduled for the end of August and 2.1.2 for the end of September.
Our next minor release, 2.2.0, is scheduled for the end of October and may break backwards compatibility a bit if it needs to upgrade to a newer AS7 version or for some of the new features. The focus of 2.2.0 is on dynamic creation and runtime control of jobs, services, message processors, etc. Basically we want to take everything you currently configure in torquebox.yml or torquebox.rb and make it so that these things can be created, destroyed, and controlled at runtime.
Beyond 2.2.0 things get a bit sketchy. We already have some ideas for our next major release, 3.0.0, but it's far enough away that who knows what will change in the interim.
Red Hat now offers TorqueBox support
Last, but certainly not least, we've had users ask us at conferences and other venues if Red Hat provides support for TorqueBox. As of last month Red Hat now supports TorqueBox in Tech Preview status as part of JBoss Web Framework Kit 2.0. The supported TorqueBox is a separate download that runs on top of JBoss EAP 6 and supports most of the features found in the TorqueBox community release 2.0.3.
Don't be a stranger!
As always, if you have any questions about or issues with TorqueBox, please get in touch.
Issues resolved since 2.0.3
- [TORQUE-514] - Allow setting a timeout on scheduled jobs
- [TORQUE-527] - Make TorqueBox::Logger work with the Rails console
- [TORQUE-633] - TorqueBox Should Respect $JRUBY_OPTS
- [TORQUE-677] - Print a useful error message when JRUBY_HOME is improperly set
- [TORQUE-774] - HornetQ not starting (Torquebox 2.0.1 on ubuntu 11.10)
- [TORQUE-782] - session store logs warnings when multiple apps are deployed and one of them is at /
- [TORQUE-786] - Backstage web context missing after redeploying another app.
- [TORQUE-788] - HTTP Status 503 - The requested service () is not currently available for app A & B after deploying C. C works fine.
- [TORQUE-793] - Task concurrency > backgroundable tasks test fails on OpenJDK
- [TORQUE-806] - Scheduled job using infinispan cache not accessible in controller
- [TORQUE-808] - TorqueBox Sometimes Fails to Boot When Multiple Clustered Applications are Deployed
- [TORQUE-815] - Revert mod_cluster Backport Fixes Once Upgraded to AS 7.1.2
- [TORQUE-821] - Infinispan errors when clustered
- [TORQUE-823] - TorqueBox::Logger#info throws an error when passed nil
- [TORQUE-826] - The command `torquebox rails myapp` fails in 2.0.3 binary installations
- [TORQUE-829] - torquebox.rb is evaluated in the context of the global runtime and working directory is the JBoss directory
- [TORQUE-830] - Unintialized Constant ActiveSupport::Cache::TorqueBoxStore Error Following Caching Docs
- [TORQUE-831] - The :tx option is not included in the publish options in Table 8.2 of the documentation
- [TORQUE-833] - Infinispan cluster not communicating
- [TORQUE-834] - Errno::ENOENT: No such file or directory - config/torquebox.yml
- [TORQUE-838] - TorqueBox::Messaging::TextMessage should implement respond_to?
- [TORQUE-839] - Better error catching when the $JRUBY_HOME is not correct, there's no lib folder in it
- [TORQUE-840] - Rename inject method to fetch
- [TORQUE-842] - Integration Tests Using jmx4r Fail on RHEL 6
- [TORQUE-843] - Torquebox::Messaging::Destination should not accept a nil destination name
- [TORQUE-850] - Creating a TorqueBox Archive Fails on Windows
- [TORQUE-855] - Cache transactional values are not properly rolled back for failed XA transactions in a clustered cache
- [TORQUE-864] - Change the config sample in the job docs to not use 'throttle' as the example
- [TORQUE-870] - jdk1.7-64bit error which works in jdk1.7-32bit on windows
- [TORQUE-873] - torquebox rails command creates a "tasks" folder
- [TORQUE-874] - Exception Acquiring Ownership of Clustered Session
- [TORQUE-875] - The default cache clustering mode should be transactional distributed synchronous with optimistic locking
- [TORQUE-880] - Unable to change the Quartz threadpool size to accomodate different 'job' pool sizes
- [TORQUE-883] - FakeConstant does not resolve more than 2 levels
- [TORQUE-885] - 'rake torquebox:run' shouldn't allow RUBYOPT settings from passing through
- [TORQUE-886] - torquebox:archive mistakenly packages the 'vendor/bundle/jruby/RUBY_VERSION/cache/' directory
- [TORQUE-890] - Warn in documentation about setting JAVA_OPTS environment variable
- [TORQUE-896] - HASingleton jobs and services don't start if a cluster only has a single node