Categories
bdg dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Bringing Web 2.0 to the en.terpri.se

First, let me establish one thing: I don’t work for BEA. Since leaving Plumtree more than four years ago, neither Plumtree nor BEA has paid me a dime. They don’t pay me to write in this blog. They’re not paying me to speak at BEA Participate in May. Although we have a subcontract agreement in place, we have never actually subcontracted through Plumtree nor through BEA. You get the point: what I write here (or anywhere, for that matter) is not endorsed or sanctioned in any way by BEA.

The beauty of that is that I can be BEA’s sharpest critic or their most outspoken advocate. Today, I come to you, dear readers, as the latter.

I am here to tell you that I think the latest marketing positioning to come from BID — in the most apropos form of a “rogue” web site called en.terpri.se — is perhaps the finest writing I have yet to read on the topic of bringing Web 2.0 to the enterprise.

This concept — which many of you already know as “Enterprise 2.0” — is not a new one. But just as consumer portals were not new in 1997, they were at that time very new to the enterprise. And today blogs, wikis, tagging and other social software have already infiltrated the consumer internet. But, as we have been saying since early this year and as others have been saying for a while now, these concepts are only being embraced by the early adopters in corporate/enterprise computing.

But with projects Builder (Holland), Runner and Graffiti (now known as Pages, Ensemble and Pathways, respectively) nearing general availability, all of that is about to change. If you want to find out exactly how, I encourage you to read and digest all of en.terpri.se and its more traditionally-branded counterpart, www.bea.com/enterprise.

Just as Plumtree took the world of enterprise computing by storm by introducing the concept of the corporate portal, BEA is about to re-revolutionize the enterprise by injecting it with a strong dose of Web 2.0.

I won’t rehash what they’ve already spelled out so concisely and intelligently on en.terpri.se; instead, I’ll give you my own take on the products based on what I’ve read there.

Pages (formerly known as Project Builder or Holland)

To call Pages a powerful blogging and wiki tool for the enterprise doesn’t really do it justice because it is, well, so much more than that. Imagine if you could use point-and-click/drag-and-drop tools to mash up structured data (RDF/RSS, the output of a SOAP-based web service, or the result of a SQL query) with unstructured, end-user maintainable, version-controlled wiki-like content — now you’re scratching the surface.

For those of you already familiar with AquaLogic products, think of how amazing Studio would be if it were somehow married to Publisher (we used to call this “Contudio” before it actually existed) and if Studio could tap into existing resources and then somehow weave published content into the resulting user interface output. Now put all this in the hands of the end-user (to give it that Web 2.0 magic), add a sprinkle of security/governance, auditing and enterprise administration and you’ve got Pages.

Ensemble (formerly known as Project Runner)

This may not be the best way to envision Ensemble, but it works for me: imagine taking all the tasty bits that Pages gives you, but put it in the hands of IT and developers. Instead of dragging-and-dropping, a developer can embed a runner Pagelet XML tag into his or her legacy (or newfangled long-tail/rogue) application, then proxy the application through the runner “gateway” and, out of nowhere, the application can have, say, a collaboration discussion or wiki page embedded in it.

Not to mention that other enterprise services such as security, SSO and auditing, can be mixed into the application just because it’s running in the Ensemble gateway. With this incredible new product, pretty much anything is possible because it gives developers the tools to provide secure, scalable, audit-able and maintainable mashups of just about anything in the enterprise or consumer web.

Pathways (formerly known as Project Graffiti)

Calling Pathways a next-generation Knowledge Directory may be an easy way to conceptualize it, but again it really doesn’t do it justice. Unlike the top-down, “mother knows best” taxonomies of the past, Pathways puts the power to categorize corporate knowledge in the hands of the knowledge consumer. Like del.icio.us and digg, Pathways is BEA’s recognition of the “many is smarter than any” principle. Unlike its consumer web counterparts, Pathways uses a page-ranking system that’s based on a whole slew of factors, including not just how or how much an entry is tagged, but also how “respected” the tagger is in terms of other entries he or she has tagged. Like the KD of the past, Pathways can import content from file shares, e-mail/groupware systems and even from Sharepoint (gasp) — think CWSs — but very much unlike the KD of the past, control over the taxonomy and how well entries get ranked in search is ceded to the end-user, where many argue it belongs.

Needless to say, I’m very exited about these new product initiatives for many reasons, not the least of which being that I’ve bet my entire company’s future on their success. So maybe I am a little biased. That being said, I’m not here to tell you that BEA invented Web 2.0 or even Enterprise 2.0. However, I am saying that — based on what I’ve experienced over the past ten years that I’ve been pushing the enterprise computing envelope — BEA is poised to execute on the Enterprise 2.0 reality better than any other company right now.

Mark my words: you will watch Pages, Ensemble and Pathways implementations spring up throughout the Fortune-whatever just as quickly as you saw enterprise portals replace intranets in the late 90s.

Better yet, in the spirit of Enterprise and Web 2.0, rather than watching this happen, let’s participate in it.

Comments

Comments are listed in date ascending order (oldest first) | Post Comment

  • Are these products built with partners or reskinned? Is that the reason why this isn’t this on dev2dev? How long has this been on?

    Posted by: logicuser on April 1, 2007 at 1:53 PM

  • I’m not sure I fully understand your questions, but I think I can comment on them a bit. First off, the products are being built by BID’s core engineering team — many of the same folks who brought you ALUI, ALI Publisher, ALI Collaboration, ALI Studio, etc. I don’t know what you mean by “reskinned” but these products are all new initiatives, although they undoubtedly leverage the experience the BID folks have garnered over the past 10 years they’ve spent building enterprise portals and other enterprise software.To answer your last question, the marketing documents and web site were only released last week to the public. I think you should expect to see GA for these products some time this summer, but don’t quote me on that — remember, I don’t work for BEA.As for this stuff not being on dev2dev, well, with my blog post, now it is! There’s also a lot of the same info located at www.bea.com/enterprise with more traditional BEA branding. I’m sure you’ll be seeing more on dev2dev soon.

    Posted by: bucchere on April 1, 2007 at 3:48 PM

  • These products have all been organically developed at BEA. In some cases we have leveraged our existing capabilities and technologies (i.e. our experiences with our search product informed our decisions with the new Pathways product), and in the end these are new products built by BEA.The http://en.terpri.se micro-site was launched last week, and it is meant to provide a Web 2.0 and Social Computing resource that will grow over time. We will have the blogs on dev2dev and en.terpri.se refer to each other as appropriate.And, of course the same base product information was also made available concurrently last week at http://www.bea.com/enterprise.

    Cheers,

    Shane Pearson

    BEA Systems, Inc.

    VP, Marketing and Product Management

    Posted by: spearson on April 3, 2007 at 1:40 PM

Categories
bdg dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Four ALI IDKs at your Disposal — Fifth One on the Way?

As most of you already know, there are four IDKs out there in IDK-land. To take a step back, if you’re really new to ALUI (formerly Plumtree) development, you can read about how ALUI handles portlets and how an IDK helps you write portlets. So, back to the four IDKs. They are all freely-downloadable from BEA — I’ve included links here:

*These two IDKs were written by developers at bdg and then released to the open source community on dev2dev’s CodeShare.

edocs warns you in boldface type: always use the IDK. That’s sound advice, given that the IDK API isolates you, as a portlet developer, from changes to the underlying protocol that ALUI uses to communicate between the portal and portlets (CSP). However, what if you’re not writing a portlet in Java, .NET, Ruby or PHP? As an aside, once upon a time, there were Perl and ColdFusion GDKs (predecessor to the EDK/IDK), but these development kits are no longer maintained by anyone, although I know for a fact that the ColdFusion GDK is still in use by an ALUI customer because it came up during a sales call!

