<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://rss.function1.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://rss.function1.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Function1 - AquaLogic Blog</title>
        <link>http://www.function1.com/site/</link>
        <description />
        <language>en</language>
        <copyright>Copyright 2008</copyright>
        <lastBuildDate>Thu, 04 Dec 2008 16:03:10 -0500</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://rss.function1.com/AqualogicBlog" type="application/rss+xml" /><feedburner:emailServiceId>1041561</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><item>
            <title>The Function1 Holiday Enterprise Software Shopping Guide</title>
            <description>&lt;p&gt;Howdy all.&amp;nbsp; With the holiday season upon us and everyone getting inundated with offers of bargain&amp;nbsp;flat screen&amp;nbsp;TVs at your favorite big box store and&amp;nbsp;10 spatulas for the price of&amp;nbsp;9 down at &lt;a href="http://www.youtube.com/watch?v=2XbCWmY0eqY"&gt;Spatula City&lt;/a&gt;, your friends at Function1 hope you'll save some of your hard-earned budget with this cost-saving tip:&amp;nbsp; Make your software purchases at the end of&amp;nbsp;a vendor's fiscal quarter.&lt;/p&gt;
&lt;p&gt;Here's a not-so-well-kept secret about the software business: software and maintenance is a high-margin business for vendors.&amp;nbsp; This means that there is no list price on that shiny new piece of software X that you're thinking of buying..."list price" is just a starting point for negotiating, alot like the tag in the window of a used car.&amp;nbsp; What's more, most software sales folks have a sales target each and every&amp;nbsp;quarter.&amp;nbsp; The&amp;nbsp;difference to a salesman between beating&amp;nbsp;and missing their quarterly number is pretty significant.&amp;nbsp; Beat their number and they:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Likely get a trip on the company to some exotic resort where they sip on delicious fruity drinks.&lt;/li&gt;
&lt;li&gt;Buy that new convertible weekend car that they've been eying.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Miss their number and they can expect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lot's of yelling from angry VPs&lt;/li&gt;
&lt;li&gt;Lot's of meetings and "planning sessions" with aforementioned VPs on how they're going to make their number next quarter&lt;/li&gt;
&lt;li&gt;Perhaps start looking for a new job&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The upshot here is that, come end of the quarter, if a vendor isn't meeting their financial targets, it's firesale time.&amp;nbsp; In short, you have leverage to negotiate a much better price for your software.&amp;nbsp; Say, for instance, you've received a quote to buy a site license for some software&amp;nbsp;at $500K + 20% annual maintenance.&amp;nbsp; Let's also say that, come end of the quarter, your favorite salesman is $300K short of meeting his sales target.&amp;nbsp; Let's also say that the economy is currently in the toilet, and the vendor you're working with is in danger of missing the financial target they've given to Wall Street.&amp;nbsp; All these factors add up to a perfect storm of you saving a bunch of cash.&amp;nbsp; If you're not afraid to say, "No" to a price, there's a good chance you get the $500K software for $300K...if you buy before the end of the quarter.&amp;nbsp; So, not only have you saved $200K from your budget immediately, but you're also realizing an annual maintenance savings of $40K...that's real money.&amp;nbsp; Money you can use to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Take your team on a trip to some exotic resort where you sip on delicious fruity drinks.&lt;/li&gt;
&lt;li&gt;Throw a kick-ass holiday party&lt;/li&gt;
&lt;li&gt;Hire your favorite consultants at Function1 to give you a hand in getting the most out of your new software purchase&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;That's about all for now.&amp;nbsp; Hope you find this tip helpful, and that it saves your some $$$.&amp;nbsp; If you're really in the holiday spirit, feel free to send us a check for 10% of any money you save :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/475041572" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/475041572/the-function1-holiday-enterpri.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/12/the-function1-holiday-enterpri.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Best Practices</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">General</category>
            
            
            <pubDate>Thu, 04 Dec 2008 16:03:10 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F12%2Fthe-function1-holiday-enterpri.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/12/the-function1-holiday-enterpri.html</feedburner:origLink></item>
        
        <item>
            <title>Welcome Sandeep Khaneja and Hani Atalla!</title>
            <description>&lt;p&gt;Function1 is a growing company, but not too big that we can't take a minute out of our regular blog routine to welcome our two newest team members, Sandeep Khaneja and Hani Atalla.&lt;/p&gt;
&lt;p&gt;Hani and Sandeep have actually been with us for several months, so my apologies for the late public welcome, but we're thrilled to welcome them to the team and have them work with our clients delivering elite AquaLogic consulting and product expertise!&lt;/p&gt;
&lt;p&gt;Sandeep is a Plumtree/BEA Alumni with years of experience helping clients like yourselves realize their vision of a best-of-class&amp;nbsp;end-user focused portal, with a special focus on strategic business planning, health checks, and technical optimization of the rest of the AquaLogic product&amp;nbsp;stack.&lt;/p&gt;
&lt;p&gt;Hani is a multi-year ALUI consulting veteran with a solid Java and .NET application development background for ALUI clients, and has been instumental in developing&amp;nbsp;&lt;a href="http://www.function1.com/site/products/watcher.html"&gt;Watcher&lt;/a&gt;, our newest product - an&amp;nbsp;ALUI monitoring an alerting application.&lt;/p&gt;
&lt;p&gt;Welcome guys!&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/466985646" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/466985646/welcome-sandeep-khaneja-and-ha.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/11/welcome-sandeep-khaneja-and-ha.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Function1</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Employees</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Function1</category>
            
            <pubDate>Wed, 26 Nov 2008 23:18:42 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F11%2Fwelcome-sandeep-khaneja-and-ha.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/11/welcome-sandeep-khaneja-and-ha.html</feedburner:origLink></item>
        
        <item>
            <title>The Exciting Conclusion of Stack Wars</title>
            <description>&lt;p&gt;OK, now that you had your dinner and ate your meat, it's time for the pudding.&amp;nbsp; This conclusion to Stack Wars&amp;nbsp;just ties up a few loose ends and walks through a "real-world" example of analyzing stack traces.&amp;nbsp; Have fun... 
