text:
IE x 3!November 06, 2003
Ethan, excellent find! The big news for today is that it is possible to get multiple versions of Internet Explorer running on a single Windows box.
Joe Maddalone has written up the process in detail, and while there could be a couple of tweaks to make it easier to understand, I was able to follow it and verify that, yes indeed, IE5.01, 5.5 and 6.0 can all run on the same computer. Here's my screenshot of IE5.01 in action on an XP box normally running IE6.0.
Great thinking Jon, this is exactly what we need! Now the question is, as Matt Haughey puts it,
what possible explanation would keep them from releasing the simple info and making developers the world over happier to use MS products? I'm hoping to get an answer. Stay tuned.
update: Luke Redpath has put together a great set of colour-coded icons for the various IE installs.
Reader Comments
BTW, if anybody wants some alternate icons to use for shortcuts to their multiple versions of IE, I've put together 3 here:
Nothing special, just IE logo on a white box with matching color border, three colors, blue green and red. No text label, couldn't get anything readable at a small size. Icon includes 48, 32 and 16 square size.
My brain just about exploded when I saw how cool this was. I plan to keep these up as long as humanly possible, and I will try to add Windows 98/Me-compatible versions by this weekend. This is, of course, as long as Microsoft doesn't kick my ass over it. =)
Been tracing a lot of traffic back this way.. Thanks Dave!
If anyone has new findings I'd be more than happy to add them to the existing article which keeps getting updated thanks to all the support out there.
I am currently trying to find time to keep up actually, but it is really fun.
By the way, my name is Joe Maddalone, not Jon… thanks!
Sorry about the name glitch Joe; fixed here and on WaSP.
Thanks Joe and also skyzyx. Works a treat and is what can only be described as "value adding".
There is a fairly legitimate box model correction technique that does not work with IE5.* installed in this manner. The idea is to use a proprietary hack to solve a proprietary problem, calling in a stylesheet with box model corrections in this manner:
<!–[if lt IE 6]>
<style type="text/css" title="stylesheet" media="all">
@import url(/css/IE5LayoutFix.css);
The problem is that while these stand alone installations behave in every manner like IE5.*, they think that they are IE6. Go to Help -> About to see what I mean.
For Linux users the possibility to run multiple versions of IE has existed as long as Wine (http://www.winehq.com) was able to run them. Just create different wine installations and wrapper scripts for each of them. Instructions for IE501, IE5.5 and IE6-SP1 are available at http://frankscorner.org/
The only problem I've encountered so far was that IE on Linux doesn't display PNG's at all.
I'm freaking out!!! ;)
Last year I installed IE3 on XP under the impression that it could co-exist with IE6 thinking it was the last standalone version of the browser before being integrated into the OS (mabe it was IE2?). Let's just say I really messed up my system. IE3 was running fine, but IE6 was trashed and I was getting all sorts of system errors and had to do a reinstall. So I am bit reluctant to try this myself until I know it's safe. So to those brave souls out there: have you noticed any weirdness yet?
These don't have an installer. They're just files that are zipped up. You can unzip them anywhere you want, and the only files that will run are the ones in the unzipped folder.
I've added more of the downloads to my site, www.skyzyx.com/articles/000094.php , to include 98/Me versions of the browsers as well. I've also posted an IE6 which I'm about to test under 98 and 2000 (where IE5.x is the installed version).
As I said on my website, I'll keep them posted until Microsoft forces me to take them down.
Ryan:"These don't have an installer. They're jusr files that are zipped up."
Ryan:"I'll keep them posted until Microsoft forces me to take them down."
Hopefully by then enough of us will have copies/mirrors available…Brilliant!
Nils: "The idea is to use a proprietary hack to solve a proprietary problem"
I use conditional comments on my site to feed IE5 specific style rules to deal with its box model and you are correct: IE5/IE5.5 standalones think they are IE6, and thus, do not obey the comments.
So basically, the only things that slightly screwy with the IE5 and IE5.5 hacked versions that everyone is currently installing are:
1. IE 5.0 and IE 5.5 behave like themselves, but think that they are IE 6. This only matters if one is using browser detection scripts.
2. Conditional comments don't work in IE 5.0 and IE 5.5. This only matters if one is using conditional comments.
Browser detection scripts are decidedly unkosher, and I've never had occasion to use conditional comments (and besides, there are other good ways to feed IE-specific styles to IE only.)
In conclusion, life is now better for web developers. Joe Maddalone, you rock my world.
"…to use conditional comments (and besides, there are other good ways to feed IE-specific styles to IE only.)"
Other methods, like the voice family hack, have validation issues which is why I choose to use conditional comments and see nothing wrong with doing so. This, of course, is besides the point anyways. The issue here is simply people noting that these standalone versions do deviate in some ways and therefore you should be aware of the differences whether or not you personally use scripts or conditional comments.
"In conclusion, life is now better for web developers. Joe Maddalone, you rock my world."
No argument there.
"1. IE 5.0 and IE 5.5 behave like themselves, but think that they are IE 6. This only matters if one is using browser detection scripts." (from comment #15)
Hmm, I probably should do a bit of testing before posting. Apparently, the hacked IE5.0 and IE5.5 browsers send out the proper user agent string; that is, they identify themselves as…themselves. The only place where they wrongly claim to be IE6.0 is under Help -> About.
So it looks as though browser detection DOES work for the hacked IE's. Try going to www.browserhawk.com using one of the hacked IE's; the correct browser was detected when I did.
Best news I've heard in a while…just dloaded 5.01 and 5.5 SP2 and have got them all up and running. Finally been able to get my company site working in IE5.x *
* O/T: if anybody has had some unexplainable behaviour in IE5.x and is stumped, are you using the original Tantek box model hack? I found it's caused me no end of rendering grief and reccomend switching to the high pass method instead.
This only reminds me how bad we had it back when the IEs were the best browsers available on Windows. How depressing.
But seriously, this will be a big help with design. Joe, you're saving a lot of people from some headaches here. Thank you!
And thanks for pointing us in the right direction as usual Dave. :)
*mumbles something about the browser being inextricably intertwined with the OS, and not a standalone product…curses…then goes off to mod his second machine's installation*
good stuff. thanks MS for keeping it a secret for so long…
If you'd like to get it directly without downloading 90MB and then deleting all but a dozen files, I've made a direct ZIP:
Smaller downloads of the final result are also available here:
Grab them fast; I'm pretty sure redistributing bits and pieces of IE this way violates a EULA, so they probably won't be around long.
A much more elegant solution is to just run VMWare. Yes it's pricey, but for development, it can't be beat. I have everything from IE 2.0 running on NT4 to the latest browsers on XP and Linux; all running on virtual machines.
Just out of interest, (and in in no way do I mean to devalue Joes achievement), if it was this easy - doesn't it make a mockery of MS's various depositions to the effect that it isn't really possible to separate the browser from the OS?
Or am I confusing myself?
This works brilliantly with only two small problems that I can see- help|about gives the wrong browser version and trying to access the favorites menu crashes the browser. Accessing the favorites from the sidebar works fine though.
So why haven't Microsoft told anyone about this? I can't believe that it's through ignorance and Microsoft must have had thousands of requests from developers wanting to run multiple versions of IE on the same machine.
Surely it can't be because they thought that having more than one version of IE running on the same PC would undermine their court case?
I remember the good old days of being able to run IE4 and IE5 side-by-side (in "compatibility mode" or something). This is fantastic, useful beyond expression, and so mind-numbingly mundane to users of just about any other browser you care to mention… nice one, Microsoft.
Ian "much more elegant solution is to just run VMWare"
hmmm, let's see: not as elegant but completely free vs. elegnat but expensive ? each to their own i gues…if you have money to burn (a corporate budget or something) then yes, by all means. even more elegant: a room full of PCs all running the different versions of IE, and a troupe of assistants to hit the F5 whenever you upload a new version… ;)
pid: well, that's what i meant with my first comment http://www.mezzoblue.com/archives/2003/11/06/ie_x_3/#c002227
I've got all three running on W2K. No problems, including the Favorites menu, which works OK on all three browsers and no crashing (yet…).
Many, many thanks to all concerned - this has made my working life easier and I'm all for that. Until the next IE comes along, anyway…
This really is quite a revolutionary development!
I suspect we will all find little things that need adjustment now, e.g. the font size on this very page, which suffers from IE5's poorer inheritence control, I suspect.
Does the 3MB zip file size of each IE5 version suggest that IE is actually quite a lightweight browser? Or that each are using other files shared with IE6 elsewhere on the system (in which case, how can we be sure that those files are the same, i.e. result in a 'genuine' IE5 output?).
It's a good possibility that MS didn't know about this, because they are concerned about their software fully functioning as they intend it to (well, in theory). These standalones might work for web testing, but are nontheless just hacked versions that barely fulfill their functionality requirements. I doubt MS would spend the time to figure all this stuff out themselves because they would never release such a hacked version, or the details on how to do it, to the public.
I am surprised that someone hasn't created a single piece of software that emulates the different rendering engines that IE has used since version 3, and can even report as the appropriate user agent. While they were at it, why not just add emulation modes for all the appropriate browsers? If I was a programmer, I would get on that right away. But I'm not.
Any volunteers?
Just noticed that my IE5 and 5.5 have confused the Google and Radio toolbars. Using View>Toolbars>Radio displays the Google toolbar and View>Toolbars>Google displays Radio.
I'm hoping that this is caused by the implementation of features shared between the browsers and it's not an indication of deeper problems that cast doubt on the 'behavioural integrity' of each browser.
Nah, IE 5.x has always been like that. There's even a warning to that effect on the Googlebar download page. ;)
I'm with Mr. Cooper. I think there should be a program much like MyIE2 that wraps all the browsers into a multitabbed testing facility where you can change the rendering engine on the fly.
having no luck with the zip versions for win98. the exe's just seem to load the currently installed ie6 version. unzipped them both to a new folder on my system, tested user agent against browserhawk.com and tried some css but everything is just ie6 still for both the 5.5 and 5.01 exe's. for example if i run the 5.01 exe, and then click a shortcut for an html file, it will not open in a new window but just load in the window open for 5.01. so clearly for some reason the 5.01exe/5.5exe are just loading ie6 still….
had avant installed (for convenience) so took that off, reinstalled ie6sp1, and still no difference. trawled the registry for any pointers, but after 4 hrs frustration not sure what else i can try! anyone tried the win98 versions, or any advice for this PLEASE PLEASE!! feel i am missing out on something monumental here….
Sam: " feel i am missing out on something monumental here�"
You're using Win98, aren't you used to that by now? ;)
(sorry, sorry, just couldn't let that one pass…)
Yeah we're having zero luck with the NT4 zips either. They'll report IE5 as the user agent string but it's not using the IE5/5.5 html/css rendering/scripting.
I just installed MSIE 5.01 and MSIE 5.5 alongside MSIE 6 on Windows 98, and the pages do render differently in all three - worst in MSIE 5.01 of course.
I'll have to test more thoroughly to see if it's really 100% bug-complete 5.01 rendering, and really 100% bug-complete 5.5 rendering.
The version string within the dialog box IE grabs from the registry (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version) but has nothing to do with the internal version. Its only for displaying inside this box.
So the internal version has to exists inside another dll. I checked all local dlls but can't find it. Filemon and Regmon doesn't show an important information. Perhaps it's a function call or imbedded data within a system dll…
"Does the 3MB zip file size of each IE5 version suggest that IE is actually quite a lightweight browser? Or that each are using other files shared with IE6 elsewhere on the system (in which case, how can we be sure that those files are the same, i.e. result in a �genuine� IE5 output?)."
Files are shared with the Windows GUI. Notice how if you type a URI into Windows Explorer it suddenly turns itself into IE?
When IE6 SP1 first appeared, I upgraded from IE6 (purely to keep up) and had huge JavaScript problems. I attempted an uninstall, choosing the option to "Return to previous Windows configuration". All went fine until I re-booted. The un-installer had forgotten to put back a load of the old files - leaving me with no access to programs etc. I was running WinME on that box at the time, so my attempts to hit Ctrl+Alt+Del and run Explorer.exe from the Task Manager were fruitless.
Anyway, the point of that is to show that a lot of the files that IE uses are part of Windows. It is possible to remove IE from Windows, however the pathetic amount of diskspace saved isn't worth the risk.
Well, I'm surprised nobody has tried this with IE4.01 yet. Okay, so I tried it. And I'm typing this in IE4.01. To be honest, I'm not sure how accurate this is but Dave, your site doesn't look so good. :) My only problem right now is that the address bar isn't working. I had to open up the search bar and do a search on Google in order to bring up any pages. My trick for getting it working was the same as IE5 and IE5.5 as indicated on the site. If I have time I'll see about putting together a downloadable streamlined version.
"Well, I�m surprised nobody has tried this with IE4.01 yet."
It looks like it just dropped:
Anyon else getting a "syntax error" alert box on every page visited in IE4? Just curious.
IE3 and IE4 (address bar working) available here:
(mirrored here
and I guess soon at skyzyx's)
we're all so freakin' happy about this!
I noticed on one page that it was a regexp that caused the problem. I haven't done an exhaustive test to prove that theory, though.
"Luke Redpath has put together a great set of colour-coded icons for the various IE installs."
The icons are great and all but I personally don't like to clutter my taskbar with so many IE icons that are sure to confuse my parents when they try and surf the web–haven't been able to convert them to Firebird yet ;)
I've created an HTA that uses a bit of VBScript to launch various browsers on my system. I've placed a shortcut to the HTA on my taskbar to access it directly. It works for me.
This is what it looks like: http://www.zeit.ca/external/browser_launch/browser_launch.png If you care to try it out yourself feel free to grab a copy: http://www.zeit.ca/external/browser_launch/browser_launch.zip It's mapped to my system so you would have to remap the paths to the executables to use it.
I just updated the mirrors list at www.skyzyx.com to reflect the mirrors that Manuel has informed me of. I've also added some clarification on compatibility and version issues that have been cropping up…
Hope this helps!