So, back to my “what if” question: how can you write a portlet without an IDK? It’s actually not too hard if you’re just getting information from the portal. However, it gets challenging when you start setting preferences and then it starts to get really painful when you start dealing with Unicode issues, encrypted settings and some of the other really hairy stuff. So that’s why edocs implores you to use an IDK, when one is available.

If you do go down the road of writing a portlet in a language where an IDK isn’t available, I highly recommend that you at least abstract out your CSP calls such that they’re isolated from the rest of your portlet code. While you’re at it, you might as well follow the same API that BEA uses; in other words, write your own IDK (or at least the parts of it that you need to get your portlet done). To get you started, here’s how BEA probably implemented one of the IDK methods in Java:

public AggregationMode getAggregationMode() {
  if (!request.isGatewayed()) {
    throw new NotGatewayedException("Request not gatewayed.");
  }
  
  if (request.getHeader("CSP-Aggregation-Mode").equals("Multiple"))
    return AggregationMode.Multiple;
  } else {
    return AggregationMode.Single;
  }
}

So, go forth and write your own IDK. Or, preferably, ask a bdg-er to write one for you!

On a related note, one of our customers recently asked us to build an IDK for Lotus Notes/Domino in LotusScript. We’re trying to figure out if other people might be interested in this IDK so that we can decide if we’re going to open source it or do it as a consulting project (or some hybrid of the two). If you are interested in LN/Domino development for ALUI, let us know by commenting on this blog. I always love hearing feedback from users of the PHP and Ruby IDKs as well.

Comments

Comments are listed in date ascending order (oldest first)

  • Hi Chris. We have a couple of remote portlets on web servers running Perl so I looked around for awhile for the original Perl IDK but couldn’t locate it, so I’ve written a Perl module that supports the methods provided by IPortletRequest. They’re read-only methods but are really all we needed access to. man-page is here…
    http://webdev.co.nz/Perl/IPortletRequest.txt Is this worth placing in codeshare do you reckon? I don’t see a lot of action in the forums concerning Perl use.

    Dean Stringer ([email protected])

    Posted by: deeknow on March 22, 2007 at 2:00 PM

  • Hello Dean! The original Perl GDK was written so long ago that I’m not sure how much good it would do. It was based on CSP 1.0 and it followed the old GSServices API rather than the new com.plumtree.remote.portlet API.

    I’m pretty stoked to find out that someone else has written at least part of an IDK — that’s impressive. Do I think it’s worth posting to CodeShare? I haven’t heard much talk about ALUI and Perl, but I guess it can’t hurt.

    Posted by: bucchere on March 22, 2007 at 5:03 PM

  • Hi, Chris. We would love to have a Lotus Notes/Domino IDK available to us, as we have lots of “legacy” applications in Domino that we want to expose in ALUI, and an IDK would certainly help! Just my nickel’s worth… 🙂

    Posted by: kcepull on March 30, 2007 at 11:21 AM

  • Thanks for your comment. If you don’t mind my asking, would you be willing to pay for such a thing or is it only a nice-to-have that you would download and use if it were opensource, but not pay for it if it were a commercial product?

    Posted by: bucchere on March 31, 2007 at 6:07 PM

Categories
bdg dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

ALI G6 on Ubuntu?

Some of you may be familiar with my rants on the bdg blog about how Linux just isn’t ready for the desktop. My opinion on that matter has largely changed with the release of Ubuntu 6.06 LTS (Dapper Drake), which I have been running with minimal hassle on my newish Gateway MP6954 laptop since last summer. It has a tasty coffee-colored UI (mmm), it NEVER crashes, it basically takes care of itself with updates and has equivalent — or better — software for pretty much everything you’d ever want to do with Windows or OSX at a great price: free.

Of course ALUI is only officially supported on two Linux plaforms: RHEL and Suse. But Linux is Linux, right? Well, sort of. I had all sorts of “fun” getting ALUI running on Oracle on Fedora. However, with Ubuntu, getting Oracle and ALUI up was a breeze.

First off, unless you call yourself a DBA, you don’t want to mess around with a full-blown Oracle instance. Instead, just follow these easy steps to install something called Oracle XE. It has certain limitations — the most important of which is that you can’t create more than one database.

My first — and really my only — mistake during this setup process came next (and it’s related to this one-database issue). I tried to drop the XE default database (ORACLE_SID=XE) and run the crdb1_oracle_unix.sql script to create the PLUM10 database. This was a bad idea. I poked around on Google a bit and then thought, well, I don’t really need my own database. (Had I had this epiphany before starting down that path, I could have saved two hours and had ALUI up and running on Ubuntu in fewer than 30 minutes.) So, instead of running crdb1_oracle_unix.sql, just edit create_tables_oracle.sql and remove any reference to PLUMINDEX, then run the following commands on the XE database:

$sqlplus sys as sysdba
SQL>create user plumtree identified by password
SQL>grant connect, resource, create view to plumtree

This creates the plumtree user on the XE database, which gives ALUI its own schema, which, for our purposes, is just as good as having your own DB. Now you can basically just run the out-of-the-box scripts (keeping in mind the changes I made to create_tables_oracle.sql):

$sqlplus plumtree/password@XE
SQL>@create_tables_oracle.sql
SQL>@load_seed_info_oracle.sql
SQL>@stored_procs_oracle.sql
SQL>@postinst_oracle.sql

At this point, ALUI was ready to rock. I only ran into one small snag. One of the native search libraries complained about a missing LD_LIBRARY_PATH dependency on libstdc++. This was not a showstopper. I did the following:

$ln -s /usr/lib/libstdc++.so.6.0.7 /usr/lib/libstdc++-libc6.1-1.so.2

From there I configured the bundled tomcat to host the portal and the imageserver and viola, ALUI 6.0SP1, in all its glory, was up and running on Ubuntu. (BTW, I would have used ALUI 6.1.0.1, but when I wrote this article, the RHEL and Suse versions weren’t available yet.)

Comments

Comments are listed in date ascending order (oldest first)

  • I’ve also successfully installed ALUI 6.1.1 (6.1MP1) on Ubuntu 7.04 (Server). Required one workaround for the LAX installer shared libraries problem (can’t find libc.so.6 etc):
    $cp AquaLogicInteraction_v6-1_MP1 AquaLogicInteraction_v6-1_MP1.bak
    $cat AquaLogicInteraction_v6-1_MP1.bak | sed "s/export LD_ASSUME_KERNEL/#xport LD_ASSUME_KERNEL/" > AquaLogicInteraction_v6-1_MP1

    Posted by: rdouglas on May 7, 2007 at 10:45 AM

  • hey Chris, appreciate the post! just wanted to give the hint that to change the plumindex on the create_tables script, you can do this in vi: :1,$s/PLUMINDEX/USERS/g

    Posted by: jbell on June 2, 2007 at 8:57 PM

  • Chris, nice post…I referenced this post while trying to get the new ALUI 6.1 quickstart installer to correctly intall the portal on windows xp. I’ve tried the installer on several xp machines but it is still failing…i think the error has to do with the way the installer is setting up the paths/environmental variables – when i run the diagnostics tool i get an invalid entry point…my paths look correct and i’ve tried re-installing multiple times on multiple machines…any ideas? Thanks.

    Posted by: phil- on September 10, 2007 at 8:41 AM

  • Well, after some troubleshooting I figured it out…here is the solution…I hope this is helpful to someone in the future…I needed to rename the icuuc30.dll in C:WINXPsystem32 to icuuc30_from_system32.dll and paste the icuuc30.dll from C:beaaluicommoninxight3.7.6binnative into the C:WINXPsystem32 directory before the installation would work.

    I did try just moving the INXIGHT_PATH variable so that it is loaded on the PATH before the C:WINXPsystem32 but the error still occured. BTW – icuuc30.dll is a component for Unicode version 3.0

    Posted by: phil- on September 12, 2007 at 11:47 AM

  • Thank you so much for this post, I had the same problem on XP. I’m just curious, how were you able to debug this problem? What pointed you to icuuc30.dll?

    Posted by: fhkoetje on December 4, 2007 at 9:31 AM