&lt;p&gt;&lt;strong&gt;Making Thread dumps easier to view&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Seeing as how most people's idea of a good time isn't sifting through pages upon pages of JVM stack traces, several good people have developed tools that make it easier to view and analyze complex thread dumps. Personally, I like and use the &lt;a href="http://www.alphaworks.ibm.com/tech/jca" target="_new"&gt;IBM Alphaworks Thread and Monitor Dump Analyzer&lt;/a&gt;. Pretty straight forward to use. Just save your thread dump off to a file and open it up in the Analyzer for a pretty view of all your threads that looks like this:&lt;/p&gt;
&lt;p&gt;
&lt;span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"&gt;&lt;img class="mt-image-none" height="635" alt="thread_analyzer.png" src="http://www.function1.com/site/2008/11/05/thread_analyzer.png" width="964" /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I've found this tool useful when I'm trying to look for patterns across many threads in a thread dump. Give it a try, you might like it.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A real world example of how all the rambling I've just gone through came in handy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Long ago, in a galaxy far, far away, I was working on a Plumtree consulting project with a large company. These folks had been having problems with their portal deployment. Periodically, the portal would start eating up 100% of the server CPU, and would never release it until the portal application server was bounced. During the time that the server CPU was pegged, users couldn't access the portal...the customer was not happy. It was one of those big deals where VP-level people at the customer were yelling at VP/Executive level people at Plumtree on a daily basis. So here I am in this high stress situation. I arrive onsite with the customer and, for three days, nothing happens. The application doesn't freak out, and all is fine. At this point, I'm starting to get cautiously optimistic that maybe we won't see any problems during my remaining two days onsite, and somebody else will have to deal with the problem later :) But, alas, it wasn't to be. About halfway through my second to last day with the customer everything went to hell. All of a sudden nobody could access the portal, so we start debugging. Sure enough, first thing we see is that the portal process is eating up 100% of the server CPU. These folks were running on a Unix platform, so I ask them to try:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;kill -QUIT &amp;lt;portal pid&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After explaining for 20 minutes that, no, this command won't kill the process, the server ops folks generated a thread dump and sent it over to review. After about 5 minutes of looking at the portal thread dump, it was pretty obvious that something was amiss with the portal code. The stack trace for EVERY SINGLE THREAD (All 100 or so of them) was exactly the same. They were all stuck running the same native method. Just to be sure this wasn't some freak anomaly, we generated another thread dump 15 minutes later, and, yep, all the stack traces looked the same. So this tells us that there's a problem with some native C code being used by the application...a good start. Unfortunately, since the problem was in native code, we couldn't get a full stack trace from the JVM...it only goes so far as to let you know that it's making a native call. So we dig one level deeper and trace the portal process. Running a trace/truss on a Unix process spits out all the system level calls that are being made. Wouldn't you know it, when we looked at the trace output, 99% of the calls being made were:&lt;/p&gt;
&lt;p&gt;poll(0)&lt;/p&gt;
&lt;p&gt;Now, I wasn't an expert at interpreting this level of data, but I knew enough that "poll" had something to do with sockets, and that there definitely shouldn't be so many of those calls. Long story a little bit shorter, after a bunch of conference calls with Plumtree support and engineering, where we shared the data we'd gathered from the thread dumps and process traces, the engineering team found a very low level bug in the software and shipped a fix out to the customer...tragedy narrowly averted.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Did you really make it this far? If so, thanks for sticking with me, and I hope you found something of use in this long, winding post.&amp;nbsp; If you're ever stuck trying to make sense of a thread dump, feel free to drop us a line or post a comment here...we'll do our best to help.&lt;/p&gt;
&lt;p&gt;Take care, and remember, when dealing with production troubleshooting, "&lt;a href="http://www.youtube.com/watch?v=8qur9LCjz84" target="_new"&gt;Do...or do not, there is no try&lt;/a&gt;". (This doesn't have really have much to do with the post, but I'm kind of tired and pulling at straws for good ways to tie the Star Wars metaphor back in). Anyhow, as always, thanks for reading...see you next time.&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/i&gt;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/462354372" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/462354372/the-exciting-conclusion-of-sta.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/11/the-exciting-conclusion-of-sta.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Development</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Production Support</category>
            
            <pubDate>Sat, 22 Nov 2008 18:14:34 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F11%2Fthe-exciting-conclusion-of-sta.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/11/the-exciting-conclusion-of-sta.html</feedburner:origLink></item>
        
        <item>
            <title>Stack Wars III (Or VII, depending on how you count): Return of the Stack</title>
            <description>&lt;p&gt;&lt;strong&gt;READER BEWARE&lt;/strong&gt;: This got long and geeky, so make sure you're really trying to avoid doing "real work" before you sit down to read.&lt;/p&gt;