text:
"Game Of Thrones" star Lena Headey has filed legal documents stating she is flat broke and has "less than $5 in her bank account."
The actress, who has also appeared in movies such as "300" and "St. Trinian's", is currently going through a divorce from her husband, Peter Loughran, who has filed paperwork demanding a 50 percent share of a $46,000 tax refund which is due to the couple from U.S. authorities.
Headey filed a response to his claim, revealing she has asked for a $6,000 advance on the tax return to cover her living expenses because her current financial situation is so dire.
In the papers, obtained by TMZ.com, Headey states she has "less than $5 in her bank account" and is living off a credit card as she is waiting on payment from her acting jobs.
A judge denied Loughran's request for half the money.

subset: commoncrawl


text:
T.J. Lavin -- a BMX star and host of MTV's "The Challenge" -- is currently in a medically induced coma after losing control of his bike and crashing during a jump at a BMX event last night.
Lavin was competing in a Dew Tour event in Las Vegas -- when he hit a dirt ramp, lost control, and slammed down onto the ground. Friends and crew workers immediately rushed to Lavin's side, but he didn't appear to be moving.
Lavin was rushed to nearby University Medical Center hospital ... where he was placed into a medically induced coma.
We're told Lavin is also experiencing brain swelling and is listed in critical condition.
UPDATE: A rep for MTV tells us, "Our thoughts are with TJ. He is an important part of MTV's extended family and we're all praying for him."
As for Lavin's condition, a rep for the Dew Tour tells us, "he is in the intensive care unit and is currently stabilized."
CommentsClick To View
Hot Video


text:
DDB Brussels are looking for a few good people and ask you to submit your application as a six second Vine gif, so if you have an Android you're just too different, man.
Studies have shown that your resumé is only looked at for six seconds anyway, so why not jump on the latest bandwagon and have some animated fun while recruiting? Young creatives have until May 31, 2013 to upload their Vines, adding the hashtag #ddbexpress. You can see more at www.ddbexpress.be. Your brief is to convince Peter Ampe, Executive Creative Director, that you have what it takes to be a creative at DDB Brussels, that you should be a young creative at DDB Brussels. You have six seconds to show him how creative you are, condense your resume into that, or whatever you think will get his attention. It's funny that we'll spend only six seconds glancing at a persons resumé and later that same person will spend six months getting one project out the door through countless revisions... ;)
There's plenty Vines collected here already on DDB's facebook, so you can eye up the competition.
Finalists will be invited to join the "DDB Express" train, direction Cannes Lions Festival of Creativity. Once on the "DDB Express", the remaining 10 finalists will work on creative briefs. At each stop, creative work will be assessed, and each time, a finalist will have to leave. The last two remaining finalists will go on to the prestigious festival and be rewarded by an invitation to join the creative department of DDB.
To kick-off the initiative with creative students, we have added incentive: A free ticket to Cannes Lions + stay in a hotel near the festival site.
How it works:
- Young creatives have until May 31, 2013 to upload their Vines, adding the hashtag # ddbexpress.
- Every single # ddbexpress video that was posted will be reviewed by our ECD and on June 3, DDB will select and announce 10 finalists.
- These 10 finalists will be invited to join the "DDB Express" train, direction Cannes Lions Festival. - Once on the "DDB Express", they will work on creative briefs.
- At each stop, creative work will be assessed, and each time, one finalist will have to leave to train.
- The last two remaining finalists will proceed to the prestigious festival and be rewarded by an invitation to join the creative department of DDB.
We want to make this experience unlike any other. We will fill their brain and connect them to opportunity. No guarantees or promises of a future job, but the work they'll create during the internship and the network they'll grow will surely take them to the next level.
Maarten Van Daele
Junior Planner
DDB Brussels
You bunch of exploitative fucking assholes. I bet none of your team had to go through such a demeaning process to get their jobs. And there isn't even a job at the end. You're pathetic.
Here's why I don't like it: you require entries by Vine, an application that can only be used on the most expensive smartphone on the market. Yes, I know all you overpaid hacks have an iPhone...but a lot of talented kids don't. By requiring one for entry, you are limiting social mobility. A dick move.
Also, this whole "Throw them off the train" thing, what the fuck is this, a reality TV show?
And of course no payment for the internship, no job at the end. You people are obviously incapable of putting yourself in anyone else's shoes, and you are completely detached from the real world. No wonder your work sucks.
This is an Internship Like No Other™ After you've been randomly chosen based on a six second assessment there's no guarantee that you'll be hired. But there is a guarantee that while you're working for nothing, we'll wring every last drop out of you.
Funny, that sounds exactly like every internship out there.
As to the person who wondered why the agency doesn't just take the courtesy of looking at someones portfolio- a portfolio they may have spent a year or two creating the answer is two fold: A. If they looked at your portfolio from beginning to end, then they'd be treating you decently.
And B. If they looked through portfolios they'd actually have to do work.
Plus it would show a level of interest in an applicant suggesting the company teats its employees (even interns) like human beings and not a thoroughly dispensable and easily replaceable source of ideas ready to LITERALLY BE BOOTED OFF THE TRAIN AT A MOMENT'S NOTICE.
And we wonder why advertising is losing its best and brightest minds to other pursuits....
Sounds like an internship, it is trying to disguise itself as a fun creative task. This is like recruiting juniors to act as monkeys for entertainment. And i agreed with the previous comment about Vine. Not really fair for other talented creatives who have android rather than an overrated iphone,and you guys mentioned android users are too 'different' , you mean different = smart enough not to conform into a creative stereotype.
Adland is supported by your donations alone. You can help us out by donating via Liberapay, the Paypal button here
or by using our amazon affiliate links to buy yourself an ad book or something else nice.