Categories
bdg dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Portals and SOA: Portals in a Service-Oriented Architecture

I’ve been invited to give the following talk at BEA Participate:

Why is a Service-Oriented Architecture important to an IT infrastructure and what are the elements and products needed to build out an SOA? These questions answered, plus a discussion on how portals are the practical starting point to leveraging SOA.

Quite honestly, the title and abstract make it sound like an invitation to engage in a lively game of buzzword bingo, but I assure you this talk will be light on the trite — you won’t hear me use the acronym SOA more than once or twice — and heavy on the real deal, rubber-meets-the-road stuff about how mere mortals/human beings are actually accomplishing the sort of things that SOA evangelists are preaching these days.

So, here’s what you can expect: I’ll talk a bit about some of the challenges of building integrated user experiences in today’s enormously complex and heterogeneous IT environment and show how a software developer — without superpowers — can piece together an integrated true-to-the-principals-of-SOA application using ALUI, ALDSP (Data Services Platform) and ALESB (Enterprise Service Bus). This will culminate in an actual, real-life demo.

I will of course make sure to sacrifice a chicken to the Almighty Goddess of Demos or do whatever else I have to do to make sure my demo doesn’t crash. Scratch that, I’ll just run it on Linux and everything will be fine.

So, all joking aside, if you have any ideas for items you’d like me to include in (or exclude from) my talk, please post your comments here. I’ll be sure to give anyone who makes a good suggestion a “shout out” during my presentation. They’re actually giving me a whole hour this time, so they’ll be room for plenty of tomfoolery, geekspeak, silly anecdotes and still time to answer your insightful questions at the end. As one of my good friends and business partners said following my talk at last year’s BEA World,

you never know what to expect during one of [Chris Bucchere’s] talks.

I’m not sure exactly what he meant, but of course I took it as a compliment.

In closing, while we’re on the subject of BEA Participate, I just wanted to say thanks to Christine “Obi” Wan for giving me the opportunity to present and, more importantly, for putting together such a great-looking agenda, which you can review if you like, because now it’s posted on the BEA Participate site.

In the meantime, do your best to convince the powers that be at your company/organization that they will finally discover the secret to “leveraging SOA” if they send you to this conference. Also, please don’t mention that every past Odyssey has had several open bars.

Comments

Comments are listed in date ascending order (oldest first)

  • Working with Aqualogic we all know how it’s easy to plug in our portlet into Aqualogic. We don’t need Aqualogic portal running on our own computer to do this, we don’t need special IDE, we don’t need upload wars into portal. It took time to explain this to my experience J2EE collegaes that got some experience with IBM Websphere. Here what they do there:
    http://www-128.ibm.com/developerworks/websphere/techjournal/0410_barcia/0410_barcia.html
    A lot of steps pretty much the some but have a look at step 11. Here is the core difference. So at least one benifit of SOA is that we don’t need to do step 11.

    Posted by: Bryazgin on April 13, 2007 at 7:03 AM

  • >Quite honestly, the title and abstract make it sound like an >invitation to engage in a lively game of buzzword bingo True, I have the some issue. In my article (for russian development network) I want to stress SOA architecture of Aqualogic, but I don’t want to use SOA word. Audience is pretty techical so they all pretty much feed up of this word. Hmm, may be I will end up with this:
    Avoid nightmare of step number eleven !
    At least, “what the hell this guy talking about?” will be more predict reaction. 🙂

    Posted by: Bryazgin on April 13, 2007 at 7:25 AM

  • Hi Dmitri! Thanks for your insightful comments.As I’m building the demo for my talk, I’ve noticed that these SOA tools encourage you to loosely-couple everything. And that’s a good thing. As you pointed out, ALUI fits into this nicely with its loosely-coupled portlet architecture. The evil “Step 11” (too bad it wasn’t “Step 13”) is: “Select the Browse button and navigate to the WAR file for your portlet, then select Next (Figure 17).” Step 11 has some pretty awful implications for the enterprise. First off, it assumes that everything is Java, which, as much as I love Java, is just wrong wrong wrong in the heterogeneous enterprise. Secondly, it tightly couples your portlets to your portal, which is contrary to SOA.As an aside, I was listening to some Web 2.0 podcasts in the car the other day, and this guy who worked on Google Maps talked about “seams” in an architecture. To paraphrase, he basically said that everyone misuses the word “seamless.” Seams, just like in the textile industry, are critical to enterprise architecture. Just as seams hold swaths of fabric together and separate one bit of fabric from another, they also help define boundaries in the enterprise architecture that are equally critical to SOA. Without seams, everything must be homogeneous — applications must be bought from the same vendor, run on the same OS, be written in the same language, etc. — and this is completely contrary to the reality of enterprise software and systems and completely anti-SOA.

    To illustrate how not being “seamless” is actually a good thing, I’ve designed a demo system that involves bits of LAMP (Linux Apache MySQL PHP), bits of Java, bits of .NET and bits of Adobe Flash all held together with seams built with ALDSP, ALESB and ALUI. I’m still working on the technical side of things, but the use case is simple: a sales rep wants to quote his customer. Behind the scenes, his company is running a LAMP CRM server, a Flash/SQLServer product database, a .NET portal, and a Java-based Collaboration Server. Using a hybrid of ALDSP, ALESB and Java and .NET web services, the user experience is easy and seamless, but behind the scenes, it’s the powerful seams supported by ALDSP and ALESB that make this not only possible, but fairly straightforward.

    If you’re interested in hearing more, register for BEA Participate and [shameless plug]come to my talk[/shameless plug]! By the way, I’m co-presenting with Joseph Stanko, the BEA Engineering Manager responsible for the development of Ensemble (formerly known as Project Runner) — he will run several slides to help you understand the theory behind SOA and I will show the reality of how the AquaLogic stack truly enables SOA in the enterprise.

    Posted by: bucchere on April 14, 2007 at 6:07 AM

  • Alas, I’ve finally finished my demo. I had some configuration issues with ALSB, but ultimately they boiled down to the interface between the keyboard and the chair, i.e. human error. I had the proxy service calling the business service, which, in turn, called the proxy service again. You should have seen the utter wasteland this little tidbit of mutual recursion made of my machine. Actually, I was impressed — Java would spit out a JVM_Bind error once it exceeded some internal maximum, but ALSB (running on WLS 9.2) would actually keep running. Nice.Anyway, now that I’m past all that, I have an ALDSP layer over two disparate data sources (one MySQL DB containing CRM info and one HSQL DB containing product info) exposing data through netui/beehive to a single ALI portlet. (The nifty little portlet uses script.aculo.us to show an interesting new take on the age-old concept of master-detail.) I also included an Adobe Flex-driven portlet. The two portlets use some client-side IPC (inter-portlet communication) to exchange info and then they call a proxy service on ALSB that takes info from both sources and creates a Word document (in the form of a sales quote). The business service also uploads this document to ALI Collaboration so that people can work on it collaboratively before sending it to the customer. (I may replace this last little bit with a .NET web service, just to show that Java and .NET are both acceptable alternatives for writing the “glue” or “seams” in a true service-oriented architecture.)Lastly, the event coordinators have locked in a time slot for us: Monday, May 7th at 4:30 PM in the Technical/Developer Track.

    If you’re “participating” it would great to see you at our talk or at the bdg booth. This year we have a cool — yet practical — giveway that will definitely brighten your day. Looking forward to the conference!

    Posted by: bucchere on April 22, 2007 at 7:52 PM