&lt;p&gt;Welcome back all, and thanks for joining me for the final installment of a three part series on decompiling Java code and analyzing stack traces. If you're interested in the back story, you can read about decompiling Java &lt;a href="http://www.function1.com/site/2008/10/cool-tools-part-xxx-my-love-af.html"&gt;here&lt;/a&gt;, and analyzing basic stack traces &lt;a href="http://www.function1.com/site/2008/11/the-stack-trace-strikes-back.html"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When we last left off, our hero was frozen in a block of Carbonite and left to his doom. Err...sorry, wrong story, let me start again.&lt;/p&gt;
&lt;p&gt;When we last left off, we walked through analyzing a simple stack trace to run down a bug in a standalone Java program. This is all fine and good, but what happens when you're running a Java application server (like Tomcat or Weblogic) that has hundreds of concurrent threads running tens of different web apps? And you're just trying to figure out why your particular web application is hung? &lt;/p&gt;
&lt;p&gt;Well, if you're lucky, the developer of your web application was a good boy/girl, and they're logging stack traces for you in a log file somewhere. If this is the case, then you can open up the log and analyze the trace like we did the &lt;a href="http://www.function1.com/site/2008/11/the-stack-trace-strikes-back.html"&gt;last go round&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Often times though, you're not so lucky, and you have to dig a little deeper to figure out what's going on. Say, for instance, your web application just starts responding very slowly. You see from access logs that responses are being served back to users, but they're about 5 times slower than normal...WTF? Or, what if your application server starts pegging the box at 100% CPU...what to do? Or, out of nowhere, your app server starts throwing Java.lang.OutOfMemory exceptions...Gah!!! Sadly, these nebulous problems seem to happen in a production environment more often than most of us would like to admit. And when they do occur, it's usually a high stress situation because there's probably a production outage and nobody really knows why. So, how do we find a better fix to the problem than the traditional, "Let's just bounce it and see what happens" response? Why, we use "The Force", of course. Except in this case, "The Force", is just a set of debugging tips that I'm getting ready to share with you as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Take a deep breath and don't freak out when a bunch of people start yelling.&lt;/li&gt;
&lt;li&gt;Understand the severity of the situation. Figure out how much downtime you can tolerate for debugging before things really hit the fan.&lt;/li&gt;
&lt;li&gt;Set expectations. Let people know when they can expect the issue to be fixed. If you know a bounce will temporarily fix the problem, then set a drop-dead time for debugging and schedule a bounce. Let folks know that if you don't find a root-cause of the problem, that they should expect to see the issue again.&lt;/li&gt;
&lt;li&gt;Gather as much information about the problem as you can. What, specifically, are users experiencing? Can you reproduce? What are the symptoms? What log messages do you have? What does the server environment look like? etc.&lt;/li&gt;
&lt;li&gt;Try to relate this issue to something you've seen in the past. Does this look like a problem you saw last week or last month? What did you do to fix it then? Why is it popping up again now?&lt;/li&gt;
&lt;li&gt;Eliminate possible external causes. Is this actually a network problem in disguise? Is the database acting up? Is some other process on the server eating up CPU? Is the server constantly swapping because it doesn't have enough RAM to handle all its business?&lt;/li&gt;
&lt;li&gt;Eliminate environment changes as possible causes. Has the server environment changed recently? Could this be causing your problem? &lt;/li&gt;
&lt;li&gt;Look in earnest at your application server process. Are we bumping up against the Java max. heap size? Are we seeing lots of garbage collection? Is our thread pool exhausted? Is our JDBC pool maxed out?&lt;/li&gt;
&lt;li&gt;Take a look inside of the application server JVM. Generate a thread dump to get a snapshot of how your application server is behaving. Analyze the stack traces in the thread dump, and look for points of interest, like...race conditions, stuck threads, deadlock, etc.&lt;/li&gt;
&lt;li&gt;Open a ticket with the software vendor (If applicable)&lt;/li&gt;
&lt;li&gt;Pray the issue fixes itself and doesn't come back&lt;/li&gt;
&lt;li&gt;Find a new job so you don't have to deal with these problems anymore&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Read on for more fascinating details about The Stack Trace...&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/457889412" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/457889412/stack-wars-iii-or-vii-dependin.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/11/stack-wars-iii-or-vii-dependin.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Development</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Development</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
            <pubDate>Tue, 18 Nov 2008 19:11:01 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F11%2Fstack-wars-iii-or-vii-dependin.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/11/stack-wars-iii-or-vii-dependin.html</feedburner:origLink></item>
        
        <item>
            <title>AJAX Refresher</title>
            <description>&lt;p&gt;It's &lt;a href="http://www.function1.com/site/2007/05/handling-ajax-timeouts.html"&gt;been a while&lt;/a&gt; since we touched on &lt;a href="http://en.wikipedia.org/wiki/AJAX" target="_new"&gt;AJAX&lt;/a&gt;, but a question came up recently about it an I thought it might be good to review. AJAX, or "Asynchronous JavaScript and XML", is a way for portlet developers to create rich Web Applications that don't require the entire browser page to refresh to update content.&amp;nbsp; This is done by making asynchronous calls to the server and updating content within the page itself.&amp;nbsp; With the AquaLogic portal, this means that portlets can dynamically update content in &amp;lt;div&amp;gt; tags by requesting new content without having to refresh the entire page (and other portlets on the page).&amp;nbsp; It's a pretty simple concept; in many cases you can accomplish this without having to even change any code - you can just specify "inline refresh" on the Web Service and the portal will automatically rewrite the HTML links on the page to make AJAX calls:&lt;/p&gt;
&lt;p&gt;&lt;img class="mt-image-none" height="246" alt="inline_refresh.jpg" src="http://www.function1.com/site/2008/11/10/inline_refresh.jpg" width="404" /&gt;&lt;/p&gt;
&lt;p&gt;The HTML rewrites cause the browser to make the HTTP request "behind the scenes", and when a response comes back, the portal refreshes the content inside the portlet &amp;lt;div&amp;gt; tag.&lt;/p&gt;
&lt;p&gt;But there are some things to know about this AJAX stuff, so here are a couple of refresher points about AJAX:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;1) The response to an AJAX request is basically just a text string to a browser, and it's up to your JavaScript to interpret it.&amp;nbsp; Often you do something like:&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;document.getElementById("responseDivTag").innerHTML = response.getResponse();&lt;/pre&gt;
&lt;p&gt;... to refresh content.&amp;nbsp; But note that this doesn't tell the browser to "process" the response - specifically, JavaScript that comes back in the response won't run, because all we're doing is setting the HTML to a string that comes back from the server.&amp;nbsp; In order to run JavaScript in the response, you should look into the &lt;a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/eval" target="_new"&gt;JavaScript "eval()" method&lt;/a&gt;, which will take a string returned from the server and run it as JavaScript.&amp;nbsp; Just make sure you don't include the &amp;lt;script&amp;gt; tags in your response if you really are returning JavaScript and are parsing it as such.&lt;/p&gt;
&lt;p&gt;2) The response does not have to actually be HTML!&amp;nbsp; It's just a string to the browser, and you can do anything with it.&amp;nbsp; The most common use (which &lt;a href="http://www.function1.com/site/products/"&gt;all of our products&lt;/a&gt; use) is to return &lt;a href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt;, or "JavaScript Object Notation", which can then be treated as objects that your script can handle however you want.&amp;nbsp; Let's say you just want to know if there was a success or failure: you could literally just return a "0" or "1" in your response and write something like:&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;if (response.getResponseText.equals("1"))&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; alert("success!");&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;alert("fail");&lt;/p&gt;
&lt;/pre&gt;
&lt;p&gt;Obviously, this just barely scratches the surface on AJAX, and you can rest assured that you haven't heard the last of it.&amp;nbsp; AJAX is the cornerstone of pretty much all future Oracle portal technologies, and if you're a web developer who's not all that familiar with it, trust me:&amp;nbsp; you will be soon.&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/453672298" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/453672298/ajax-not-just-for-html.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/11/ajax-not-just-for-html.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Best Practices</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Development</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">AJAX</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Best Practices</category>
            
            <pubDate>Fri, 14 Nov 2008 23:23:00 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F11%2Fajax-not-just-for-html.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/11/ajax-not-just-for-html.html</feedburner:origLink></item>
        
        <item>
            <title>The Stack Trace Strikes Back</title>
            <description>&lt;p&gt;Howdy all. Welcome to part two of three of what was originally conceived as a one part series. It's entirely possible that I'll get all George Lucas on you years from now and produce some more of these posts that are a complete letdown and affront to your childhood memories, but I digress. For now, rest assured that this post will knock your socks off as a follow-up to my last &lt;a href="http://www.function1.com/site/2008/10/cool-tools-part-xxx-my-love-af.html"&gt;tidbit&lt;/a&gt; on decompiling Java code.&lt;/p&gt;