text:
Richard Brock, one of the nation's leading grain marketing analysts, will be a featured speaker at the 2005 Mid-South Farm & Gin Show.
The show, sponsored by the Southern Cotton Ginners Association, with Delta Farm Press as co-sponsor, will be March 4-5 at the Cook Convention Center in downtown Memphis.
Brock is widely known in the agricultural and agribusiness community through his weekly newsletter, The Brock Report, that focuses on grains, and the Pork Profit Edge, another newsletter his firm also publishes.
Brock Associates manages grain sales on over 500,000 acres throughout the United States and advises many major agribusiness and grain companies on price direction and purchasing strategies. In a normal year, he will speak at over 60 conferences throughout the United States, Central American, South America, and Europe.
He will speak Saturday morning, March 5, at the 8:30 a.m. Ag Update session in the convention center lobby auditorium.
"Richard has been analyzing and forecasting grain and other agricultural trends for many years and is well-respected by farmers throughout the nation," says Tim Price, executive vice president of the ginner association and manager of the show that attracts 20,000 people.
Also on the Saturday program will be Joe Jobe, executive director of the National Biodiesel Board. "There is a lot of interest in bio-based fuels," Price says, noting that several biodiesel and ethanol plants are in operation or on the drawing board around the Mid-South."
Also expected to speak Saturday morning is USDA Undersecretary for Marketing and Regulatory Programs, William Hawks, who will discuss USDA programs and issues.
In addition to speakers for the Friday and Saturday Ag Update sessions, the show's 400-plus exhibits will provide growers a firsthand look at new ag products and technologies.
It will also offer the latest information on one of 2005's hottest agricultural topics: soybean rust. A special seminar on the disease will be conducted by Monte Miles, USDA Agricultural Research plant physiologist at the University of Illinois, the nation's leading authority on the subject. He will lead a reaction panel, which will have participants ranging from growers and input providers through end users."
Scheduled for Saturday, March 5, at 1 p.m., it will be co-sponsored by a number of Mid-South organizations, including the Agricultural Council of Arkansas, the Delta Council, state soybean associations, state soybean promotion boards, and others.
Ag update sessions
Here's the lineup for the informational sessions:
Friday, March 4 — Woods Eastland, president and chief executive officer of Staplcotn, the Greenwood, Miss., cotton marketing cooperative, and the 2005 chairman of the National Cotton Council, will discuss cotton sector issues.
J. Michael Hathorne, vice president and coordinator of economic analysis for Informa Economics, Memphis, will discuss the outlook for rice and wheat.
William Dunavant, chief executive officer of Dunavant Enterprises, will provide his annual cotton market outlook.
Saturday, March 5 — William Hawks, USDA; Richard Brock, and Joe Jobe.
Hundreds of exhibits
This year's show, is shaping up to be another sellout for the 200,000 square foot convention center and the largest in the event's history. More than 450 exhibits are expected, Price says, running the gamut from the latest equipment, to seed, chemicals, and services. Exhibitors are from 40-plus states and two foreign countries.
"The show has become an early spring tradition for Mid-South farmers, ginners, and others involved in agriculture," he says. "In addition to many exhibitors who are with us year-in and year-out, we have many who will be here for the first time, bringing a new array of products. And a lot of our every-year exhibitors are increasing their space, so it's going to be a very diverse show spanning all the major Mid-South crops.


text:
The Old Timer of Royal Oak, Mich., was a regular contributor to H&P years before we ever even heard of the internet. But most of his advice is just as useful — and interesting — today.
So rather than leave his wisdom printed on pages archived in our storage room, I pulled out issues from the late 1980s and early 1990s and have been reproducing relevant entries in this blog. Here is my 19th entry, which was originally published in the July 1989 issue:
Same valve, twice the flow
We had a pneumatic nut runner on trial in the field using a standard 5-port spool valve plumbed as a 3-way valve — not an unusual arrangement. We got an emergency call from the production people there. A product redesign called for a different nut, and the operation with the new nut was too slow.
They calculated that they needed twice the flow to meet the time requirement. However, the existing valve was already flowing near its maximum capacity, and space didn't allow for a bigger valve. Could we help? Quickly?
We dug out the catalog on the valve and were delighted to learn that it was a multipurpose design — it could accept pressure at any port. This meant it could perform like two 3-way valves in the same body.
We told our field people to install larger supply lines and bring air into ports A and P. Then we told them to tee lines from ports B and EA together, and connect the combined flow to the nut runner.
They did as we suggested, and the valve performed as predicted, putting the nut runner back in business.