Categories
bdg dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

BEA Participate

A quiet little announcement was made last week: BEA plans to host an ALUI (formerly Plumtree) and ALBPM (formerly Fuego) user conference! Suprisingly, I don’t see any references on BEA’s web site, on dev2dev or really anywhere else about it, so I thought I would take a minute to promote the conference here.

Could this be a response to some customer and integrator concerns that there weren’t enough AL* breakout sessions at BEA World 2006? Possibly. Could this be the final nail in the coffin that was once called the “Unified Portal Roadmap.” I’m not sure.

Regardless, you can bet that I’ll be there along with several other folks from bdg. Stayed tuned for more information here about how we’ll be involved as an event sponsor, exhibitor and perhaps even as a presenter. I expect that we’ll have a lot of fun, share a great deal of what we know about ALUI and learn a great deal more from ALUI customers and other BEA partners.

The full extent of the information that currently exists about this conference can be found at http://www.bea.com/participate. We’ll be watching that space for more info and also posting several more times about our specific role in the conference. I suggest you do the same.

One obvious question any customer or partner should ask is: if I’m getting my budget together for 2007 conferences, should I attend BEA World or BEA Participate? If you’re a current ALUI or ALBPM customer, it’s a no brainer: attend BEA Participate. But what if you’re a prospect who is considering a portal or SOA solution from BEA? If you can afford it, I would say attend both!

Comments

Comments are listed in date ascending order (oldest first)

  • Now I’m officially confused. Very weird that these are separate unless they’re using BEA World as a venue for “technical building blocks” and “Participate” to sell business collaboration / process solutions – that’s the only way I can see this.

    I have to be careful how I word this, so if the tone comes across in any way negative, well… that’s not my intention. IMO I would not attend BEA World again if it’s a repeat of last year’s.

    I loved Odyssey – it was well organized, had _great_ sessions targeted toward user education and productivity, and was all about the customer – sharing best practices, discussing common problems, and engaging in one-on-one w/ engineers and product managers. Sessions were focused on empowering the customer and making sure they were just a bit better at their jobs when they left. It was always worthwhile and our entire team (repeatedly) came away saying “glad we went.” Awesome stuff all around and did a lot to let the customers sell the solutions to other customers (always a better way to go).

    In attending BEA World last year I got the constant nagging sensation that it was a big (overt) sales conference and not really about the user and how to better utilize tools. ALUI was barely even on the map (which really bothers me). I didn’t have the sense that my needs were being addressed as much as in previous years and I really didn’t come away with anything “tangible” I could take back to justify the fee. The customer keynotes were cool, but beyond that we struggled to find value.

    Doing something with a “Participate” focus thing is a _great_ idea on the part of BEA if it’s about targeting the customer and helping understand how to succeed with the tools (and make friends along the way ;). Keywords: using the tools to succeed in business. That, IMO, was always the point to me in attending.

    Obi-wan – hear me. This should really be incorporated into BEA World for the benefit of your current and prospective customers. It will really boost the value of BEA World and do something to hammer home the fact that BEA and Plumtree are one company with one comprehensive suite (something Jay Simons’ web conference last year did a great job of explaining). Separating things like this … well… I get it, but it does imply a continued level of separation that customers expressed concern with last year.

    That said – and I sincerely hope that didn’t come across as negative – I’m excited to see what 2007 brings for the new products. Seeing a bit of what they’re cooking up, it’s nice to users finally getting past a lot of the geekware bits and into things they can build and use w/o IT bottlenecks. Very cool. Buy three 🙂

    Posted by: ewwhitley on February 12, 2007 at 7:28 AM

  • It’s not Obi-wan here, but Christine Wan and we’re definitely listening! BEA organized Participate to directly address the needs of business and IT users working with ALUI and ALBPM products. This is very much a forum for customers to gather and share best practices, to go deep with product managers and engineers and to hear the latest on new product developments.

    And it is an important complement to BEAWorld, providing much richer detail on these two specific product lines and more focus on bringing these specific users together in a forum where they can share experiences and ideas. The announcement last week was just a Save-the-Date. Stayed tuned, you’ll see a lot more information to come on the bea.com homepage and bea.com/participate.

    Posted by: cwan on February 12, 2007 at 2:09 PM

  • Hi, Christine 🙂 Very cool – I’m glad to hear this. We loved the “interactive” and focused nature of the Odyssey sessions. You guys did such a good job on that I think we just kinda got spoiled and expected something on that order for BEA World last year. That’s what happens when you make us too happy year after year 😉

    Posted by: ewwhitley on February 12, 2007 at 7:51 PM

  • I know that many customers I spoke with during and after BEAWorld echoed the same sentiment of being “underwhelmed” simply from being spoiled by Odysseys past. Along those same lines, an Advanced Developer Conference either as part of Particpate, an extension to it or separate from it would be awesome as well. I know that may be hard to do as part of this initial effort but it would be great at some point. We are definitely excited about it and all of this just builds anticipation until May.

    Posted by: kurtanderson on February 15, 2007 at 10:05 PM

Categories
bdg dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

WLP + Adrenaline = ALI?

I recall sitting in a meeting in 1998 where we were discussing how to aggregate portlet content into a portal page. We talked a lot about iframes but couldn’t consider them as a serious integration option because of security, scalability/performance, caching and portal-to-portlet communication. Instead, we spent the next year building and testing the HTTPGadgetProvider, which later came to be called the “(Massively) Parallel Portal Engine.” (The term “Massively” was later dropped and I believe the name “Parallel Portal Engine” or PPE for short finally stuck.) I won’t go into details about how the PPE works, but if you’re interested, you can check out this great page in edocs that sums it up nicely.

So anyway, iframes are certainly reasonble way to build a portal in a day. But, in terms of building a robust enterprise portal that can actually withstand the demands of more than say, ten users, and that will pass even the most rudimentary security evaluation, iframes are complete nonsense.

So, today, during my lunch break, I attended Peter Laird’s Webinar, which he advertised in his nascent blog. It was all about enterprise mashups, a topic by which I’m very much intrigued. (Recall that PTMingle, my winning entry in the 2005 Plumtree Odyssey “Booth of Pain” coding competition was a mashup between Hypergraph, Google Maps, del.icio.us and Plumtree User Profiling.)

Imagine my surprise when Peter described how you can mash up Google “Gadgets” and other resources available via URLs using Adrenaline, a “new” technology from the WLP team based on, of all things, iframes. It was like entering a worm hole and being transported back to 1998. (I was single again, I had no kids, I was thinner and I had more hair on my head . . . and less on my back.) But the weird thing about this parallel universe is that BEA engineers were telling me that iframes were a great way to mashup enterprise web content and that intranets all over the world could benefit from this revolutionary concept. Intranets? You mean the things that everybody replaced with portals in the last millennium? Iframes? I must have been dreaming . . . .

