It's April 15; have you paid your taxes? If not, great news: you have until the 18th. But go ahead and take care of it so you can spend the weekend playing with the latest TorqueBox release: 1.0.0.CR1.
That's right, the first-ever non-beta release of TorqueBox is now available. Go download it and read the docs. If you don't recall, "CR" is JBoss short-hand for "Candidate Release", which is what you might normally call a "Release Candidate". We change the byte-order for improved lexical sorting in the Alpha/Beta/CR/Final release chain.
Through the intense work of Jim Crossley, Ben Browning, Toby Crawley, Lance Ball, and innumerable contributions from the community, this release represents a mass-load of improvements since Beta23 back near the start of December 2010. Over 150 issues were resolved for this release.
Over the next two weeks, we'll squash bugs as they are reported, and issue interim CR checkpoints, culimating in the 1.0.0.Final release by JBossWorld in early May.
I (Bob) am proud-as-all-get-out with everything the team has accomplished.
Major changes since 1.0.0.Beta23
torquebox.yml
The most obvious change if you're migrating from 1.0.0.Beta23 is the multitude
of YAML files (queues.yml, messaging.yml, pooling.yml, web.yml, etc) have all been
merged into a single torquebox.yml file. You can most likely just copy the contents
of each file into a similarly-named section within torquebox.yml.
Note: with this reorganization, we also moved the rackup configuration item
from the application: section to the web: section.
Knobs
With previous versions of TorqueBox, you would deploy your application using a
*-rails.yml or a *-rack.yml deployment descriptor. Since TorqueBox supports
a broader set of applications, even those without web components, the naming
convention is now *-knob.yml.
Likewise, instead of deploying archives with suffixes of .rails or .rack,
TorqueBox application archives now use the .knob suffix.
$TORQUEBOX_HOME/apps/ deployment directory
Instead of deploying your applications into the $JBOSS_HOME/deploy/ directly
mingling with core JBoss components, you now deploy to an empty-by-default
$TORQUEBOX_HOME/apps/ directory, which is used by all server configurations.
TorqueBox gems
A lot of the TorqueBox-provided gems have different (better) names. To
use the messaging client, for example, the required gem is now torquebox-messaging.
We provide a simple top-level torquebox gem which will load up many of the
other useful TorqueBox gems.
Other gems (Rails, Sinatra, etc) not included
Any RubyGem that is published by another party, including Rails, Sinatra, etc,
are no longer included in our distribution. We figure everyone is managing
their dependencies using bundler and can simply use that to pull down exactly
the gems and versions required by the specific app.
Resource injection
While not directly a change, the new resource-injection feature has changed the way you might obtain messaging destinations. Additionally, this shows how the JBoss implementation of Java CDI (JBoss Weld) is so awesome, it also works from Ruby.
Notable new features
- Backgroundables
- Resource Injection
- Infinispan-backed caching
- Services (with HA)
- Non-web deployments
- Admin dashboard
git-based deployment- Container-based Authentication
In This Release
Bug
- [TORQUE-47] - AJP not working with virtual hosts
- [TORQUE-164] - Can't deploy rack archives when referenced by a *-rack.yml
- [TORQUE-165] - Rack middleware Rack::Reloader not working
- [TORQUE-170] - File.new Should Return Object That Responds To 'lstat' For Files In An Archive
- [TORQUE-174] - Rails does not work in production environment with cached JavaScript and CSS
- [TORQUE-175] - Rails archives won't deploy without a rails-env.yml file
- [TORQUE-176] - The javascript_include_tag rails helper doesn't seem to respect the context path under which the app is deployed.
- [TORQUE-178] - Torquebox isn't able to create cache files in a non archive app.
- [TORQUE-181] - Rack doesn't expect CONTENT_LENGTH to ever be less than 0
- [TORQUE-185] - Dir.entries and Dir.foreach should handle VFS Paths
- [TORQUE-186] - Only Use 'autoload_paths' On Rails 2.3.10+ to Maintain Backwards Compatibility With Older 2.3.x
- [TORQUE-187] - Template missing error
- [TORQUE-197] - CachedJavascriptArchiveTest fails on linux with a permission error
- [TORQUE-198] - Globbing does not support using square-brackets for character alternation
- [TORQUE-199] - Mark ruby apps as distributable so that session replication works when clustered
- [TORQUE-202] - Null Path on Windows when instantiating a Java class in a Rack app
- [TORQUE-203] - Rack applications seemingly not loading lib/java/**.jar to the classpath by default.
- [TORQUE-207] - JMS session should be rolled back in response to exception so that redelivery is attempted
- [TORQUE-211] - The Rails.cache file_store (the default) fails to write because our File.new monkey patch is wrong
- [TORQUE-226] - Cannot map a single app to context=/ and hostname=anything in descriptor
- [TORQUE-232] - TasksDeployer should namespace queues by application
- [TORQUE-239] - bundler chdir vfs failure when depending on a git gem
- [TORQUE-241] - torquebox-assembly: Could not resolve dependency on jruby-1.5.6
- [TORQUE-242] - TorqueBox rake tasks don't load automatically in rails 2.3.10
- [TORQUE-247] - Bump up default Xmx to enable more than 2 or 3 consecutive deployments
- [TORQUE-256] - Backgroundable doesn't work in a non-Rails app
- [TORQUE-260] - Backgroundable objects don't reload properly when :always_background called before method definitions
- [TORQUE-261] - Deployment descriptors with invalid application:root: values don't fail to deploy.
- [TORQUE-262] - Backgroundable queue creation fails with a javax.jms.JMSSecurityException
- [TORQUE-263] - backgroundable queue gets created with a null app name
- [TORQUE-264] - ServletStore Session Implementation Causes All Requests to Compete For Global Lock
- [TORQUE-265] - ServletStore Implementation Continually Loads New Classes and Uses Up PermGen
- [TORQUE-267] - classes don't reload in task runtimes in development mode
- [TORQUE-273] - "null" environment when otherwise not defined
- [TORQUE-274] - HornetQ Stacktrace on App Load -- [HornetQConnection] I'm closing a JMS connection you left open. Please make sure you close all JMS connections explicitly before letting them go out of scope!
- [TORQUE-275] - Capistrano Support uses older style -rails.yml file naming. Should use -knob.yml
- [TORQUE-276] - Devise Doesn't Work With ServletStore
- [TORQUE-278] - Enabling the file_store cache results in errors due to percent-encoded cache file names
- [TORQUE-279] - request.raw_post Always nil For Rails Apps
- [TORQUE-282] - Misleading message when deploying queues using queues.yml
- [TORQUE-283] - Task classes with more than one underscore in their names cannot find their queues
- [TORQUE-284] - Static Assets Don't Render For Rails 2.3.x Applications Hosted at Root Context
- [TORQUE-285] - Docs have incorrect info on using an external jruby
- [TORQUE-286] - Cleanly detach clients from destinations
- [TORQUE-289] - File.readlines fails when given a vfs path
- [TORQUE-291] - Neither Tasks nor MessageProcessors reload in development mode rails apps.
- [TORQUE-293] - When context lacks a slash prefix, static assets don't resolve properly
- [TORQUE-294] - Jars from knob should be mounted
- [TORQUE-295] - Jobs are fired before deployment completes
- [TORQUE-296] - TorqueBox::Messaging::Task does not properly handle underscores
- [TORQUE-299] - VFS paths not properly generated in Windows Environments
- [TORQUE-300] - IO#read without a block not closing the files
- [TORQUE-302] - Bootstrap on Windows fails after common/torquebox/ shared-jar rearrangement
- [TORQUE-303] - File.exists? on a non-existent absolute path on windows infinite loops
- [TORQUE-304] - Happify integration tests on windows
- [TORQUE-305] - Typo in install docs /installation.html#running
- [TORQUE-306] - Overriding rackup to config/config.ru doesn't work
- [TORQUE-308] - Boolean environment variables set in torquebox.yaml cause JRuby to barf
- [TORQUE-309] - Opening a File subclasses doesn't return an instance of itself
- [TORQUE-320] - Spurious failures (seen in SinatraQueuesTest) of RackFilter being unable to find its RackAppPool.
- [TORQUE-321] - require 'torquebox/messaging' throws exception
- [TORQUE-322] - MessageProcessor concurrency - handler receiving same message multiple times
- [TORQUE-328] - Fix script analyzer for 1.9 code
- [TORQUE-330] - Injection Not Working For Services Unless Parent Folder Is In Load Path
- [TORQUE-333] - MessageProcessor subclasses eat exceptions tossed in on_message, preventing delivery retries
- [TORQUE-336] - NPE on client#connect when running in Ruby 1.9 mode
- [TORQUE-340] - VFS Failure during migration
- [TORQUE-345] - $TORQUEBOX_HOME/apps isn't recognized on startup: Illegal character in opaque part at index 2
- [TORQUE-350] - Fix logging output for Sinatra (and maybe any rack app?)
- [TORQUE-352] - Overridden DriverManager getConnection Method Breaks oracle-enhanced-adapter
- [TORQUE-353] - Fix gem dependencies so that torquebox-vfs is installed as a dependency of vanilla torquebox gem
Enhancement
- [TORQUE-227] - Saner TorqueBox gem names
- [TORQUE-230] - More consistency of configuration of all the classes we instantiate
- [TORQUE-240] - Write a minimalist deployment descriptor when torquebox.yml exists.
- [TORQUE-292] - Bump up the default Xmx from 512M to something, well, bigger
- [TORQUE-311] - Document TorqueBox::Injectors
- [TORQUE-312] - Document logging alternatives in TorqueBox
- [TORQUE-317] - Add support for expanding paths for application roots
- [TORQUE-334] - Create a better global JRuby
- [TORQUE-335] - Better share ClassCache and MethodCache between Rubies created by an app's RubyRuntimeFactory
- [TORQUE-342] - Upgrade Capistrano support for newer features
Feature Request
- [TORQUE-33] - Implement a Rails Cache Store that uses JBossCache
- [TORQUE-61] - Adding JRuby --1.9 support (per application)
- [TORQUE-75] - Push gems to rubygems.org
- [TORQUE-159] - Generate @version in runtime_constants.rb from the pom and display it somewhere.
- [TORQUE-160] - Provide a torquebox:freeze rake task that does the correct bundler incantations
- [TORQUE-177] - Support rails/rack archives by exploding them rather than attempt to write to them via VFS
- [TORQUE-179] - Allow programmatically attach new queue/task consumers outside from TB
- [TORQUE-191] - Pass messaging client options to constructor of Queue/Topic and doc better
- [TORQUE-192] - Add support for long-running ruby services
- [TORQUE-194] - Make it easy to create a ruby HASingleton
- [TORQUE-195] - Decouple message *delivery* from message *processing* in RubyMessageProcessor
- [TORQUE-213] - Mimic delayed_job's AR handle_asynchronously method
- [TORQUE-214] - Expose HornetQ's priority to tasks
- [TORQUE-215] - Inject CDI beans into ruby objects/rails controllers
- [TORQUE-217] - Create JMX MBeans For Management of application components
- [TORQUE-219] - Remove unneeded gems from TB distribution
- [TORQUE-221] - Provide simple deployment to TB via git push
- [TORQUE-229] - Remove gratuitous JBOSS_CONF configurations that we don't recommend using.
- [TORQUE-231] - Make app name available as a constant within the ruby runtimes
- [TORQUE-235] - Expose Methods For Synchronous Messaging via Queues
- [TORQUE-237] - Full unification of metadata through torquebox.yml
- [TORQUE-238] - Support durable subscribers
- [TORQUE-248] - Unify external deployment descriptors
- [TORQUE-249] - Unify archive deployables
- [TORQUE-250] - Support non-web deployments
- [TORQUE-255] - Determine (and implement) what "clustering" means to Quartz and JBossAS
- [TORQUE-258] - Explicit build number/revision tracking
- [TORQUE-266] - Queues & Topics Accessed Before Fully Deployed Should Wait Instead of Erroring
- [TORQUE-268] - Allow setting concurrency for task classes in torquebox.yml
- [TORQUE-269] - allow for tasks to exist in places other than app/tasks
- [TORQUE-270] - Provide simple ruby interface for JBoss auth through PicketBox
- [TORQUE-271] - Slimmer distribution
- [TORQUE-281] - Implement a queue browser
- [TORQUE-287] - We should provide a top-level, dependency-aggregator-only, zero-content 'torquebox.gem' to make Gemfiles more cleaner.
- [TORQUE-297] - Pull ruby bits out of the web java components, to allow usage of cache and session implementations outside of AS, at least marginally
- [TORQUE-298] - jms_message properties should be set by type instead of all as strings
- [TORQUE-307] - Defer Backgroundable queue and message_processor creation until a backgrounded method is called
- [TORQUE-310] - Expose the JBoss logger to Ruby apps
- [TORQUE-313] - Queues/Topics should expose the durability option, and be durable by default
- [TORQUE-314] - Make jruby/bin/rake executable
- [TORQUE-316] - Provide an IRB console-like debugging tool for Rails/Rack apps
- [TORQUE-324] - A non-polluted directory not unlike deploy/ to hold user apps and only user apps, which deploys once the whole AS is going would be, like, super cool.
- [TORQUE-327] - Decorate runtimes with usage (web, messaging, etc), and expose the runtimes via jmx
- [TORQUE-338] - Include the pool name in the message logged on runtime creation
- [TORQUE-341] - Remove warnings around already initialized constants RAILS_ROOT and RAILS_ENV when booting rails applications.
- [TORQUE-343] - Release BackStage as a gem
- [TORQUE-344] - Extract the deploy code out of the rake tasks into a helper class
- [TORQUE-348] - Gemify stompbox
Patch
- [TORQUE-347] - Specify version for wagon-webdav-jackrabbit to make NetBeans happy
Quality Risk
- [TORQUE-251] - Job components have bad linkage between a cached IRubyObject and a pool.
- [TORQUE-331] - Refactor the 1.9 logic out of container.rb and into the pom, letting a maven profile dictate what goes where.
- [TORQUE-332] - Ruby runtime pools do not stop, and clean up resources.
Task
- [TORQUE-48] - Document capistrano support
- [TORQUE-163] - Explain session management in the documentation
- [TORQUE-184] - Passing attributes between the Rack and ServletSessions should work for symbol-based keys
- [TORQUE-200] - Rework packaging of the capistrano support gem.
- [TORQUE-206] - Juggle dependencies and -int-deployer.jar content
- [TORQUE-208] - Refactor StructureMetaData management between RackStructure and AppRackYamlParsingDeployer
- [TORQUE-209] - Add vendor/jars/**.jar to the application's classpath
- [TORQUE-210] - Update to JRuby 1.6
- [TORQUE-236] - Plus CI builds as a rubygem repository also
- [TORQUE-243] - Install copyrights in all source files.
- [TORQUE-290] - Use RubySpec to Ensure Our VFS Changes Don't Break Non-VFS Operations
- [TORQUE-318] - Integration Tests Should Run Headless
- [TORQUE-325] - Review docs before CR1
- [TORQUE-326] - Remove Need For VFS Jars in jruby/lib/
Sub-task
- [TORQUE-233] - Add rails initializer to extend AR
- [TORQUE-234] - Update documentation for tasks to describe Backgroundable features
- [TORQUE-244] - Add concurrency configuration for Backgroundable processors
- [TORQUE-252] - Support Jobs a-la-carte
- [TORQUE-253] - Support message processors a-la-carte
- [TORQUE-254] - Support services a-la-carte