text:
JBoss.orgCommunity Documentation
The Failure Recovery Guide contains information on how to use JBoss Transactions to develop applications that use transaction technology to manage business processes.
This manual uses several conventions to highlight certain words and phrases and draw attention to specific pieces of information.
In PDF and paper editions, this manual uses typefaces drawn from the Liberation Fonts set. The Liberation Fonts set is also used in HTML editions if the set is installed on your system. If not, alternative but equivalent typefaces are displayed. Note: Red Hat Enterprise Linux 5 and later includes the Liberation Fonts set by default.
Four typographic conventions are used to call attention to specific words and phrases. These conventions, and the circumstances they apply to, are as follows.
Mono-spaced Bold
Used to highlight system input, including shell commands, file names and paths. Also used to highlight keycaps and key combinations. For example:
To see the contents of the file
my_next_bestselling_novelin your current working directory, enter the
cat my_next_bestselling_novelcommand at the shell prompt and press Enter to execute the command.
The above includes a file name, a shell command and a keycap, all presented in mono-spaced bold and all distinguishable thanks to context.
Key combinations can be distinguished from keycaps by the hyphen connecting each part of a key combination. For example:
Press Enter to execute the command.
Press Ctrl+Alt+F2 to switch to the first virtual terminal. Press Ctrl+Alt+F1 to return to your X-Windows session.
The first paragraph highlights the particular keycap to press. The second highlights two key combinations (each a set of three keycaps with each set pressed simultaneously).
If source code is discussed, class names, methods, functions, variable names and returned values mentioned within a paragraph will be presented as above, in
mono-spaced bold. For example:
File-related classes include
filesystemfor file systems,
filefor files, and
dirfor directories. Each class has its own associated set of permissions.
Proportional Bold
This denotes words or phrases encountered on a system, including application names; dialog box text; labeled buttons; check-box and radio button labels; menu titles and sub-menu titles. For example:
Choose Mouse Preferences. In the Buttons tab, click the Left-handed mouse check box and click to switch the primary mouse button from the left to the right (making the mouse suitable for use in the left hand).→ → from the main menu bar to launch
To insert a special character into a gedit file, choose → → from the main menu bar. Next, choose → from the Character Map menu bar, type the name of the character in the Search field and click . The character you sought will be highlighted in the Character Table. Double-click this highlighted character to place it in the Text to copy field and then click the button. Now switch back to your document and choose → from the gedit menu bar.
The above text includes application names; system-wide menu names and items; application-specific menu names; and buttons and text found within a GUI interface, all presented in proportional bold and all distinguishable by context.
Mono-spaced Bold Italic
Proportional Bold Italic
Whether mono-spaced bold or proportional bold, the addition of italics indicates replaceable or variable text. Italics denotes text you do not input literally or displayed text that changes depending on circumstance. For example:
To connect to a remote machine using ssh, type
sshat a shell prompt. If the remote machine is
example.comand your username on that machine is john, type
ssh firstname.lastname@example.com.
mount -o remountcommand remounts the named file system. For example, to remount the
/homefile system, the command is
mount -o remount /home.
To see the version of a currently installed package, use the
rpm -qcommand. It will return a result as follows:
Note the words in bold italics above — username, domain.name, file-system, package, version and release. Each word is a placeholder, either for text you enter when issuing a command or for text displayed by the system.
Aside from standard usage for presenting the title of a work, italics denotes the first use of a new and important term. For example:
Publican is a DocBook publishing system.
Terminal output and source code listings are set off visually from the surrounding text.
Output sent to a terminal is set in
mono-spaced roman and presented thus:
books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs
Source-code listings are also set in
mono-spaced roman but add syntax highlighting as follows:
package org.jboss.book.jca.ex1;
import javax.naming.InitialContext;
public class ExClient
public static void main(String args[])
throws Exception
InitialContext iniCtx = new InitialContext();
Object ref = iniCtx.lookup("EchoBean");
EchoHome home = (EchoHome) ref;
Echo echo = home.create();
System.out.println("Created Echo");
System.out.println("Echo.echo('Hello') = " + echo.echo("Hello"));
Finally, we use three visual styles to draw attention to information that might otherwise be overlooked.
Notes are tips, shortcuts or alternative approaches to the task at hand. Ignoring a note should have no negative consequences, but you might miss out on a trick that makes your life easier.
Important boxes detail things that are easily missed: configuration changes that only apply to the current session, or services that need restarting before an update will apply. Ignoring a box labeled 'Important' will not cause data loss but may cause irritation and frustration.
Warnings should not be ignored. Ignoring warnings will most likely cause data loss.
The Failure Recovery Guide contains information on how to use JBossTS.
This guide is most relevant to engineers who are responsible for administering JBoss Transactions installations.
The main architectural components within Crash Recovery are illustrated in the diagram below:
Figure 2.1. Recovery Manager Architecture
The Recovery Manager is a daemon process1 responsible for performing crash recovery. Only one Recovery Manager runs per node. The Object Store provides persistent data storage for transactions to log data. During normal transaction processing each transaction will log persistent data needed for the commit phase to the Object Store. On successfully committing a transaction this data is removed, however if the transaction fails then this data remains within the Object Store.
The Recovery Manager functions by:
Periodically scanning the Object Store for transactions that may have failed. Failed transactions are indicated by the presence of log data after a period of time that the transaction would have normally been expected to finish.
Checking with the application process which originated the transaction whether the transaction is still in progress or not.
Recovering the transaction by re-activating the transaction and then replaying phase two of the commit protocol.
The following sections describe the architectural components in more detail.
On initialization the Recovery Manager first loads in configuration information via a properties file. This configuration includes a number of recovery activators and recovery modules, which are then dynamically loaded.
The Recovery Manager is not specifically tied to an Object Request Broker or ORB. Hence, the OTS recovery protocol is not implicitly enabled. To enable such protocol, we use the concept of recovery activator, defined with the interface RecoveryActivator, which is used to instantiate a recovery class related to the underlying communication protocol. For instance, when used with OTS, the RecoveryActivitor has the responsibility to create a RecoveryCoordinator object able to respond to the replay_completion operation.
All RecoveryActivator instances inherit the same interface. They are loaded via the following recovery extension property:
<entry key="RecoveryEnvironmentBean.recoveryActivators"> list_of_class_names <entry>
For instance the RecoveryActivator provided in the distribution of JTS/OTS, which shall not be commented, is as follow:
<entry key="RecoveryEnvironmentBean.recoveryActivators"> com.arjuna.ats.internal.jts.orbspecific.recovery.RecoveryEnablement <entry>
When loaded all RecoveryActivator instances provide the method startRCservice invoked by the Recovery Manager and used to create the appropriate Recovery Component able to receive recovery requests according to a particular transaction protocol. For instance the RecoveryCoordinator defined by the OTS protocol.
Each recovery module is used to recover a different type of transaction/resource, however each recovery module inherits the same basic behavior.
Recovery consists of two separate passes/phases separated by two timeout periods. The first pass examines the object store for potentially failed transactions; the second pass performs crash recovery on failed transactions. The timeout between the first and second pass is known as the backoff period. The timeout between the end of the second pass and the start of the first pass is the recovery period. The recovery period is larger than the backoff period.
The Recovery Manager invokes the first pass upon each recovery module, applies the backoff period timeout, invokes the second pass upon each recovery module and finally applies the recovery period timeout before restarting the first pass again.
The recovery modules are loaded via the following recovery extension property:
<entry key="RecoveryEnvironmentBean.recoveryExtenstions"> list_of_class_names <entry>
The backoff period and recovery period are set using the following properties:
<entry key="RecoveryEnvironmentBean.recoveryBackoffPeriod">
<entry key="RecoveryEnvironmentBean.periodicRecoveryPeriod">
The following java classes are used to implement the Recovery Manager:
package com.arjuna.ats.arjuna.recovery :
RecoveryManager – The daemon process that starts up by instantiating an instance of the RecoveryManagerImple class.
RecoveryEnvironment - Properties used by the recovery manager.
RecoveryConfiguration - Specifies the name of the Recovery Manager property file.(ie RecoveryManager-properties.xml)
package com.arjuna.ats.internal.ts.arjuna.recovery :
RecoveryManagerImple - Creates and starts instances of the RecActivatorLoader, the PeriodicRecovery thread and the ExpiryEntryMonitor thread.
RecActivatorLoader - Dynamically loads in the RecoveryActivator specified in the Recovery Manager property file. Each RecoveryActicator is specified as a recovery extension in the properties file
PeriodicRecovery - Thread which loads each recovery module, then calls the first pass method for each module, applies the backoff period timeout, calls the second pass method for each module and applies the recovery period timeout.
RecoveryClassLoader - Dynamically loads in the recovery modules specified in the Recovery Manager property file. Each module is specified as a recovery extension in the properties file (e.g., com.arjuna.ats.arjuna.recovery.recoveryExtension1= com.arjuna.ats.internal.ts.arjuna.recovery.AtomicActionRecoveryModule).
By default, the recovery manager listens on the first available port on a given machine. If you wish to control the port number that it uses, you can specify this using the com.arjuna.ats.arjuna.recovery.recoveryPort attribute.
As already mentioned, recovery typically happens at periodic intervals. If you require to drive recovery directly, then there are two options, depending upon how the RecoveryManager has been created.
You can either use the com.arjuna.ats.arjuna.tools.RecoveryMonitor program to send a message to the Recovery Manager instructing it to perform recovery, or you can create an instance of the com.arjuna.ats.arjuna.recovery.RecoveryDriver class to do likewise. There are two types of recovery scan available:
i. ASYNC_SCAN: here a message is sent to the RecoveryManager to instruct it to perform recovery, but the response returns before recovery has completed.
ii. SYNC: here a message is sent to the RecoveryManager to instruct it to perform recovery, and the response occurs only when recovery has completed.
You can invoke the scan operation on the RecoveryManager. This operation returns only when recovery has completed. However, if you wish to have an asynchronous interaction pattern, then the RecoveryScan interface is provided:
An instance of an object supporting this interface can be passed to the scan operation and its completed method will be called when recovery finishes. The scan operation returns immediately, however.
Sometimes a single Recovery Manager can be made responsible for recovering transactions executing on behalf of multiple transaction coordinators. Conversely, due to specific configurations it may be that multiple Recovery Managers share the same Object Store and in which case should not conflict with each other, e.g., roll back transactions that they do not understand. Therefore, when running recovery it is necessary to tell JBossTS which types of transactions it can recover and which transaction identifiers it should ignore.
When necessary each transaction identifier that JBossTS creates may have a unique node identifier encoded within it and JBossTS will only recover transactions and states that match a specified node identifier. The node identifier for each JBossTS instance should be set via the com.arjuna.ats.arjuna.nodeIdentifier property. This value must be unique across JBossTS instances. The contents of this should be alphanumeric and not exceed 10 bytes in length. If you do not provide a value, then JBossTS will fabricate one and report the value via the logging infrastructure.
How this value is used will depend upon the type of resources being recovered and will be discussed within the relevant sections for the Recovery Modules.
As stated before each recovery module is used to recover a different type of transaction/resource, but each recovery module must implement the following RecoveryModule interface, which defines two methods: periodicWorkFirstPass and periodicWorkSecondPass invoked by the Recovery Manager.
Example 2.2. RecoveryModule interface
public interface RecoveryModule {
* Called by the RecoveryManager at start up, and then
* PERIODIC_RECOVERY_PERIOD seconds after the completion, for all
* RecoveryModules of the second pass
public void periodicWorkFirstPass();
* Called by the RecoveryManager RECOVERY_BACKOFF_PERIOD seconds after the
* completion of the first pass
public void periodicWorkSecondPass();
JBossTS provides a set of recovery modules that are responsible to manage recovery according to the nature of the participant and its position in a transactional tree. The provided classes (that all implements the RecoveryModule interface) are:
Recovers AtomicAction transactions.
Recovers JTS Transactions. This is a generic class from which TopLevel and Server transaction recovery modules inherit, respectively
During recovery, the Transaction Manager needs to be able to communicate to all resource managers that are in use by the applications in the system. For each resource manager, the Transaction Manager uses the XAResource.recover method to retrieve the list of transactions that are currently in a prepared or heuristically completed state. Typically, the system administrator configures all transactional resource factories that are used by the applications deployed on the system. An example of such a resource factory is the JDBC XADataSource object, which is a factory for the JDBC XAConnection objects.
Because XAResource objects are not persistent across system failures, the Transaction Manager needs to have some way to acquire the XAResource objects that represent the resource managers which might have participated in the transactions prior to the system failure. For example, a Transaction Manager might, through the use of JNDI lookup mechanism, acquire a connection from each of the transactional resource factories, and then obtain the corresponding XAResource object for each connection. The Transaction Manager then invokes the XAResource.recover method to ask each resource manager to return the transactions that are currently in a prepared or heuristically completed state.
When running XA recovery it is necessary to tell JBossTS which types of Xid it can recover. Each Xid that JBossTS creates has a unique node identifier encoded within it and JBossTS will only recover transactions and states that match a specified node identifier. The node identifier to use should be provided to JBossTS via the property JTAEnvironmentBean.xaRecoveryNodes; multiple values may be provided in a list. A value of '*' will force JBossTS to recover (and possibly rollback) all transactions irrespective of their node identifier and should be used with caution. The contents of com.arjuna.ats.jta.xaRecoveryNode should be alphanumeric and match the values of com.arjuna.ats.arjuna.nodeIdentifier.
One of the following recovery mechanisms will be used:
If the XAResource is serializable, then the serialized form will be saved during transaction commitment, and used during recovery. It is assumed that the recreated XAResource is valid and can be used to drive recovery on the associated database.
The com.arjuna.ats.jta.recovery.XAResourceRecovery, com.arjuna.ats.jta.recovery.XARecoveryResourceManager and com.arjuna.ats.jta.recovery.XARecoveryResource interfaces are used. These are described in detail later in this document.
To manage recovery, we have seen in the previous chapter that the Recovery Manager triggers a recovery process by calling a set of recovery modules that implements the two methods defined by the RecoveryModule interface. To enable recovery of participants controlled via the XA interface, a specific recovery module named XARecoveryModule is provided. The XARecoveryModule, defined in the packages com.arjuna.ats.internal.jta.recovery.arjunacore and com.arjuna.ats.internal.jta.recovery.jts, handles recovery of XA resources (databases etc.) used in JTA.
JBossTS supports two JTA implementations: a purely local version (no distributed transactions) and a version layered on the JTS. Recovery for the former is straightforward. In the following discussion we shall implicitly consider on the JTS implementation.
Its behavior consists of two aspects: "transaction-initiated" and "resource-initiated" recovery. Transaction-initiated recovery is possible where the particular transaction branch had progressed far enough for a JTA Resource Record to be written in the ObjectStore.
A JTA Resource record contains the information needed to link the transaction, as known to the rest of JBossTS, to the database. Resource-initiated recovery is necessary for branches where a failure occurred after the database had made a persistent record of the transaction, but before the JTA ResourceRecord was persisted. Resource-initiated recovery is also necessary for datasources for which it is not possible to hold information in the JTA Resource record that allows the recreation in the RecoveryManager of the XAConnection/XAResource that was used in the original application.
Transaction-initiated recovery is automatic. The XARecoveryModule finds the JTA Resource Record that need recovery, then uses the normal recovery mechanisms to find the status of the transaction it was involved in (i.e., it calls replay_completion on the RecoveryCoordinator for the transaction branch), (re)creates the appropriate XAResource and issues commit or rollback on it as appropriate. The XAResource creation will use the same information, database name, username, password etc., as the original application.
Resource-initiated recovery has to be specifically configured, by supplying the Recovery Manager with the appropriate information for it to interrogate all the databases (XADataSources) that have been accessed by any JBossTS application. The access to each XADataSource is handled by a class that implements the com.arjuna.ats.jta.recovery.XAResourceRecovery interface, as illustrated in Figure 4. Instances of classes that implements the XAResourceRecovery interface are dynamically loaded, as controlled by properties with names beginning "com.arjuna.ats.jta.recovery.XAResourceRecovery".
Figure 2.2. Resource-initiated recovery and XA Recovery
The XARecoveryModule will use the XAResourceRecovery implementation to get a XAResource to the target datasource. On each invocation of periodicWorkSecondPass, the recovery module will issue an XAResource.recover request – this will (as described in the XA specification) return a list of the transaction identifiers (Xid's) that are known to the datasource and are in an indeterminate (in-doubt) state. The list of these in-doubt Xid's received on successive passes (i.e. periodicWorkSecondPass-es) is compared. Any Xid that appears in both lists, and for which no JTA ResourceRecord was found by the intervening transaction-initiated recovery is assumed to belong to a transaction that was involved in a crash before any JTA ResourceRecord was written, and a rollback is issued for that transaction on the XAResource.
This double-scan mechanism is used because it is possible the Xid was obtained from the datasource just as the original application process was about to create the corresponding JTA_ResourceRecord. The interval between the scans should allow time for the record to be written unless the application crashes (and if it does, rollback is the right answer).
An XAResourceRecovery implementation class can be written to contain all the information needed to perform recovery to some datasource. Alternatively, a single class can handle multiple datasources. The constructor of the implementation class must have an empty parameter list (because it is loaded dynamically), but the interface includes an initialise method which passes in further information as a string. The content of the string is taken from the property value that provides the class name: everything after the first semi-colon is passed as the value of the string. The use made of this string is determined by the XAResourceRecovery implementation class.
For further details on the way to implement a class that implements the interface XAResourceRecovery, read the JDBC chapter of the JTA Programming Guide. An implementation class is provided that supports resource-initiated recovery for any XADataSource. This class could be used as a template to build your own implementation class.
If a failure occurs in the transaction environment after the transaction coordinator had told the XAResource to commit but before the transaction log has been updated to remove the participant, then recovery will attempt to replay the commit. In the case of a Serialized XAResource, the response from the XAResource will enable the participant to be removed from the log, which will eventually be deleted when all participants have been committed. However, if the XAResource is not recoverable then it is extremely unlikely that any XAResourceRecovery instance will be able to provide the recovery sub-system with a fresh XAResource to use in order to attempt recovery; in which case recovery will continually fail and the log entry will never be removed.
There are two possible solutions to this problem:
Rely on the relevant ExpiryScanner to eventually move the log elsewhere. Manual intervention will then be needed to ensure the log can be safely deleted. If a log entry is moved, suitable warning messages will be output.
Set the com.arjuna.ats.jta.xaAssumeRecoveryComplete to true. This option is checked whenever a new XAResource instance cannot be located from any registered XAResourceRecovery instance. If false (the default), recovery assumes that there is a transient problem with the XAResourceRecovery instances (e.g., not all have been registered with the sub-system) and will attempt recovery periodically. If true then recovery assumes that a previous commit attempt succeeded and this instance can be removed from the log with no further recovery attempts. This option is global, so needs to be used with care since if used incorrectly XAResource instances may remain in an uncommitted state.
When recovering from failures, JBossTS requires the ability to reconnect to databases that were in use prior to the failures in order to resolve any outstanding transactions. Most connection information will be saved by the transaction service during its normal execution, and can be used during recovery to recreate the connection. However, it is possible that not all such information will have been saved prior to a failure (for example, a failure occurs before such information can be saved, but after the database connection is used). In order to recreate those connections it is necessary to provide implementations of the following JBossTS interface com.arjuna.ats.jta.recovery.XAResourceRecovery, one for each database that may be used by an application.
if using the transactional JDBC driver provided with JBossTS, then no additional work is necessary in order to ensure that recovery occurs.
To inform the recovery system about each of the XAResourceRecovery instances, it is necessary to specify their class names through the JTAEnvironmentBean.xaResourceRecoveryInstances property variable, whose values is a list of space separated strings, each being a classname followed by optional configuration information.
Additional information that will be passed to the instance when it is created may be specified after a semicolon:
These properties need to go into the JTA section of the property file.
Any errors will be reported during recovery.
Example 2.3. XAResourceRecovery interface
public interface XAResourceRecovery {
public XAResource getXAResource() throws SQLException;
public boolean initialise(String p);
public boolean hasMoreResources();
Each method should return the following information:
initialise: once the instance has been created, any additional information which occurred on the property value (anything found after the first semi-colon) will be passed to the object. The object can then use this information in an implementation specific manner to initialise itself, for example.
hasMoreResources: each XAResourceRecovery implementation may provide multiple XAResource instances. Before any call to getXAResource is made, hasMoreResources is called to determine whether there are any further connections to be obtained. If this returns false, getXAResource will not be called again during this recovery sweep and the instance will not be used further until the next recovery scan. It is up to the implementation to maintain the internal state backing this method and to reset the iteration as required. Failure to do so will mean that the second and subsequent recovery sweeps in the lifetime of the JVM do not attempt recovery.
getXAResource: returns an instance of the XAResource object. How this is created (and how the parameters to its constructors are obtained) is up to the XAResourceRecovery implementation. The parameters to the constructors of this class should be similar to those used when creating the initial driver or data source, and should obviously be sufficient to create new XAResources that can be used to drive recovery.
If you want your XAResourceRecovery instance to be called during each sweep of the recovery manager then you should ensure that once hasMoreResources returns false to indicate the end of work for the current scan it then returns true for the next recovery scan.
The iterator based approach used by XAResourceRecovery leads to a requirement for implementations to manage state, which makes them more complex than necessary.
As an alternative, starting with JBossTS 4.4, users may provide an implementation of the public interface
Example 2.4. XAResourceRecoveryHelper
public interface com.arjuna.ats.jta.recovery.XAResourceRecoveryHelper {
public boolean initialise(String p) throws Exception;
public XAResource[] getXAResources() throws Exception;
During each recovery sweep the getXAResources method will be called and recovery attempted on each element of the array. For the majority of resource managers it will be necessary to have only one XAResource in the array, as the recover() call on it can return multiple Xids.
Unlike XAResourceRecovery instances, which are configured via the xml properties file and instantiated by JBossTS, instances of XAResourceRecoveryHelper and constructed by the application code and registered with JBossTS by calling
<!-- <br/> --><span class="java_type">XARecoveryModule</span><!-- <br/> --><span class="java_separator">.</span><!-- <br/> --><span class="java_plain">addXAResourceRecoveryHelper</span><!-- <br/> --><span class="java_separator">(...)</span>
The initialize method is not called by JBossTS in the current implementation, but is provided to allow for the addition of further configuration options in later releases.
XAResourceRecoveryHelper instances may be deregistered, after which they will no longer be called by the recovery manager. Deregistration may block for a time if a recovery scan is in progress.
<!-- <br/> --><span class="java_type">XARecoveryModule</span><!-- <br/> --><span class="java_separator">.</span><!-- <br/> --><span class="java_plain">removeXAResourceRecoveryHelper</span><!-- <br/> --><span class="java_separator">(...)</span>
The ability to dynamically add and remove instances of XAResourceRecoveryHelper whilst the system is running makes this approach an attractive option for environments in which e.g. datasources may be deployed or undeployed, such as application servers. Care should be taken with classloading behaviour in such cases.
Recovery of XA datasources can sometimes be implementation dependant, requiring developers to provide their own XAResourceRecovery instances. However, JBossTS ships with several out-of-the-box implementations that may be useful.
These XAResourceRecovery instances are primarily intended for when running JBossTS outside of a container such as JBossAS, since they rely upon XADataSources as the primary handle to drive recovery. If you are not running JBossTS stand-alone then you should consult the relevant integration documentation to ensure that the right recovery modules are being used.
: this expects an XML property file to be specified upon creation and from which it will read the configuration properties for the datasource. For example:
Example 2.5. XML datasource
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><
<entry key="DB_X_DatabaseUser">username</entry>
<entry key="DB_X_DatabasePassword">password"</entry>
<entry key="DB_X_DatabaseDynamicClass">DynamicClass</entry>
<entry key="DB_X_DatabaseURL">theURL</entry>
: this recovery implementation should work on any datasource that is exposed via JNDI. It expects an XML property file to be specified upon creation and from which it will read the database JNDI name, username and password. For example:
Example 2.6. JNDI datasource
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><
<entry key="DatabaseJNDIName">java:ExampleDS</entry>
<entry key="UserName">username</entry>
<entry key="Password">password</entry>
Because these classes are XAResourceRecovery instances they are passed any necessary initialization information via the initialise operation. In the case of BasicXARecovery and JDBCXARecovery this should be the location of a property file and is specified in the JBossTS configuration file. For example:
The TransactionStatusConnectionManager object is used by the recovery modules to retrieve the status of transactions and acts like a proxy for TransactionStatusManager objects. It maintains a table of TransactionStatusConnector obects each of which connects to a TransactionStatusManager object in an Application Process.
The transactions status is retrieved using the getTransactionStatus methods which take a transaction Uid and if available a transaction type as parameters. The process Uid field in the transactions Uid parameter is used to lookup the target TransactionStatusManagerItem host/port pair in the Object Store. The host/port pair are used to make a TCP connection to the target TransactionStatusManager object by a TransactionStatusConnector object. The TransactionStatusConnector passes the transaction Uid/transaction type to the TransactionStatusManager in order to retrieve the transactions status.
When the Recovery Manager initialises an expiry scanner thread ExpiryEntryMonitor is created which is used to remove long dead items from the ObjectStore. A number of scanner modules are dynamically loaded which remove long dead items for a particular type.
Scanner modules are loaded at initialisation and are specified as properties beginning with
<entry key="RecoveryEnvironmentBean.expiryScanners"> list of class names </entry>
All the scanner modules are called periodically to scan for dead items by the ExpiryEntryMonitor thread. This period is set with the property:
<entry key="RecoveryEnvironmentBean.expiryScanInterval"> number_of_hours </entry>
All scanners inherit the same behaviour from the java interface ExpiryScanner. A scan method is provided by this interface and implemented by all scanner modules, this is the method that gets called by the scanner thread.
The ExpiredTransactionStatusManagerScanner removes long dead TransactionStatusManagerItems from the Object Store. These items will remain in the Object Store for a period of time before they are deleted. This time is set by the property:
<entry key="RecoveryEnvironmentBean.transactionStatusManagerExpiryTime"> number_of_hours </entry> (default 12 hours)
The AtomicActionExpiryScanner moves transaction logs for AtomicActions that are assumed to have completed. For instance, if a failure occurs after a participant has been told to commit but before the transaction system can update the log, then upon recovery JBossTS recovery will attempt to replay the commit request, which will obviously fail, thus preventing the log from being removed. This is also used when logs cannot be recovered automatically for other reasons, such as being corrupt or zero length. All logs are moved to a location based on the old location appended with /Expired.
AtomicActionExpiryScanner is disabled by default. To enable it simply add it to the JBossTS properties file. You do not need to enable it in order to cope with (move) corrupt logs.
This represents the user transactional program. A Local transaction (hash) table, maintained within the running application process keeps trace of the current status of all transactions created by that application process, The Recovery Manager needs access to the transaction tables so that it can determine whether a transaction is still in progress, if so then recovery does not happen.
The transaction tables are accessed via the TransactionStatusManager object. On application program initialisation the host/port pair that represents the TransactionStatusManager is written to the Object Store in '../Recovery/TransactionStatusManager' part of the Object Store file hierarchy and identified by the process Uid of the application process.
The Recovery Manager uses the TransactionStatusConnectionManager object to retrieve the status of a transaction and a TransactionStatusConnector object is used to make a TCP connection to the TransactionStatusManager.
This object acts as an interface for the Recovery Manager to obtain the status of transactions from running JBossTS application processes. One TransactionStatusManager is created per application process by the class com.arjuna.ats.arjuna.coordinator.TxControl. Currently a tcp connection is used for communication between the RecoveryManager and TransactionStatusManager. Any free port is used by the TransactionStatusManager by default, however the port can be fixed with the property:
<entry key="RecoveryEnvironmentBean.transactionStatusManagerPort"> port </entry>
On creation the TransactionStatusManager obtains a port which it stores with the host in the Object Store as a TransactionStatusManagerItem. A Listener thread is started which waits for a connection request from a TransactionStatusConnector. When a connection is established a Connection thread is created which runs a Service (AtomicActionStatusService) which accepts a transaction Uid and a transaction type (if available) from a TransactionStatusConnector, the transaction status is obtained from the local thransaction table and returned back to the TransactionStatusConnector
All objects are identified by a unique identifier Uid. One of the values of which is a process id in which the object was created. The Recovery Manager uses the process id to locate transaction status manager items when contacting the originator application process for the transaction status. Therefore, exactly one recovery manager per ObjectStore must run on each nodes and ObjectStores must not be shared by multiple nodes.
The use of TCP/IP sockets for TransactionStatusManager and RecoveryManager provides for maximum flexibility in the deployment architecture. It is often desirable to run the RecoveryManager in a separate JVM from the Transaction manager(s) for increased reliability. In such deployments, TCP/IP provides for communication between the RecoveryManager and transaction manager(s), as detailed in the preceding sections. Specifically, each JVM hosting a TransactionManager will run a TransactionStatusManager listener, through which the RecoveryManager can contact it to determine if a transaction is still live or not. The RecoveryManager likewise listens on a socket, through which it can be contacted to perform recovery scans on demand. The presence of a recovery listener is also used as a safety check when starting a RecoveryManager, since at most one should be running for a given ObjectStore.
There are some deployment scenarios in which there is only a single TransactionManager accessing the ObjectStore and the RecoveryManager is co-located in the same JVM. For such cases the use of TCP/IP sockets for communication introduces unnecessary runtime overhead. Additionally, if several such distinct processes are needed for e.g. replication or clustering, management of the TCP/IP port allocation can become unwieldy. Therefore it may be desirable to configure for socketless recovery operation.
The property CoordinatorEnvironmentBean.transactionStatusManagerEnable can be set to a value of NO to disable the TransactionStatusManager for any given TransactionManager. Note that this must not be done if recovery runs in a separate process, as it may lead to incorrect recovery behavior in such cases. For an in-process recovery manager, the system will use direct access to the ActionStatusService instead.
The property RecoveryEnvironmentBean.recoveryListener can likewise be used to disable the TCP/IP socket listener used by the recovery manager. Care must be taken not to inadvertently start multiple recovery managers for the same ObjectStore, as this error, which may lead to significant crash recovery problems, cannot be automatically detected and prevented without the benefit of the socket listener.
To manage recovery in case of failure, the OTS specification has defined a recovery protocol. Transaction's participants in a doubt status could use the RecoveryCoordinator to determine the status of the transaction. According to that transaction status, those participants can take appropriate decision either by roll backing or committing.
A reference to a RecoveryCoordinator is returned as a result of successfully calling register_resource on the transaction Coordinator. This object, which is implicitly associated with a single Resource, can be used to drive the Resource through recovery procedures in the event of a failure occurring during the transaction.
On each resource registration a RecoveryCoordinator Object is expected to be created and returned to the application that invoked the register_resource operation. Behind each CORBA object there should be an object implementation or Servant object, in POA terms, which performs operations made on a RecoveryCoordinator object. Rather than to create a RecoveryCoordinator object with its associated servant on each register_resource, JBossTS enhances performance by avoiding the creation of servants but it relies on a default RecoveryCoordinator object with it's associated default servant to manage all replay_completion invocations.
In the next sections we first give an overview of the Portable Object Adapter architecture, then we describe how this architecture is used to provide RecoveryCoordinator creation with optimization as explained above.
Basically, the Portable Object Adapter, or POA is an object that intercepts a client request and identifies the object that satisfies the client request. The Object is then invoked and the response is returned to the client.
The object that performs the client request is referred as a servant, which provides the implementation of the CORBA object requested by the client. A servant provides the implementation for one or more CORBA object references. To retreive a servant, each POA maintains an Active Object Map that maps all objects that have been activated in the POA to a servant. For each incoming request, the POA looks up the object reference in the Active Object Map and tries to find the responsible servant. If none is found, the request is either delegated to a default servant, or a servant manager is invoked to activate or locate an appropriate servant. In addition to the name space for the objects, which are identified by Object Ids, a POA also provides a name space for POAs. A POA is created as a child of an existing POA, which forms a hierarchy starting with the root POA.
Each POA has a set of policies that define its characteristics. When creating a new POA, the default set of policies can be used or different values can be assigned that suit the application requirements. The POA specification defines:
Thread policy – Specifies the threading model to be used by the POA. Possible values are:
ORB_CTRL_MODEL – (default) The POA is responsible for assigning requests to threads.
SINGLE_THREAD_MODEL – the POA processes requests sequentially
Lifespan policy - specifies the lifespan of the objects implemented in the POA. The lifespan policy can have the following values:
TRANSIENT (Default) Objects implemented in the POA cannot outlive the process in which they are first created. Once the POA is deactivated, an OBJECT_NOT_EXIST exception occurs when attempting to use any object references generated by the POA.
PERSISTENT Objects implemented in the POA can outlive the process in which they are first created.
Object ID Uniqueness policy - allows a single servant to be shared by many abstract objects. The Object ID Uniqueness policy can have the following values:
UNIQUE_ID (Default) Activated servants support only one Object ID.
MULTIPLE_ID Activated servants can have one or more Object IDs. The Object ID must be determined within the method being invoked at run time.
ID Assignment policy - specifies whether object IDs are generated by server applications or by the POA. The ID Assignment policy can have the following values:
USER_ID is for persistent objects, and
SYSTEM_ID is for transient objects
Servant Retention policy - specifies whether the POA retains active servants in the Active Object Map. The Servant Retention policy can have the following values:
RETAIN (Default) The POA tracks object activations in the Active Object Map. RETAIN is usually used with ServantActivators or explicit activation methods on POA.
NON_RETAIN The POA does not retain active servants in the Active Object Map. NON_RETAIN is typically used with ServantLocators.
Request Processing policy - specifies how requests are processed by the POA.
USE_ACTIVE_OBJECT_MAP (Default) If the Object ID is not listed in the Active Object Map, an OBJECT_NOT _EXIST exception is returned. The POA must also use the RETAIN policy with this value.
USE_DEFAULT_SERVANT If the Object ID is not listed in the Active Object Map or the NON_RETAIN policy is set, the request is dispatched to the default servant. If no default servant has been registered, an OBJ_ADAPTER exception is returned. The POA must also use the MULTIPLE_ID policy with this value.
USE_SERVANT_MANAGER If the Object ID is not listed in the Active Object Map or the NON_RETAIN policy is set, the servant manager is used to obtain a servant.
Implicit Activation policy - specifies whether the POA supports implicit activation of servants. The Implicit Activation policy can have the following values:
IMPLICIT_ACTIVATION The POA supports implicit activation of servants. Servants can be activated by converting them to an object reference with org.omg.PortableServer.POA.servant_to_reference() or by invoking _this()on the servant. The POA must also use the SYSTEM_ID and RETAIN policies with this value.
NO_IMPLICIT_ACTIVATION (Default) The POA does not support implicit activation of servants.
It appears that to redirect replay_completion invocations to a default servant we need to create a POA with the Request Processing policy assigned with the value set to USE_DEFAULT_SERVANT. However to reach that default Servant we should first reach the POA that forward the request to the default servant. Indeed, the ORB uses a set of information to retrieve a POA; these information are contained in the object reference used by the client. Among these information there are the IP address and the port number where resides the server and also the POA name. To perform replay_completion invocations, the solution adopted by JBossTS is to provide one Servant, per machine, and located in the RecoveryManager process, a separate process from client or server applications. The next section explains how the indirection to a default Servant located on a separate process is provided for JacORB.
JacORB does not define additional policies to redirect any request on a RecoveryCoordinator object to a default servant located in the Recovery Manager process. However it provides a set of APIs that allows building object references with specific IP address, port number and POA name in order to reach the appropriate default servant.
When the Recovery Manager is launched it seeks in the configuration the RecoveryActivator that need be loaded. Once done it invokes the startRCservice method of each loaded instances. As seen in in the previous chapter (Recovery Manager ) the class to load that implements the RecoveryActivator interface is the class RecoveryEnablement. This generic class, located in the package com.arjuna.ats.internal.jts.orbspecific.recovery, hides the nature of the ORB being used by the application (JacORB). The following figure illustrates the behavior of the RecoveryActivator that leads to the creation of the default servant that performs replay_completion invocations requests.
In addition to the creation of the default servant, an object reference to a RecoveryCoordinator object is created and stored in the ObjectStore. As we will see this object reference will be used to obtain its IP address, port number and POA name and assign them to any RecoveryCoordinator object reference created on register_resource.
When an application registers a resource with a transaction, a RecoveryCoordinator object reference is expected to be returned. To build that object reference, the Transaction Service uses the RecoveryCoordinator object reference created within the Recovery Manager as a template. The new object reference contains practically the same information to retrieve the default servant (IP address, port number, POA name, etc.), but the Object ID is changed; now, it contains the Transaction ID of the transaction in progress and also the Process ID of the process that is creating the new RecoveryCoordinator object reference, as illustrated in Figure 11.
Figure 3.4. Resource registration and returned RecoveryCoordinator Object reference build from a reference stored in the ObjectStore.
Since a RecoveryCoordintaor object reference returned to an application contains all information to retrieve the POA then the default servant located in the Recovery Manager, all replay_completion invocation, per machine, are forwarded to the same default RecoveryCoordinator that is able to retreive the Object ID from the incoming request to extract the transaction identifier and the process identifier needed to determine the status of the requested transaction.
JBossTS is highly configurable. For full details of the configuration mechanism used, see the Programmer's Guide.
The following table shows the configuration features, with default values shown in italics. More details about each option can be found in the relevant sections of this document.
You need to prefix each property in this table with the string com.arjuna.ats.arjuna.recovery. The prefix has been removed for formatting reasons, and has been replaced by ...
|Configuration Name
|Possible Values
120/any positive integer
Interval between recovery attempts, in seconds.
10/any positive integer
Interval between first and second recovery passes, in seconds.
12/any integer
Interval between expiry scans, in hours. 0 disables scanning. Negative values postpone the first run.
12/any positive integer
Interval after which a non-contactable process is considered dead. 0 = never.


text:
Our 20% Off Sale is now on! Shop via the website or mobile apps. Delivery in the US and the Caribbean Islands. Hurry sale ends soon!
Subscribe to the ILF mailing list to receive updates on new arrivals, special offers and other discount information.
Welcome Island Living Furniture Store!
Click on above image to view full picture
Availability: In stock
Only 2 left
Email to a Friend
* Required Fields
You have no items in your shopping cart.
You have no items to compare.
Island Living Furniture is your one stop destination for furnishing and decorating your home. From the bedroom to the dining room, living room to home office, kids furniture to outdoor furniture, we have everything you need to create a home that is stylish, comfortable, and a true reflection of who you are.
Welcome to Island Living Furniture and we hope you enjoy your entire shopping experience!
New Horizon Building, Ground Floor, 3 1⁄2 Miles Philip S.W. Goldson Highway, Belize City, Belize. US Customer Support: USA: 1.(908) 906.2036Company Number: 169850
Get the ILF app


text:
looking for one with under 120k miles or so. I'm in Hull but willing to travel as they're fairly rare. Have seen a couple of ex-council ones on gumtree, ebay etc but didn't realise how rare they were at the time so didn't get in quick enough - if anyone has any good pointers for where else to look that would be great.
- Gus


text:
You may not be able to resolve the world's environmental problems but you can lessen your impact on the environment significantly and save money throughout the year by taking a few green steps to energy efficiency. Whether you are looking for easy, fun ways to go green or save money, you will find ideas throughout this site. Commit to doing your part.
Take advantage of Broward County's Free yard and bulky waste disposal program. Visit one of three Residential Trash Transfer Stations conveniently located in the northern, central and southern portions of Broward County. Find a location.
Broward County has experience an exceptional dry season. To help address the issue and conserve our precious water resource, residents are reminded to follow year round irrigation restrictions.


text:
Chrono Trigger, DS, Fire Emblem - Shadow Dragon, Mario and Luigi - Bowser's Inside Story, Mario Kart DS, Nintendo, Professor Layton and Pandora's Box, Professor Layton and the Curious Village, Professor Layton and the Lost Future, The Legend of Zelda - Phantom Hourglass, The Legend of Zelda - Spirit Tracks, Yoshi's Island DS
Every game system has an identity, a defining characteristic or style of game that comes to mind whenever the platform is mentioned. The DS is something of a jack-of-all-trades, a handheld that pioneered new ways to play opening up bold new areas of design and gameplay that boasted exciting opportunities for developers of all types of games. The intuitive touch-screen interface paved the way for a slew of accessible casual games from Dr Kawashima's Brain Training to endless Imagine games whilst also paving the way for more challenging concepts like Elite Beat Agents. In this sense the identity of the DS is fairly loose, neither entirely casual or hardcore and there's something for gamers of all tastes and skill levels to choose. The console is an all-rounder, one that has seen more than its fair share of shovelware clogging up its back catalogue but a system is not usually judged according to its worst output but its best. The following are, in my opinion, the ten best experiences available for the Nintendo DS. Continue reading


text:
Modern and pleasant wallpaper with theme of music.
Select sizes and banner.
Example: The dimension 260 x 270 consists of 4 banner.
1. Field Size select 260cm X 270cm
2. Field Banner No. Fill in four numbers you desire, for example 3,4,5,6, always as basis the photography with the 6 banners.
The designs are printed on mat vinyl material with brilliant colors of high durability. The photo wall decals can be easily removed without damaging the wall and do not leave any glue.
Select dimension, kind of printing and attachment of Photo Wallpapers.
Select the dimensions according to wall where the wallpaper will be attached to. If the photo wall decal is bigger than your wall, you can easily cut it with a small blade.
The photo wallpaper will be printed on mat adhesive vinyl material. The photo is divided into stripes of 65 cm width and 270 cm hight. According to the dimension of your wall, you select the amount of stripes you need. For more information about the dimensions please click on the second photo.
In order to avoid gaps between the stripes during attachment, every strip overlaps 1,5 cm on the right as well on the left side, This means, the motive which ends on the one stripe will be repeated on the second one (overlapping), so it is easy to attach the wallpaper without any gaps.
After attaching the first stripe, stick the second stripe 1,5 cm on the first strip and find the point of coincidence, so there is no risk of leaving gaps between the stripes. Continue doing this until you have finished attaching the photo wallpaper.
Dimensions of Photo Wallpaper.
The wallpaper are produced in stripes of 65cm x 270cm.
The height of the wallpaper remains stable 270cm, the width of each strip increases by 65cm for each strip. Depending on the wall you will cover, please select how many stripes you will need . To see in detail, how the photo wall covering you choose is divided in stripes, please click on motive info, in order to be able to select the stripes you desire.
In case you would like different dimensions please Contact us.
Printing-quality of Photos.
The printing is done on printing machines of the latest technology, The printing quality is excellent with brilliant colors of high durability.
Colors of photo wallpaper on the screen.
Due to variations in the monitor settings, there may be variations in the appearance of the colors on your screen.
For the easy application of the Photo Wallpapers you can find detailed Application Instructions for adhesive photo wallpapers, wall stickers, for large wall stickers, for door stickers, for fridge stickers.
You can open and print the application instructions for the Photo Wallpapers clicking on the icon pdf.
You will need the program (Adobe Reader):
Product 33/35
Gießerallee 19
47877 Willich
Tel.: +49 (0) 2154 5029724


text:
Staff writer
Ruthann Dies of Lehigh had felted before, but nothing like this. After a quick Internet search, she began using wool from her family's alpaca herd to create small animal figurines.
"Once I got the technique, I went from there," she said.
So far, she has created about 20 figures, ranging from seals and dogs to goats and a lion. Dies said she enjoys making the animals because it is like art.
"It requires a lot of patience but I really enjoy it," she said. "I really like making animals that resemble my own and wild animals."
Dies has done a variety of things with alpaca fiber, including crocheting and wet felting, but she said she enjoys this the best because of its artistic side.
To start the animals, Dies first makes a wire frame and then wraps it in pipe cleaners.
"The pipe cleaners help the fibers stick to the wire frame," she said.
Dies then wraps cleaned alpaca wool around the frame. For some figures, such as the rabbit, no frame is used. Instead, Dies ties a knot in the middle of the alpaca fiber and wraps the fiber around the knot.
Once she has the desired size, Dies takes sharp needles with different ends to weave the wool together in a process called felting. This method allows the figures to be made without adhesive to hold them together.
"I have stuck myself a lot," she said.
In order not to ruin her table, she uses a burlap pillow filled with rice to stop the needles from gouging the wood.
"You try to make them smooth, especially animals like the seal and lion, but with these fibers it'll never be smooth, no matter how much you try," Dies said.
Once Dies gets the desired body shape, she works on the face, which takes the longest because of all the small felting.
"I have to work on them a long time to get it just right," Dies said. "I use a photo and an image in my mind about what they should look like."
Dies said it takes a surprising amount of fiber and time. Simple animals like a bird, rabbit, or seal Dies can complete in a few hours depending on the size, but others like the lion took days because of its multiple textures and large size.
"The panda took the longest because it has no armature and multiple appendages," Dies said.
To get the color just right, Dies takes two different colors, for example dark gray and white, and tears the fibers in half until its well mixed. She prefers the look of the nature fibers and only uses dyed colors for accents like eyes and noses.
The animals are durable but not toys. Because the pieces are only felted together, they can come apart easily. They can also fray and shed.
"Fixing the fray is easy," Dies said. "You just smooth the fiber and if you don't have a felting needle, use a touch of hairspray to keep the fibers in place."
Dies has only been making the figurines for a couple of months and is constantly learning. Her next project will be an elephant.
"There are people in the Kansas Alpaca Association that want me to teach a class on how to make them, but I don't know yet. It's a pretty complicated process," she said.
She hopes to sell them at alpaca shows later this summer.
"They're all made from the fibers of our animals," her husband Ron Dies said. "We had to come up with ways to use the fiber."
The couple began with two alpacas in 2005. Now their herd consists of 25 alpacas ranging from dark, almost maroon red, black, gray, and white.
Ten pounds of wool with fibers nearly 8 inches long can be gathered from one animal.
The animals are shaved once a year in May to get all the fiber for the year.
"Alpaca wool is unique because it's warm in the winter, and cool in the summer," Ruthann said.
"All the money we make from things like this goes back to the animals," Ron Dies said. "It's not about making money we're retired and we love working with these animals."


text:
Explore new books from Kentucky
January 22, 2016
New titles have been published on Kentucky Scholarship Online (KSO), adding to 5 subjects including History, Music and Literature. These books cover a diverse range of subjects, from Sino-American relations to U. S. Air Force policy after Vietnam, and from Obama at war to the life of Colonel George M. Chinn - and much more!
This brings the total amount of scholarly works available on KSO to almost 200. Start browsing KSO now, and find out how your institution can sign up to a free trial of University Press Scholarship Online.


text:
Quick Links
Act Now ›
Contributions may come from the organizations themselves or its individual members or employees or owners, and those individuals' immediate families. Organization totals include subsidiaries and affiliates.
This data is based on records released by the Internal Revenue Service on Monday, August 15, 2016.
Feel free to distribute or cite this material, but please credit the Center for Responsive Politics. For permission to reprint for commercial uses, such as textbooks, contact the Center: firstname.lastname@example.com
Sign up for our newsletter to track money's influence on U.S. elections and public policy.
The Center for Responsive Politics
1300 L St., NW Suite 200
(202) 857-0044
(202) 857-7809
Except for the Revolving Door section, content on this site is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License by OpenSecrets.org. To request permission for commercial use, please contact us.


text:
How should Charlottesville evolve?
Meredith Montague: "My first thought is upward, but I don't really mean that because I don't want Charlottesville to get bigger and block out the sky."
Joanne Meier: "Slowly and carefully. Really slowly and carefully."
Peter Castiglione: "The city should invest in curbside cardboard recycling. Put some of our extra meals tax money back into Fridays after Five and get some good bands."


text:
Friday, 28 November 2008
A shopping expedition
Enabling shopping trips to be easy by bicycle is as important as enabling trips to school or work.
This is a journey made on a perfectly normal bicycle by a person wearing normal clothes. It's about 2 km in each direction to get to the shop shown, though I have a choice of two other shops which are closer than that.
The video is cut to make it more varied and take out repetitive parts, and I take a different route home in order to show some variety. However it still accurately portrays what a journey of this length is like. You see very few cars as they take other routes. Talking of which, if I was to drive I'd have to stop at two sets of traffic lights to get to that supermarket, and while the parking is free at the supermarket it is further away from the front door of the shop than I can park my bike. It's almost always quicker by bike than by car.
In the video you will see the "lonely bicycle" which is parked at a bus stop around the corner every day, and one of the underpasses which allows cyclists to avoid traffic lights. There is also a stretch of outdated cycle lane which is soon to be replaced along with a section of what I expect to replace it, we get to completely avoid a roundabout twice, we have priority when crossing roads twice, ride on residential streets which are empty of moving cars because they provide permeability only for bicycles and collect our shopping without using any carrier bags because it can be transferred directly from the supermarket trolley into the bike baskets. We also see lots of other people doing the same thing, because there are always lots of other people cycling everywhere.
This was actually a slow day at the shops. On busier days I can't get my bike indoors at the shopping centre because there isn't room.
Want to see it for yourself ? Come and visit.
10 comments:
I really enjoyed watching this video David :) Do you have a camera on your head or just a very steady hand whilst cycling one handed?
I also shop on my bike - although I tend to go early before the roads get too busy because we don't have seperate cycle paths.
- 28 November 2008 at 10:43
- David Hembrow said...
I hold the camera in my hand. It's pretty safe to ride one-handed here, whatever time of day it is, and the cycle paths are (mostly) very smooth.
- 28 November 2008 at 10:48
- lehommeaulevelo said...
David we could do with your Old outdated Cycle Paths,they are better than our New Cycle Paths. I like the way you can cycle inside the Shopping Mall,it keeps the Bike from getting Wet. In theory they could do the same here in Ireland as the Malls are around the same size that they could allow you to bring the Bike indoors and leave outside the Supermarket Door. I notice you were able to leave a Cycle Computer on the Bike without it getting Nicked. I have done this myelf a few times by accidentally leaving one on my Bike, one was robbed a few Years ago in a different District to my own however. I have not had any stolen outside my Local Supermarket but you are taking a big chance.A lot of Supermarkets now have Bike Racks but it is only a token amount,we could do with a lot more.Where I live there is Tesco and a few Years ago there was no Racks at all but now we have them for about two Years and they have put in a few more. So Bike use is steadily increasing everywhere all over the Country and in Dublin it is getting harder to find a spare Biking Rack free.Now we could do with decent Cycle Paths. I like the Life in the Netherlands that you have shown us, Brilliant Video.
- 28 November 2008 at 14:56
- David Hembrow said...
It's pretty safe to leave things on your bike here. I don't think anyone removes things like bike computers.
Parked bikes generally have something left on them.
- 28 November 2008 at 15:35
- lehommeaulevelo said...
A few times in the Centre of Dublin in O 'connell Street in the Central Promenade where People Park their Bikes ,I have noticed People have left their Panniers and sometimes Cycle Computers. They must be Tourists,not many Local People would chance doing that. I could be wrong maybe the times they are a changing. I always take the Panniers with me and anything else that could walk unless I am in Eye Contact say at a Cafe sitting outside beside the Bike.
- 28 November 2008 at 16:08
- Anneke said...
At shops it is generally safer to leave things on, like a bike computer or removable lights and the like. But when you park your bike at a trainstation anything that is easily removable needs to taken off. I think it has to with how long the bike is 'alone'. At a trainstation it is expected to be there for an entire day, while at a shop it can be there for only ten minutes. I don't have anything to remove, because everything is basically bolted to the bike... :)
- 28 November 2008 at 16:57
- acline said...
Except for the infrastructure and the parking, my shopping strip this morning was remarkably similar to yours :-)
I rode about 1.5 miles over residential streets. Stopped at 3 intersections crossing secondary arteries. Parked my bicycle at a rack with high wheel-bending potential. I locked to the side of it so I could support the frame. I cinched it up tight so that I could load without tipping -- full front basket and 10-pound bag of charcoal on the rear rack.
I saw no other cyclists this morning at the store or on the route. But it is a dreary, chilly day with a bit of sleet. Yesterday the weather was nicer. There were four cyclists at the store, and I saw four more along the route.
I need to make some movies of our situation in Springfield. I may try a helmet mount first :-)
- 28 November 2008 at 19:24
Thanks for this- The buildings are reminiscent of the UK, but the cycling facilities look more like (some parts of) Germany, which is very confusing.
It's taking time, but I'm getting more used to leaving things on my bike. I used to take lights, computer and anything I was carrying off when I left the bike, but these days I usually forget until I see the front light shining through the shop window.
Yesterday I forgot my briefcase and realised when I saw it in the Xtracycle on my return...
- 28 November 2008 at 21:54
- 2whls3spds said...
Excellent! My trip is about 3k each way. It is pretty much a straight shot, but is is on a main road with no cycling facilities :-( And I wouldn't dare ride it one handed. But we ride it anyway! One of these days we may see some widespread cycle paths in the US...maybe.
- 29 November 2008 at 14:37
- Nick said...
You wouldn't like to come and do MY shopping too, while you're at it, would you David? You'd earn my grateful thanks! At the speed you manage to cycle, it wouldn't take you too long to get down here.
- 29 November 2008 at 15:53


text:
Two themed quilts by artist Catherine Mettille, an adjunct professor in the Writing Program. The quilts are the result of projects she developed in the early 1990s in Chicago while teaching at-risk ESL students, who were struggling immigrants and refugees, some from war-torn Bosnia and Iraq. The students participated, along with Holocaust survivors, in the sewing of a Holocaust Quilt, which features a phoenix rising, the Star of David, and Holocaust victims who survived and went on to rebuild their lives. Its symbolism reflects love, forgiveness and strength of the human spirit. It is 11'x12.'
The Enchanted Garden Quilt was created in a motivational literacy project with students who read Mettille's story the Enchanted Garden. The quilt features the Tree of Life and characters from the tale, which teaches self-discovery through love and compassion. It won first place in a textile art exhibit in Evanston, Ill. It is 7'x8.'
Viewable during regular library hours.