When I finally came back to my senses, a few things occurred to me.

First of all, it’s 2007. Portals are a thing of the past. For some of us, that will be a hard pill to swallow. But let’s face it, innovators have moved on to blogging, wikis, tagging/folksonomies and lots of other nice web 2.0 sites that all have rounded corners. The bleeding edge folks have decided that many is smarter than any. The rest of the world will catch up soon.

Secondly, if you are still building a portal or composite application of any flavor, iframes are not a viable solution. They fall short in the following ways:

Portal-to-Portlet Communication

Say you want to send information (like the name of the current user) down to a portlet running in an iframe. Hmmm, the request for an iframe comes from the browser, not from the portal. So, if anything needs to be passed into the iframe, I guess you have to put in in the URL in the request for the iframe. That’s great, but that URL is now visible in the page’s source. So a simple, “Hello [your name]” portlet where the portlet gets the name from the portal is doable. But what about passing a password? That information would need to go first to the browser and then back to the remote tier, which, from a security standpoint, is a complete showstopper.

Security

Let’s talk a little more about security. Since you’re using an iframe, the requests aren’t proxied by the portal. Instead, a page of HTML gets sent from the portal to the browser and then the browser turns around and makes requests to all the iframes on that page. Since the portal isn’t serving as a proxy, it can’t control what you do and don’t have rights to see, so security is completely thrown out of the window. (Or should I say, thrown out of the iframe?) Moreover, in an enterprise deployment, the portal usually sits in the DMZ and proxies requests out to bits and pieces of internal systems in order to surface them for extranet users. If you’re using iframes, every bit of content needs to be visible from an end user’s browser. So what’s to stop an end-user from scraping the URL out of a portal page and hitting a portlet directly? Nothing! (If I understand what I’m reading correctly, the WLP team is calling this a feature. I would call it a severe security risk.)

Scalability/Performance

Yes, this approach will work for Google Gadgets. But Google has more money than pretty much everyone. They can afford to spend frivolously on anything, including hardware. However, the rest of the world actually cares about the kind of load you put on a system when you create a “mashup.” A page consisting of five iframes is like five users hitting the sites with five separate requests, separate sessions and separate little “browsers.” If any of the iframes forces a full-page refresh or if the user does the unthinkable and say, moves to another page, every request is reissued and the mashup content is regenerated. This simply does not scale beyond a few users, unless you have as much money and as much hardware as Google does.

Caching

A properly designed portal or content aggregation engine will only issue requests to portlets when necessary. In other words, each remote portlet will only get a request if it needs to be loaded because the portal doesn’t have a cached entry. Unfortunately, you can’t do this with iframes because the portal doesn’t even know they exist. (Remember, all requests for iframe content go directly from the browser to the remote content, bypassing the portal entirely.)

What baffles me is why a company would acquire another company with a revolutionary technology (the PPE) and then start from ground zero and build a technology that does the same thing but without a portal-to-portlet communication model (preferences), security, scalability or caching. If consumers weren’t already confused, now they most certainly are.

As technologists, I hope you can see through the hype about Adrenaline and consider a product that actually allows you to mash up web content in a scalable and secure way and has been doing so since 1999. It’s called AquaLogic Interaction and it’s sold by a company we all know and love called BEA.

Comments

Comments are listed in date ascending order (oldest first)

  • I just discovered that the BID/AquaLogic (formerly Plumtree, Fuego, Flashline, etc.) folks are having another webinar, entitled “Harnessing Enterprise Mash-ups with Security and Control.” This webinar (I hope) will show:
    1. how ALI has been handling mashups since before mashups was even a buzzword and
    2. how Project Runner enables next generation mashups that allow you to invoke back-end applications and provision security, branding, SSO, etc. without actually funneling everything through the portal.

    If you were at today’s webinar and you’re now wondering how to do mashups with more robustness and security, then I hope you’ll attend this webinar. By all means, it’s just the responsible thing to do in order to offer customers different integration options when creating their mashups.

    Posted by: bucchere on January 10, 2007 at 7:31 PM

  • I’d like to add a couple points of clarity from BID product management. First of all, we’re happy to have passionate developers, but I fear this post may give the wrong impression about some of BEA’s technology and plans.

    WLP Adrenaline, ALUI, and project Runner are all complementary technologies that have a very exciting future when applied to problems such as Enterprise Mashups. You’ll be hearing more about them from BEA over the coming months through various venues, including Webinars targeted at WLP-specific use cases (such as Peter’s excellent talk) and ALUI use cases (including tomorrow’s Runner Webinar). There will also be the usual blogging and other activities.

    Just as WLP and ALUI product teams are aligned, these different technologies are aligned. Adrenaline offers WLP customers a way to extend their reach in fundamentally new ways, and Peter will expound on some technical subtleties to address some of Chris’ concerns. Runner, too, is very exciting, enabling a completely different set of use cases. As the details unfold we’ll demonstrate how well aligned these technologies are — just wait until you see them working together!

    – David Meyer

    Posted by: dmeyer on January 10, 2007 at 10:41 PM

  • Just for those that don’t know about Adrenaline, here’s an article introducing Adrenaline.

    Posted by: jonmountjoy on January 11, 2007 at 12:19 PM

  • Chris,

    As David writes, BEA is moving ahead with multiple approaches to address the enterprise mashup space. My webinar covered the approach WLP is taking, and in no way implied that ALUI is not also a viable player in this space. We offer our customers a choice of products, and different products make sense to different customers.

    As for the specific issues you raised:

    ** Technical Reply

    Good technical points, but I think you overemphasized the role of iframes within WLP. Let me cover the two places we showed the use of iframes:

    Use Case 1: injecting a portlet into a legacy webapp

    Demo: An iframe was used in the demo to inject a portlet into a legacy static html page with almost no modification to that page (one line change).

    WLP does support an alternative approach – an Ajax streamed portlet. I simply did not have time to demo it. Also, this is not a portal use case for including external non-portal content into a Portal; instead it is the inverse, which is to publish existing portal content into legacy web applications . It was intended to show a very inexpensive way to energize a dated application until it is rationalized into a portal. The focus here is on minimizing cost of supporting legacy, while building portlets in transit to a portal solution.

    Use Case 2: WLP as a Mashup composition framework

    Demo: Iframes were used to pull in non-WSRP capable components (e.g. Google Gadgets) onto a WLP page

    First, as background info, the WLP architecture supports the rendering of various types of portlets:

    • Local portlets (deployed within the webapp, JSF, JPF, etc)
    • WSRP portlets – an advanced remoting approach which handles security, inter-portlet communication, etc…
    • Iframe portlets – an available remoting approach
    • WLP partners with Kapow for remote clipped portlets (similar to the ALUI approach)

    In regards to this use case, you brought up specific concerns:

    Security

    Concerns about shared authentication were noted in my talk. If components come from outside the enterprise, there is no easy solution to that problem, regardless of what product you are using. However, I spoke of a couple approaches in the webinar, including SAML.

    If those components come from inside the enterprise, the security hacks you were referring to are generally not necessary. Our customers that expect SSO have a web SSO solution (typically, cookie powered, not password in the URL powered) in place within the enterprise.

    Caching/Performance

    The most serious concerns of yours appear to be performance related. Specifically, the concern is that a full page refresh of a page that contains N number of iframes will cause an N+1 number of requests. To expand on your concern, I will add that this is not only seen in pages with iframes, but also pages that use Ajax to pull in data. I would say that there are several reasons why this does not invalidate WLP’s approaches:

    1. Mashup pages with lots of iframe portlets approach

    Google Personalized Home Page makes use of iframes to implement their mashup framework. Many of the Gadgets on the page are rendered with an iframe. But you are mistaken in saying that this scales because Google is throwing tons of hardware at the problem. The iframe Gadgets rendered in GPHP are rendered not by Google, but by 3rd party gadget hosting servers around the world. Google does NOT have to process those iframe Gadget requests, it is a distributed approach. Likewise, you could create a WLP page where most of the portlets are iframe portlets that hit a distributed set of servers, if that makes sense. Or…

    2. Mashup pages with a mixture of portlets

    The 2nd demo in my webinar wasn’t showing a page with all iframe portlets. Rather, what the demo was showing was a WLP page with a couple of iframe portlets mixed in with local portlets. As shown above, WLP supports a number of portlet types, and a good approach is to build pages that are a mixture of that set.

    3. Ajax helps minimize page refreshes

    Your concern about iframe performance stems from the case in which the entire page refreshes. With the usage of Ajax becoming common, plus with WLP 9.2 built in support for auto-generating Ajax portlets, this impact can be minimized. Page refreshes are becoming more rare. With WLP 10.0, which releases in a few months, the Ajax support has been expanded to support Ajax based portal page changes, further reducing the liklihood of a page refresh.

    4. The “Bleeding Edge” guys are also using browser based mashup approaches

    You referred to the “Bleeding Edge” technologists in your blog as the people that are doing things correctly. What are they doing? Some of the time, those guys are doing browser based Mashups. They often use a combination of iframes and Ajax from the browser to implement their mashups. So the same approach that you dislike is already in common use across the web.

    ** Market Reply

    You state “Portals are a thing of the past”. An interesting opinion, but just that. IT cannot afford web sprawl, and so a framework for rationalization will always be in demand whether you call it a Portal or something new.

    New technologies continue to provide alternatives to existing methodologies and portals are no different. However, one thing that has distinguished portal frameworks is their ability to embrace new technologies. Struts, WSRP, JSF are all examples of this as are the Web 2.0 constructs like mashups and rich interfaces based on Ajax. This is all good news as the enterprise has a wealth of options to choose from.

    Posted by: plaird on January 11, 2007 at 2:56 PM

  • I must say, as a customer and developer, it’s great plumtree (I mean BEA, or is it Oracle) management allows you guys to express your own opinions. It so happens I’ve spent quite a bit of time trying to get JBoss Seam (and Ice Faces) to work with Aqualogic 6.1. I’ve been looking at the IFrame route, because the gateway stuff just isn’t working (it doesn’t properly rewrite the URLs for the Ajax stuff). I’ve come to hate the gateway. I bet it was a great idea before Ajax, but now it seems like almost every web 2.0 application is incompatible (needs major modification to get it to work). Or maybe I just don’t understand how to get it to work. Is there any good documentation on it? I’m hoping for some major improvements when 6.5 comes out though.

    Posted by: cmann50 on April 4, 2008 at 2:28 PM