&lt;p&gt;Without further ado, I give you...Stack Wars II: The Stacktrace Strikes Back (I'm completely aware that I'm abusing the metaphor here, but isn't that really what blogging is all about?).&lt;/p&gt;
&lt;p&gt;Standard disclaimer: This post is intended for a technical audience with a focus on production support. Also, everything here is Java focused, but you can certainly apply some of the concepts in a .NET environment as well...you'll just have to create your own screencaps to replace the examples I've included below.&lt;/p&gt;
&lt;p&gt;So, what is a stack trace, and why should you care? Well, one question at a time please.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is a stack trace?&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;Wikipedia says a Stack Trace is, "A report of the active stack frames instantiated by the execution of a program." Now, I vaguely understand the Wikipedia definition, but I have also have a computer science degree from a second tier state university, so let me try to translate for those of you who were smart enough to get degrees in something besides CompSci: a Stacktrace is a snapshot of a program's behavior at a point in time. In the Java world, a stack trace will tell you which method was being executed at the time the trace was generated, along with its complete call stack, and usually line numbers as well. Take a look at the following simple stack trace below as an example:&lt;/p&gt;
&lt;p&gt;&lt;img class="mt-image-none" height="340" alt="stack_trace.png" src="http://www.function1.com/site/2008/10/13/stack_trace.png" width="677" /&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why should you care?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Good question. I'd venture a guess and say that about 99.99% of the world doesn't need to know nor care about stack traces. But here you are reading this post none-the-less, so here's why they're important:&lt;/p&gt;
&lt;p&gt;1) Good programmers almost always print stack traces out in log files when an error in a program occurs. This gives us a useful tool&amp;nbsp;to track down bugs. Whether you're just reporting information to a support team somewhere, or getting a little sassy and trying to fix a problem yourself, the stack trace is like a map for finding treasure buried deep in code. Except that instead of finding actual treasure, you're just finding a logic error. And instead of getting rich, you just get to complain about&amp;nbsp;a problem, and maybe fix it.&lt;/p&gt;
&lt;p&gt;2) You can tell the JVM to generate a stack trace for a running process. Doing so allows us to take a snapshot of the JVM at an arbitrary point in time, and see what all its threads are up to. This is useful when trying to figure out why a process (Tomcat for instance) is zombied (i.e. it's running, but not responding to requests), or when you're trying to fix deadlock issues, which are particularly difficult to run down.&lt;/p&gt;
&lt;p&gt;Hit the jump for learning more about reading and interpreting stack traces!&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/449127332" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/449127332/the-stack-trace-strikes-back.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/11/the-stack-trace-strikes-back.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Development</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Development</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Java</category>
            
            <pubDate>Mon, 10 Nov 2008 23:56:00 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F11%2Fthe-stack-trace-strikes-back.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/11/the-stack-trace-strikes-back.html</feedburner:origLink></item>
        
        <item>
            <title>Cool Tools Part XVI: My Love Affair With JAD</title>
            <description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Hi, my name is Brian.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I like sunsets, long walks on the beach, puppies, and de-compiling Java code.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;If you have similar interest, please read on.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;On the other hand, if you're not a Java programmer, this post might not be for you.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;So of all the cool tools out there, &lt;a href="http://www.kpdus.com/jad.html"&gt;JAD&lt;/a&gt; is, without a doubt, my absolute favorite...and it's not even close.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;One of the beautiful things about Java is that the byte-code interpreted by the JVM can be reverse-engineered into source code.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.kpdus.com/jad.html"&gt;JAD&lt;/a&gt;, or JavA Decompiler, is a tool for doing just as the name implies: decompiling byte code into source.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;But so what?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Why would this possibly be useful?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Well, here's a list of just a few things that I've done by de-compiling code:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Found software bugs &lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Saved about 5 weeks of hassle with BEA support by pointing them to the line of source code that is causing a bug&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Re-compiled bug fixes back into code as a band-aid solution to a problem (Note that this probably voids any/all support agreements that you've ever had with any one)&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Understood how/why a piece of software works like it does (I.e. "Why is Analytics deleting all a bunch of historic information when I run a specific job...there's no document on it")&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Found cool/un-documented software features (Again...no support, but playing around with stuff is fun)&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;This one is my favorite: Long ago, for "Bring your kids to work day", I was on the hook for talking to a bunch of 12 year olds about programming.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;So I de-compiled a Ms. Pacman applet, found the code that does collision detection, modified it to not work, and re-compiled the new code back in.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The net result was a Ms. Pacman who could run through ghosts, and a bunch of kids learning how "If" statements work.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Also, this guy I know might have one time de-compiled a VI plugin for Eclipse to take out the license key check.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Don't worry though, I quickly told him how he was a bad boy, and he's been on the straight and narrow ever since.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;OK, sorry for the rambling there, but just wanted to give you a flavor of the stuff you can do by de-compiling code.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;More generally though, if you're a programmer at heart, it's always a good idea to look at source code, just to understand how things work.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Of course there are fringe benefits too:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Fellow portal geeks marvel over how "smart" you are because you "de-compiled" the portal and found some problem.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;You'll get to complain about what idiots the people who wrote the code are&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Men will want to be you&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Women will want to be with you&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;So, let's look at a quick example, shall we?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;JAD is a text-based utility, so get ready to fire-up your DOS prompts and/or Shell windows.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;I'm writing this post on a PC, so my examples will be through DOS, but UNIX folks, just make the normal DOS-&amp;gt;*NIX changes, and you'll be fine.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Let's assume that I've been trying to get a piece of proprietary software to run for a while now, and every time I start it up, I get a stacktrace like the following:&lt;/font&gt;&amp;nbsp; 
&lt;span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"&gt;&lt;img class="mt-image-none" height="340" alt="stack_trace.png" src="http://www.function1.com/site/2008/10/13/stack_trace.png" width="677" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Calibri"&gt;Now, you could argue that I should know better than to purchase a piece of software named, "Broken", but I'd argue right back that you're getting in the way of my example.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 10pt"&gt;&lt;font face="Calibri" color="#000000" size="3"&gt;Want to see JAD in action? Join me after the link for all the details!&lt;/p&gt;&lt;/font&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/420031321" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/420031321/cool-tools-part-xxx-my-love-af.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/10/cool-tools-part-xxx-my-love-af.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Cool Tools</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Cool Tools; Java</category>
            
            <pubDate>Mon, 13 Oct 2008 16:53:17 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F10%2Fcool-tools-part-xxx-my-love-af.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/10/cool-tools-part-xxx-my-love-af.html</feedburner:origLink></item>
        
        <item>
            <title>Solaris, PTSocketSelector, and sun.nio.ch.PollSelectorProvider...Oh My!</title>
            <description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;Howdy all.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;After a long hiatus I'm back to blog your socks off with some technical minutiae that will save a few of you lots of headaches, and help the rest of you get a good night's sleep.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;strong&gt;Long Story Short (i.e. "Just the useful info, please")&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;There's a bug in the JDK that causes problems when setting up certain types of Java server socket constructs on some Solaris 10 boxes.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;This bug will likely manifest itself in one of the following ways in your ALUI environment:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;1)&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;You're running the ptlogging utility and see your logs filled up with something like:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;PTSelectorThread_17679958&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;com.plumtree.openkernel.impl.openhttp.core.network.PTSocketSelector&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Unexpected exception.&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;java.io.IOException: Invalid argument&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.DevPollArrayWrapper.poll0(Native Method)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.DevPollArrayWrapper.poll(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.DevPollSelectorImpl.doSelect(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.SelectorImpl.select(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.SelectorImpl.select(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;at com.plumtree.openkernel.impl.openhttp.core.network.PTSocketSelector.run(PTSocketSelector.java:400)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at java.lang.Thread.run(Unknown Source)&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&lt;em&gt;&lt;/em&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;2) Portal starts up fine, but it can't connect to any remote servers, giving you the same stacktrace as above:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;java.io.IOException: Invalid argument&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.DevPollArrayWrapper.poll0(Native Method)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.DevPollArrayWrapper.poll(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.DevPollSelectorImpl.doSelect(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.SelectorImpl.select(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at sun.nio.ch.SelectorImpl.select(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at com.plumtree.openkernel.impl.openhttp.core.network.PTSocketSelector.run(PTSocketSelector.java:400)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;at java.lang.Thread.run(Unknown Source)&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;So what's a good god-fearing person like yourself to do?&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Well, if you act now, we'll send you TWO workarounds for the price of one:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;1) Have an SA up the hard File Descriptor (FD) limit on the server to 8193 or greater by editing /etc/system to have the line:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;set rlim_fd_max=8193&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;Note: You'll need to bounce the box after this change.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;You can then verify it worked by running:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;ulimit -n -H&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;Which should return a number &amp;gt;= 8193.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Sadly, this approach will probably have the SA asking you why you want to make the change, which means you'll have to read the technical details below....so onto option #2&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;2) Tell the appropriate JVMs to use a different Socket Selector configuration.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;You do this by passing the following option to the JVM:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;Depending on what ALUI component you're updating, you may pass this option in different ways.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;For instance, if you're dealing with one of the back-end servers (Collab, Studio, etc), you'll want to update wrapper.conf to add additional arguments like:&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;wrapper.java.additional.7=-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;Note: Replace "7" in the above line with the appropriate number for your wrapper file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;Or you may just need to update a shell script somewhere that's kicking off Tomcat/Weblogic/etc.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Note that these scripts all have their own Shell variables for holding additional Java arguments, so just look through them and update as appropriate.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;If you have problems, feel free to post questions here and we'll do our best to help out.&lt;o:p&gt;&lt;/o:p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&lt;/font&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;&lt;strong&gt;Long Story Long (i.e. "I'm kind of a geek, and I'm sitting at work with nothing else to do, so give me the details")&lt;o:p&gt;&lt;/o:p&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;So ALUI uses the NIO java packages that were introduced in Java 1.4.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;FWIW, I always thought NIO stood for Non-blocking IO, but a little Googling reminds me that it's actually New IO...silly me.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;In any case, the NIO packages let you do some cool things with sockets to more efficiently manage high-volume connections.&amp;nbsp; The under-lying problem you're running into is that out-of-the-box Selector implementation in the JDK uses /dev/poll to allocate 8192 File Descriptors (FD) for use by the selector, and 8192 exceeds the nofiles (Number of File Descriptors) limit on your server.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;So, you can either bump up the server FD limit ala work-around #1 above, or tell Java to use a different selector implementation that doesn't allocate all those FDs ala option #2 above.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;If you're interested in more detail, you can find the Sun bug on the issue &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6322825"&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;font size="3"&gt;&lt;font color="#000000"&gt;&lt;font face="Times New Roman"&gt;Until next time...thanks for reading!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;o:p&gt;&lt;font face="Times New Roman" color="#000000" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/413970491" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/413970491/solaris-ptsocketselector-and-s.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/10/solaris-ptsocketselector-and-s.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Bug</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Operating Systems</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Portal Server</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Unix</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Bug</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Solaris</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Unix</category>
            
            <pubDate>Tue, 07 Oct 2008 12:01:53 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F10%2Fsolaris-ptsocketselector-and-s.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/10/solaris-ptsocketselector-and-s.html</feedburner:origLink></item>
        
        <item>
            <title>AquaLogic:  Alive and Kicking</title>
            <description>&lt;p&gt;We just got back from OracleWorld last week, and wow!&amp;nbsp; That conference is unbelievably huge, but very well-organized.&amp;nbsp; We met a lot of current and past friends and colleagues out there, but a big part of our attendance was to get more insight into the future of the AquaLogic portal stack.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.function1.com/site/2008/06/the-fate-of-ali.html"&gt;Once again&lt;/a&gt;, Oracle reaffirmed 9 years worth of support for the AquaLogic line, but their commitment to keeping Aqualogic as the primary code base wasn't as strongly expressed.&amp;nbsp; As you may know, Oracle has the WebCenter Suite - of which ALUI (WebCenter User Interaction), will play a part.&amp;nbsp; But Oracle's portal and BEA's portal will also remain in this space.&amp;nbsp; The current plan is to take most of the existing integration products and portals and fit them together in a more standards-based suite of producers (Oracle Services) and consumers (portal products), so you'll be able to leverage all of the cool new services that Oracle is working on with any of these portals.&lt;/p&gt;
&lt;p&gt;They're also working on this thing called Oracle WebCenter Spaces, which is a fantastic-looking UI for creating "portals" with JDeveloper and Oracle's &lt;a href="http://en.wikipedia.org/wiki/Oracle_ADF"&gt;Application Developer Framework&lt;/a&gt;.&amp;nbsp; This thing was slick - we went to a lab where we created a rich mock-customer UI which integrated elements of Oracle's Content Management system (which'll replace Publisher) using JDeveloper and just dragging-and-dropping widgets onto a page and wiring the objects together with property pages.&amp;nbsp; The thing felt more like BEA's portal (which was more developer-focused) than AquaLogic's (more configuration than development), but it was still pretty impressive.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;We were told all of those rich components will be surfaced through the AquaLogic portal as well via WSRP, so in theory, ALUI customers aren't left out in the cold as these rich components are developed.&amp;nbsp; As Oracle fine-tunes the ultimate portal strategy, they're also developing these components as "WebCenter Services", which are basically standards-compliant portlets that will be available to all portals.&amp;nbsp; So we should be getting the best of all worlds - existing portals plus all the "generic" web services (like discussion groups/collab, and the new Enterprise 2.0 functionality).&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The big outstanding question, though, is whether WebCenter Spaces will become the de-facto "portal" that gets the most development effort from the Oracle Team on a go-forward basis.&amp;nbsp; Eventually these products will have to start consolidating, and time will tell whether that's nine years from now where each product has gradually started looking like the next anyway, or 2 years from now where more dramatic migration strategies will need to be put in place.&amp;nbsp; My take?&amp;nbsp; Either way, it's no big deal.&amp;nbsp; We Plumtree folks have had some pretty major upgrade/migrations to go through before, and we were always taken care of.&amp;nbsp; Remember how hard the 4.5WS -&amp;gt; 5.0 migration was?&amp;nbsp; Well, we haven't had a major game-changing upgrade since then (the 5 -&amp;gt; 6 upgrade was pretty clean, but was more evolutionary than revolutionary).&amp;nbsp; If Oracle does go with a big migration strategy from the ALUI code base to something else, I'd bet that the migration won't be as complicated as the 5.0 migration was, and the rich new set of functionality available will make it worthwhile.&lt;/p&gt;
&lt;p&gt;The important thing here is:&amp;nbsp; don't panic!&amp;nbsp; ALUI will be around and recognizable for a LONG time, and judging by what we saw at OracleWorld, there are lots of exciting new technologies just around the corner that will make it even more valuable.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/410686095" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/410686095/aqualogic-alive-and-kicking.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/10/aqualogic-alive-and-kicking.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">General</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Portal Server</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">AquaLogic</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Oracle</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">WebCenter</category>
            
            <pubDate>Fri, 03 Oct 2008 19:14:52 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F10%2Faqualogic-alive-and-kicking.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/10/aqualogic-alive-and-kicking.html</feedburner:origLink></item>
        
        <item>
            <title>Remotely Reboot Windows Servers</title>
            <description>&lt;p&gt;You may never need this one, but when and if you do, you'll be glad you've got this tip in your back pocket.&amp;nbsp; No doubt, you never actually sit in front of a console for your AquaLogic Servers; if you're on Windows, you're using &lt;a href="http://www.function1.com/site/2007/09/remote-desktop-tricks.html"&gt;Windows Remote Desktop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Occasionally, you need to reboot those servers, and you do it through the remote desktop.&amp;nbsp; But once in a blue moon (or more - it's happened to me on a half dozen machines at one client and 2 machines at another in the last month), you go to reboot and Remote Desktop never comes back.&amp;nbsp; Typically, this is because Windows has started shutting down and killing windows processes - including Terminal Services.&amp;nbsp; But for whatever reason, Windows doesn't reboot, and Remote Desktop is no longer available because the process is gone and isn't restarted.&lt;/p&gt;
&lt;p&gt;The solution:&amp;nbsp; remotely force the box to reboot again.&amp;nbsp; Simply run:&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;shutdown /r /f /m \\servername&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;... from any of the machines in the subnet. You're telling the OS to force (/f) a reboot (/r) on a remote machine (/m). Works every time the OS is available but the Terminal Service is dead - check out the &lt;a href="http://technet.microsoft.com/en-us/library/cc732503.aspx" target="_new"&gt;MS article&lt;/a&gt; for more info on this command. &lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/408848119" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/408848119/remotely-reboot-windows-server.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/10/remotely-reboot-windows-server.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Operating Systems</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">RDP</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Reboot</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Remote Desktop</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Windows Server 2003</category>
            
            <pubDate>Wed, 01 Oct 2008 22:44:00 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F10%2Fremotely-reboot-windows-server.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/10/remotely-reboot-windows-server.html</feedburner:origLink></item>
        
        <item>
            <title>Beware the Security Propagation Bug(s)</title>
            <description>&lt;p&gt;We've &lt;a href="http://www.function1.com/site/2007/10/the-joys-of-security-propagati.html"&gt;warned you before about ACL propagation&lt;/a&gt; when you're changing the security in ALI.&amp;nbsp; Heck, we even &lt;a href="http://www.function1.com/site/products/lockdown.html"&gt;created a product&lt;/a&gt; to ease the pain of this important task.&amp;nbsp; Today's bug is about another issue with security propagation.&lt;/p&gt;
&lt;p&gt;Well, it's actually 2 bugs (maybe 3).&amp;nbsp; Let me explain:&lt;/p&gt;
&lt;p&gt;When you answer "yes" to that &lt;a href="http://www.function1.com/site/2007/10/the-joys-of-security-propagati.html"&gt;question about security propagation&lt;/a&gt;, a job is created.&amp;nbsp; Here's the problem:&amp;nbsp; the job is &lt;em&gt;run as the user who created the folder, not the user changing the security&lt;/em&gt;.&amp;nbsp; What if you later delete that user?&amp;nbsp; Well, bug #1: automation server is hosed.&amp;nbsp; You're going to get an error like this:&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;img class="mt-image-none" height="138" alt="failed-job.jpg" src="http://www.function1.com/site/2008/08/27/failed-job.jpg" width="744" /&gt;&lt;/p&gt;
&lt;p&gt;The Exception says "*** Job Operation #1 of 1 with ClassID 20 and ObjectID 898 cannot be run, probably because the operation has been deleted.", and the error's wrong (because it says "probably", I won't count this as a bug).&amp;nbsp; The real problem in this case is that the folder's OWNER has been deleted, not the operation itself.&lt;/p&gt;
&lt;p&gt;This gets me to Bug #2: when you delete a user, they're removed from all groups, but apparently they're not removed as OWNERS of any of the admin folder objects (and how could they?&amp;nbsp; What should they revert back to?).&amp;nbsp; Obviously, this is what causes the problem with automation server.&amp;nbsp; If this one was fixed somehow, bug #1 would become irrelevant.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Bug&amp;nbsp;#3 (this one I haven't confirmed yet, but is likely to exist given the testing and logs mentioned above): suppose Joe Content Manager creates an entire structure of folders.&amp;nbsp; Then Joe's boss decides he shouldn't be an admin for one of the child folders (say, an "Executive Committee" folder) and removes his access.&amp;nbsp; He changes the security and propagates it on that "Executive Committee" folder.&amp;nbsp; Later, he wants to add Mary Executive to have privileges to the folder.&amp;nbsp; He changes the ACL again and chooses to propagate.&amp;nbsp; Here's the rub:&amp;nbsp; because the job is run as Joe, and Joe no longer has access, the job fails, and Mary can not be added.&amp;nbsp; In fact, it's likely that Joe can't even be added back, so that ACL is completely frozen unless the admin goes through every object and re-adds Joe back (or changes the owner of the folders through the DB).&amp;nbsp; Have I mentioned &lt;a href="http://www.function1.com/site/products/lockdown.html"&gt;LockDown&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Anyway, want the SQL Scripts to fix the owners on the various folders?&amp;nbsp; Hit the jump.&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/405899190" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/405899190/beware-the-security-propagatio.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/09/beware-the-security-propagatio.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Automation Server</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Bug</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Portal Server</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALI</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Automation Server</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Bug</category>
            
            <pubDate>Sun, 28 Sep 2008 22:54:10 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F09%2Fbeware-the-security-propagatio.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/09/beware-the-security-propagatio.html</feedburner:origLink></item>
        
        <item>
            <title>Crazy Database Growth? Check your PTJOBLOGS table.</title>
            <description>&lt;p&gt;This is a little old-school, but still a very relevant tip.&amp;nbsp; This problem has been around for all of the ALI 6.x days (including 6.5), and if I remember correctly, even the Plumtree&amp;nbsp;5.x days.&amp;nbsp; Basically, the automation server logs its activity to the PTJOBLOGS table, and if you've got jobs that are logging in verbose or very frequently, this table can become HUGE:&amp;nbsp; I had a recent customer whose database had grown to over 80 GB because of this table.&lt;/p&gt;
&lt;p&gt;Basically, to prevent this table from growing astronomically big, make sure:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You don't have jobs that are running way too often (once a minute typically means a job is running - and logging - constantly)&lt;/li&gt;
&lt;li&gt;You don't have verbose logging for any jobs running in the portal, and&lt;/li&gt;
&lt;li&gt;That your portal configuration is set to only save a reasonable amount of job log data.&amp;nbsp; By default, the portal will keep around 60 days worth of logs, which is a pretty big number.&amp;nbsp; If you ask me, any job logs older than 7 days are worthless because jobs always run more than once a week.&amp;nbsp; But, of course, you're not asking me, so I'll just tell you how to change this setting and you can decide for yourself.&amp;nbsp; The configuration setting isn't available through the UI; instead you have to tweak the database.&amp;nbsp; Specifically, you have to update the PTSERVERCONFIG table in the ALI database with SETTINGID=15.&amp;nbsp; Set the value to whatever you think is appropriate based on your use of the job log:&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;
&lt;span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"&gt;&lt;img class="mt-image-none" height="90" alt="ptjoblogs.jpg" src="http://www.function1.com/site/2008/08/24/ptjoblogs.jpg" width="678" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Finally, what happens if you've already got a PTJOBLOGS table that contains 200 million rows?&amp;nbsp; Here's a tip that I got from our friend and client, Mike Jones at &lt;a href="http://www.medsolutions.com/" target="_new"&gt;MedSolutions, Inc&lt;/a&gt;.: if you run an amateur update like "&lt;strong&gt;delete * from ptjoblogs&lt;/strong&gt;", the update will take forever because all transactions will be logged.&amp;nbsp; If you run "&lt;strong&gt;truncate table ptjoblogs&lt;/strong&gt;", on the other hand, you're just dropping the table and don't have to wait ridiculous amounts of time for the update to happen (not to mention the amount of database log space you'd be consuming).&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/402963863" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/402963863/crazy-database-growth-check-yo.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/09/crazy-database-growth-check-yo.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Automation Server</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Portal Server</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALUI</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Automation Server</category>
            
            <pubDate>Thu, 25 Sep 2008 10:54:00 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F09%2Fcrazy-database-growth-check-yo.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/09/crazy-database-growth-check-yo.html</feedburner:origLink></item>
        
        <item>
            <title>ALI Collaboration 4.5 can email you if email is broken</title>
            <description>&lt;p&gt;Here's a little feature that some of you may find useful:&amp;nbsp; Collaboration Server 4.5 can send you an email if it can't connect to the new Notification Service.&amp;nbsp; For those of you that have countless problems with the old Notification Server that shipped with Collab 4.2 and earlier, this is a must-have feature.&lt;/p&gt;
&lt;p&gt;Just go to Administration: Select Utility...: Collaboration Administration: Collaboration Notification, and enable Health Monitoring:&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"&gt;&lt;img class="mt-image-none" height="281" alt="collab_notify2.jpg" src="http://www.function1.com/site/2008/08/24/collab_notify2.jpg" width="644" /&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It works, too (assuming your SMTP server doesn't require authentication for internal addresses).&amp;nbsp; Collab is even kind enough to mark the mail as "High importance":&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;p&gt;&lt;img class="mt-image-none" height="174" alt="collab_notify_email.jpg" src="http://www.function1.com/site/2008/08/24/collab_notify_email.jpg" width="500" /&gt;&lt;/p&gt;
&lt;p&gt;On the other hand, for those of you that don't appreciate this new little nugget of functionality, consider this irony:&amp;nbsp; Collaboration 4.5 uses email to tell you when email is broken.&amp;nbsp; Cosmic, man.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/400007241" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/400007241/ali-collaboration-45-can-email.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/09/ali-collaboration-45-can-email.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Collaboration</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Notification</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Collaboration</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Notification</category>
            
            <pubDate>Mon, 22 Sep 2008 13:06:00 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F09%2Fali-collaboration-45-can-email.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/09/ali-collaboration-45-can-email.html</feedburner:origLink></item>
        
        <item>
            <title>Set your Login Token for AquaLogic Notification Service</title>
            <description>&lt;p&gt;&lt;a href="http://www.function1.com/site/2008/08/collab_45_notification_rss_err.html"&gt;STILL&lt;/a&gt; working on Collab 4.5 RSS feeds...&amp;nbsp; Today's tip will either be completely useless to you, or save you a ton of time.&amp;nbsp; If you ever see the following error:&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;collab.server.administrator CNS.SECURITY com.bea.notification.security.SecurityManager&lt;br /&gt;Unable to authenticate user with token '1|1288135304|xarwmCj1FbIzv/Mo/yyd0tEjkgI='&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Don't bother looking at the Security And Directory Service (really, what's that thing for anyway?). The following screen shot explains it all:&lt;/p&gt;
&lt;p&gt;
&lt;span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"&gt;&lt;img class="mt-image-none" height="428" alt="notification_token.jpg" src="http://www.function1.com/site/2008/08/08/notification_token.jpg" width="505" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Open your portal database, query PTSERVERCONFIG ("select VALUE from PTSERVERCONFIG where SETTINGID=65"), and stick that value in the "Message authentication code seed value" field on the "Aqualogic Notification Service"/"Login Tokens" page.&lt;/p&gt;
&lt;p&gt;Maybe when I'm much less annoyed at this whole process I'll dig more into the SAML2 Token Type.&amp;nbsp; And that elusive "Security and Directory Service", which still seems to provide no more valuable service than being a &lt;a href="http://en.wikipedia.org/wiki/Red_herring_%28narrative%29" target="_new"&gt;red herring&lt;/a&gt; for bizarre portal issues.&amp;nbsp;&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/397748030" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/397748030/set-your-login-token-for-aqual.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/09/set-your-login-token-for-aqual.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Collaboration</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Notification</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALI 6.5</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Collaboration</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Notification</category>
            
            <pubDate>Fri, 19 Sep 2008 21:26:00 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F09%2Fset-your-login-token-for-aqual.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/09/set-your-login-token-for-aqual.html</feedburner:origLink></item>
        
        <item>
            <title>ALI 6.5 Configuration Manager</title>
            <description>&lt;p&gt;When I &lt;a href="http://www.function1.com/site/2008/03/ali-65-insider-part-ii-the-con.html"&gt;first introduced the Configuration Manager&lt;/a&gt;, I wondered aloud how it would work in a multi-system environment.&lt;/p&gt;
&lt;p&gt;Well, it turned out the the Configuration Manager isn't that complicated after all:&amp;nbsp; it's pretty much an interface for editing a configuration file on disk, so it does only apply to the system you're running it on.&lt;/p&gt;
&lt;p&gt;The file can be found at &lt;strong&gt;bea\alui\settings\configuration.xml&lt;/strong&gt;, and can be edited directly as easily as you would through the Configuration Manager interface (with the exception of passwords, which are encrypted):&lt;/p&gt;
&lt;p&gt;
&lt;span class="mt-enclosure mt-enclosure-image" style="DISPLAY: inline"&gt;&lt;img class="mt-image-none" height="450" alt="" src="http://www.function1.com/site/2008/08/08/config_mgr.jpg" width="587" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://rss.function1.com/~r/AqualogicBlog/~4/394153588" height="1" width="1"/&gt;</description>
            <link>http://rss.function1.com/~r/AqualogicBlog/~3/394153588/ali-65-configuration-manager.html</link>
            <guid isPermaLink="false">http://www.function1.com/site/2008/09/ali-65-configuration-manager.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Portal Server</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALI 6.5</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Configuration Manager</category>
            
            <pubDate>Tue, 16 Sep 2008 07:50:00 -0500</pubDate>
        <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetItemData?uri=AqualogicBlog&amp;itemurl=http%3A%2F%2Fwww.function1.com%2Fsite%2F2008%2F09%2Fali-65-configuration-manager.html</feedburner:awareness><feedburner:origLink>http://www.function1.com/site/2008/09/ali-65-configuration-manager.html</feedburner:origLink></item>
        
    <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetFeedData?uri=AqualogicBlog</feedburner:awareness></channel>
</rss>