Categories
dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

How to Integrate PKI Certs or CAC Cards with ALI

In his 1947 speech to the House of Commons, Winston Churchill quipped, “It has been said that democracy is the worst form of government except all those other forms that have been tried.”

I’m not nearly as pithy as Sir Winston (nor as portly — at least not yet), but yet I feel the same way about passwords being used to protect web sites or other enterprise systems. In many ways, they’re the worst form of security out there except for everything else that’s been tried. Part of this has something to do with what I’ve coined Bucchere’s Axiom of Strong Passwords, which is a derivative of Murphy’s Law (which states that whatever can go wrong will). It goes something like this: the stronger a password is, the easier it is to hack. Why? Because if you force users into using a strong password, they’re more likely to write it down. And writing a password down defeats its purpose entirely.

The bottom line: passwords suck. But they’ve become the de-facto standard because they’re easier and cheaper than everything else we’ve tried, including PKI certs, biometrics (e.g. fingerprints, retina-scans), CAC cards, RSA secure IDs, etc. (Even for a cert-based authentication scheme, you still need a key to generate your cert, which is essentially just a glorified password.)

Just because passwords are the de-facto standard for authentication does not mean that we should quit trying to use other, ostensibly better forms of security, especially if 1) you’re protecting particularly sensitive data, 2) you’re open to the internet and 3) you have the resources (e.g. $$$) to invest in more robust forms of security. And I’m not talking about just buying an SSL cert from Verisign and continuing to have your users write down their passwords on post-it notes attached to their monitors. (Note to self: remove the post it note on your monitor with your password on it when you get back to the office.) I’m talking about using some sort of “soft” cert (e.g. PKI) or “hard” cert (e.g. CAC) to protect your system and your data.

Now if your system is ALI (formerly known as Plumtree Foundation or Plumtree Portal), you’re in luck, because the eggheads at what was once known as Plumtree have made this particularly easy to do. In fact, the hardest part is just getting the user’s identity out of the cert (see below the code snippet for some suggestions). Once you’ve done that, just drop a class into a jar that implements the ISSOProvider interface. (For those of you running on Windows, please don’t ask me to “port” this to C# — just take the Java code, drop it into Visual Studio.NET and then fix the syntax errors.)

But wait, SSO stands for “Single Sign On,” right? And what you’re really doing here is passing credentials from a cert to Plumtree and that has little or nothing to do with SSO. That’s a true statement. The subtlety here is that ISSOProvider, while it contains the letters SSO in its name, can be used for pretty much any form of authentication, whether you are using an SSO product or not.

CertIntegration.java

package com.bdgportal.alui.auth;

import com.plumtree.openfoundation.util.*;
import com.plumtree.openfoundation.web.*;
import com.plumtree.portaluiinfrastructure.sso.*;

public class CertIntegration implements ISSOIntegration {
 
   private XPHashtable settings;
 
   public CertIntegration() {
     ;
   }
 
   public boolean Initialize(XPHashtable settings) {
     this.settings = settings;       
     //String exampleSetting = ((XPArrayList)settings.GetElement("SettingName")).GetElement(0);
   }

   public String GetSSOProductName() {
     return "My Favorite Cert Integration";
   }

   /**
    * Gets the username from the cert and returns it to Plumtree. This will fail if the username
    * does not have a matching account in Plumtree. This can be a Plumtree database user or a user
    * imported from an authentication source, in which case you need to include the auth source
    * prefix in the username, e.g. "MyAuthSource/cbucchere"
    *
    * @param request The wrapped HttpServletRequest from the web container.
    * @return The object passed back to Plumtree for authentication with the portal.
    */
   public SSOLoginInfo GetLoginInfo(IXPRequest request) {
     String userName = ((XPRequest)request).GetUnderlyingObject().getUserPrincipal().getName();
     return new SSOLoginInfo(userName);
   }

   public String[] GetSecureCookies() {
     return null;
   }

   public String[] GetSecureHeaders() {
     return null;
   }

   public boolean OnLogout(IXPResponse response, String returnURI) {
     return false;
   }   
}

The hardest part about all this, as I said above, is getting the user name out of the PLI cert/CAC card/retina scan/etc. In the example above, I made MANY assumptions. First, I assumed that your portal is running on Weblogic, which understands and correctly implements Principal, which is a Java Servlet’s way of knowing who’s using it. Weblogic lets you plug custom implementations of the Principal class into its security infrastructure. All you need to do is extend java.security.Principal and then walk through a bunch of magical configuration steps to enable it.

Speaking of magical configuration, I neglected to mention that there are two small configuration steps that you need to perform in order to get your shiny new ISSOIntegration working in ALI. In portalconfig.xml, you need to set the value of SSOVendor setting to 100 (or greater) and then set the CustomSSOClass to the fully qualified name of the class you wrote that implements ISSOIntegration. For our Java example above, that would be com.bdgportal.alui.auth.CertIntegration and for .NET, it would the the name of your C# class.

Speaking of .NET . . . as many of you know, it is an entirely different animal with its own way of provisioning security to web applications (e.g. System.Web.Security).

Regardless of your platform, you need to get the user name out of whatever authentication method you’re using. Once you’ve accomplished that, just drop the code above into your project and replace the getUserPricipal().getName() with whatever mechanism you can find for getting your users’ names.

Assuming you trust your authentication mechanism to return the appropriate user name, you’ll have users getting logged into the portal via pretty much however you would like — CAC, PKI, biometrics, etc.

If only implementing a democracy were this easy . . . .

Comments

Comments are listed in date ascending order (oldest first)

  • This is wonderful article. How ever I’ve researched for a long time but still can not figure out what to do with Bea Weblogic to use Costom Identify Assertion. I wish this artical to have link to the document of how to “do the magical configuration steps”.

    Posted by: minh.tran on January 9, 2007 at 9:04 AM

  • This article was intended to be application server independent, but if you’re using BEA WebLogic, there’s a great article on how to set up custom identity providers which should work with this ALUI SSO solution.

    Posted by: bucchere on January 10, 2007 at 6:44 PM

  • NOTE: 1. the user’s password in the portal must be empty string. 2. jar should be put in portal.war and lib/java.

    Posted by: luotuoci on April 28, 2007 at 8:31 PM

Categories
bdg dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Announcing the Ruby IDK

Check it out at https://rubyidk.projects.dev2dev.bea.com.

Let’s have a virtual round of applause for Andrew Bays, bdg’s hotshot developer responsible for the latest innovation to come from our open source factory, the Ruby IDK.

Comments

Comments are listed in date ascending order (oldest first)

  • It’s a little unclear from this, and from the project description, just what the Ruby IDK is – unless of course you know what “all methods in com.plumtree.remote.portlet.*” are. Can you blog a few examples of what you can do with this?

    Posted by: jonmountjoy on October 13, 2006 at 2:15 AM

  • Here are a few examples of how one might use the Ruby IDK for portlet development. These snippets are utilized in your Ruby on Rails server’s View files (.rhtml files). The instance variables that they employ are declared and instantiated in your Application Controller(s).
    <!-- This example sets the portlet's title bar -->
    <% @portletResponse.setTitle("My Awesome Portlet") %>
    
    <!-- This example greets the user -->
    Hello, <%= @portletUser.getUserName() %>!
    
    <!-- This example redirects the browser to the portal home page -->
    <% @portletResponse.returnToPortal() %>
    
    <!-- This example creates a link back to the portal home page -->
    <a href=">%= @portletRequest.getReturnURI() %>">%= @portletRequest.getReturnURI() %>"</a>
    
    !-- This example shows how to force a portlet displayed outside of a portal page to use the ALUI header and footer -->
    <% @portletResponse.setHostedDisplayMode(HostedDisplayMode.Hosted) %>
    

    I hope you find this useful and at least somewhat informative. I would stress that you examine the sample portlets provided in CodeShare’s rubyidk.zip for a more thorough presentation of the IDK’s potential.

    Regards,
    Andrew Bays | bdg | 607 316 3090
    [email protected] | http://www.bdg-online.com

    Posted by: andrew.bays on October 20, 2006 at 11:50 AM

Categories
bdg dev2dev Featured Posts Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

UUID Object Opener, The Coolest ALI Taglib Yet

Anyone who’s ever done a major Plumtree/ALUI deployment knows of this problem: You create a portlet or community (or any other object) in Dev and then you migrate it to Test and on to Production. The problem is that you’ve also written some code in your navigation portlet or in another portlet that depends on an ObjectID (e.g. you’ve used a pt:standard:opener tag) and now, in each environment, your ObjectID has changed and you’re basically hosed.

Pre-G6, I came up with a solution described (somewhat hastily) in this post, but it requires a lot of leg work and — worse yet — manual configuration in each environment.

Enter G6 and the magic of taglibs. (Am I beginning to sound like a broken record? Yes, I know, you can’t fix every problem with a taglib, just 95% of them, right?) With this new taglib I wrote today, I extend AOpenerLinkTag and simply convert a UUID to an ObjectID and ClassID so that you can use the same taglib invocation in every environment. I don’t want to toot my own horn too much here, but honestly, this is pretty much the most useful taglib I’ve ever encountered, and once again, it took under 30 minutes to write.

Before I dive into the source, let me back up and say that I had to bend the rules a bit. OOTB, there are two subclasses of ATagAttribute: RequiredTagAttribute and OptionalTagAttribute. I added a third: MutableTagAttribute. It looks and smells like a tag attribute, but under the covers it’s not. Instead of grabbing its value out of the tag invocation, it allows you to set/change the value at runtime inside the taglib code. Granted, this is a little weird, but it’s what I needed to do in order to subclass AOpenerLinkTag and keep it happy dappy.

MutableTagAttribute.java:

package com.bdgportal.alui.taglibs;

import com.plumtree.portaluiinfrastructure.tags.metadata.*;

public class MutableTagAttribute extends ATagAttribute {

  private String value;
  
  public MutableTagAttribute(String name, String desc, AttributeType type) {
    super(name, desc, type);
  }
  
  public String GetDefaultValue() {
    return value;
  }

  public void SetDefaultValue(String value) {
    this.value = value;
  }
  
  public boolean GetIsRequired() {
    return false;
  }
}

Now that we have a tag attribute that we can change on-the-fly, writing the taglib was a snap.

UUIDObjectOpener.java:

package com.bdgportal.alui.taglibs;

import com.plumtree.portaluiinfrastructure.tags.*;
import com.plumtree.portaluiinfrastructure.tags.metadata.*;
import com.plumtree.xpshared.htmlelements.*;
import com.plumtree.taglib.standard.basetags.*;
import com.plumtree.server.*;

public class UUIDObjectOpener extends AOpenerLinkTag
{
  public static final RequiredTagAttribute UUID;
  private MutableTagAttribute OBJECT_ID;
  private MutableTagAttribute CLASS_ID;


  public UUIDObjectOpener() {
    OBJECT_ID = new MutableTagAttribute("objectid", "Not used -- do not set a value for this!", AttributeType.INT);
    CLASS_ID = new MutableTagAttribute("classid", "Not used -- do not set a value for this!", AttributeType.INT);
  }

  public ATagAttribute GetObjectIDAttribute()
  {
    return OBJECT_ID;
  }

  public ATagAttribute GetClassIDAttribute()
  {
    return CLASS_ID;
  }

  public static final ITagMetaData TAG;

  static
  {
    TAG = new TagMetaData("uuidobjectopener", "Opens an object based on its UUID.");
    UUID = new RequiredTagAttribute("uuid", "The UUID for the object you want to open.", AttributeType.STRING);
  }

  public HTMLElement DisplayTag()
  {
    Object[] objectAndClassId = ((IPTMigrationManager)(((IPTSession)GetEnvironment().GetUserSession()).OpenGlobalObject(PT_GLOBALOBJECTS.PT_GLOBAL_MIGRATION_MANAGER,
          false))).UUIDToObjectID(GetTagAttributeAsString(UUID));
  
OBJECT_ID.SetDefaultValue(objectAndClassId[PT_MIGRATION_OBJECT_COLS.PT_MOC_OBJECTID].toString());
    CLASS_ID.SetDefaultValue(objectAndClassId[PT_MIGRATION_OBJECT_COLS.PT_MOC_CLASSID].toString());
    return super.DisplayTag();
  }

  public ATag Create()
  {
    return new UUIDObjectOpener();
  }
}

To deploy this code, see the excellent section on edocs about creating custom Adaptive Tags.

To use this code in a portlet, do the following.

myportlet.htm:

<span xmlns:pt='http://www.plumtree.com/xmlschemas/ptui/'>
   <pt:mytaglibns.uuidobjectopener pt:uuid="{00000-0000-0000-000000}" pt:mode="2">Open My
   Object</pt:mytablibns.uuidobjectopener>
</span>

I did actually test this taglib and it worked swimmingly. Of course you need to substitute a real UUID for all those Os.

In closing, here’s a little shameless plug: I’ve been asked by BEA to give a short, 20-minute talk at BEA World on my favorite subject (duh, taglibs) at the ALUI Developer User Group on Monday, September 18th in Moscone Center, San Francisco. It will happen some time between 1 and 5:30 PM. The ALUI User Groups are free for conference attendees. I hope to see you there or at the bdg booth. Please come on up and introduce yourself — I always like to meet members of this great community in person.

Enjoy!

Comments

Comments are listed in date ascending order (oldest first)

  • Will there be any performance issues using this tag as it involves additional operations of getting Object ID and Class ID from the UUID?

    Posted by: psudhir_it on February 6, 2007 at 10:15 PM

  • From what I can tell, the tag makes a single SQL query (something like select objectid, classid from ptmigration where uuid = ?) which should be a pretty darn fast query, especially since there’s probably an index on uuid.

    The portal is making database calls left and right when you’re displaying a portal page, so making one more database call to generate an opener link shouldn’t really be a performance factor. Nonetheless, it’s definitely something to think about and I’m glad you brought it up.

    Posted by: bucchere on February 7, 2007 at 5:53 PM

  • Hi Chris! Am attempting to move this over to .NET; can you tell me which reference I need to add to resolve com.plumtree.taglib.standard and the AOpenerLinkTag? I’m not sure how to convert this Java fragment, which appears to have two seperate definitions of TAG: public static final ITagMetaData TAG; static { TAG = new TagMetaData(“uuidobjectopener”, “… UUID.”); …can you tell me what it means, and any tips on converting to C# ? Should have an opportunity to throw some load at this later on; will post my results here. My customer is already sensitive to performance problems caused by header portlets making DB calls; so I will also be looking into the caching possibilities. Cheers, Rob

    Posted by: rwagner on October 10, 2007 at 11:04 AM

  • Here is another option. The little known server.pt?uuID={XYZ-UUID} syntax. We use this in our public site which is not gatewayed to deep link into portal content without the need for an adaptive tag. We also use this to establish fqdns in apache that redirect to portal pages. For example in apache setup a fqdn of docs.bea.com which points to portal.bea.com/portal/server.pt?uuID={XYZ-UUID}.

    Posted by: ryanyoder on February 11, 2008 at 6:18 AM

  • Wow, very cool! I totally didn’t know that syntax even existed. If it’s supported, it ought to be documented, because it’s quite handy.

    One gotcha is that you need to pass mode=2 if you want to open the object in view mode because the default is edit mode, e.g.: /portal/server.pt?uuID={46514C0F-0187-4340-AA24-84E41C00C60F}&mode=2

    Posted by: bucchere on February 11, 2008 at 6:31 AM

Categories
bdg dev2dev Featured Posts Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

My Love Affair with ALI Taglibs

There’s been some recent activity on this very old thread in the newsgroups regarding displaying the help link in a portlet. Until G6, this could only be done with native code AFAIK. But, if you supress the portlet title bar, there really aren’t many places where you can put native code in a portlet.

Enter G6 and the extensible taglib support, a quiet little feature that (without any fanfare or marketing by BID) has seriously changed my life.

The source speaks for itself. It look 15 minutes to write. (Granted, I already had my ALUI development environment all set up.)

HelpURL.java:

package com.bdgportal.alui.taglibs;

import com.plumtree.openfoundation.util.*;
import com.plumtree.portaluiinfrastructure.tags.*;
import com.plumtree.portaluiinfrastructure.tags.metadata.*;
import com.plumtree.server.*;
import com.plumtree.xpshared.htmlelements.*;

public class HelpURL extends ATag {

public static final ITagMetaData TAG;
public static final RequiredTagAttribute PORTLET_ID;
  public static final RequiredTagAttribute ID;
  public static final OptionalTagAttribute SCOPE;

static
{
 TAG = new TagMetaData("helpurl",
   "Puts the help URL for this portlet into the variable specified by the ID attribute.");

 PORTLET_ID = new RequiredTagAttribute("portletid",
   "The portlet ID.",
   AttributeType.INT);

 ID = new RequiredTagAttribute("id",
   "The name of the variable in which the help link should be stored.",
   AttributeType.STRING);

 SCOPE = new OptionalTagAttribute("scope",
   "The scope used to store the the help link.",
   AttributeType.STRING, Scope.PORTLET_REQUEST.toString());
}

public HTMLElement DisplayTag() {
 ((IXPList)GetState().GetSharedVariable(GetTagAttributeAsString(ID),
  Scope.GetScope(GetTagAttributeAsString(SCOPE)))).Add(
     ((IPTWebService)((IPTSession)GetEnvironment().GetUserSession()).GetWebServices()
  .Open(((IPTGadget)((IPTSession)GetEnvironment().GetUserSession()).GetGadgets()
  .Open(GetTagAttributeAsInt(PORTLET_ID), false)).GetWebServiceID(), false))
  .GetProviderInfo().ReadAsString("PTC_HTTPGADGET_HELPURL"));
 return null;
}

public ATag Create() {
 return new HelpURL();
}
}

To deploy this code, see the excellent section on edocs about creating custom Adaptive Tags.

To use this code in a portlet, do the following.

myportlet.htm:

<span xmlns:pt='http://www.plumtree.com/xmlschemas/ptui/'>
	<pt:mytaglibns.helpurl pt:portletid="234" pt:id="helplink"/>
	<pt:core.html pt:tag="a" href="$helplink">Help</pt:core.html>
</span>

I didn’t test this, so YMMV. Have fun!

Comments

Comments are listed in date ascending order (oldest first)

  • That’s slick, Chris – that’ll be handy for porting between devstageprod where objectids may be different 🙂

    Posted by: ewwhitley on September 13, 2006 at 6:20 AM

  • Hi, This code makes ten database requests just to get the the IPTWebService object for given portlet. Is there any better way to do this?

    Posted by: Piotr Dudkiewicz on May 18, 2007 at 6:48 AM

  • Sorry, but there’s no better way to get the help URL out of the web service. ALUI is optimized to make calls to its database and the UI code does that everywhere — it’s a dynamic web application, so that should be expected.

    Posted by: bucchere on May 29, 2007 at 2:03 PM

  • It seems that ALUI is optimized to do as many database calls as it’s possible;) Thanks.

    Posted by: Piotr Dudkiewicz on June 1, 2007 at 2:46 AM