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

Searching Intrinsic ALI Properties Using the PRC

There’s a problem with the IDK PRC API for search that’s tripped up users in the dev2dev forums and that stymied me for the first time today while coding up a custom search application for one of our customers.

The problem is that there’s a hardcoded limitation in the IDK that prevents you from calling PortalField.forID if the passed in object ID is less than 100. This prevents you from searching on some really useful properties, including e-mail address! For the life of me, I can’t figure out why this limitation was imposed.

The good news is that I found a workaround. It involves a quick two-file IDK patch that entails subclassing two classes. The only catch is that you need to put the child classes in the same package as the IDK (because the parent classes have package-private constructors).

Here’s the source code that does the trick.

com.plumtree.remote.prc.search.IntrinsicPortalField.java:

package com.plumtree.remote.prc.search;

import com.plumtree.remote.prc.search.PortalField;
import com.plumtree.remote.prc.search.xp.*;

public class IntrinsicPortalField extends PortalField {
  private IntrinsicPortalField(IntrinsicXPPortalField xpField) {
    super(xpField);
  }

  public static final IntrinsicPortalField EMAIL_ADDRESS;

  static {
    EMAIL_ADDRESS = new IntrinsicPortalField(IntrinsicXPPortalField.forID(26));
  }
}

com.plumtree.remote.prc.search.xp.IntrinsicXPPortalField.java:

package com.plumtree.remote.prc.search.xp;

import com.plumtree.openfoundation.util.XPIllegalArgumentException;

public class IntrinsicXPPortalField extends XPPortalField {

  private IntrinsicXPPortalField(String name, boolean isSearchable, boolean isRetrievable) {
    super(name, isSearchable, isRetrievable);
  }

  public static IntrinsicXPPortalField forID(int propertyId) throws XPIllegalArgumentException {
    return new IntrinsicXPPortalField("ptportal.propertyid." + propertyId, true, true);
  }
}

I used e-mail address (ID = 26) as an example, but you can put any properties in there that you want. Then, when you’re setting up your search filter, just use IntrinsicPortalField instead of PortalField. For example:

IFilterClause filter = searchFactory.createOrFilterClause();
filter.addStatement(IntrinsicPortalField.EMAIL_ADDRESS, Operator.Contains, searchQuery);

Since IntrinsicPortalField is a subclass of PortalField, the PRC has no problem with it. I’ve tested this with e-mail address and it works flawlessly. I’m sure other properties will work perfectly well too.

Enjoy!

Comments

Comments are listed in date ascending order (oldest first)

  • Thank you, Chris 🙂 Now that Chris has kindly posted a workaround, any possibility of having this put into an IDK hotfix?

    Posted by: ewwhitley on August 27, 2006 at 2:39 PM

  • I second Eric’s opinion. Can you guys just remove the artificial restriction of 100 from the IDK in the next release? Seems to work fine without it and it would obviate the need for my silly patch.

    Posted by: bucchere on August 30, 2006 at 2:31 PM

  • Here is an e-mail I received from a person who attempted to use my patch:

     

    I found your blog because I am having the same problem you describe with searching Intrinsic properties. However, I am now having trouble actually “patching” the IDK. How exactly would I go about repackaging everything with these new java files included? Thank you very much for your time and help.

    Here was my response:

    Thanks for your note. Assuming that you’re building a Java web application, all you need to do is compile the patch along with all your other application code. You can put the class files for the patch in WEB-INF/classes or you can make a jar (e.g. myapp.jar) and put the class files for the IDK patch there and then drop the jar in WEB-INF/lib. You can then put everything into a .war or .ear (or not).

    The magic of the Java classloader is that all the .class files in WEB-INF/classes and all your .class files inside jars in WEB-INF/lib all end up loaded into the same memory. That means that if you have two class files in two different jars, but they’re both in the com.plumtree.remote.portlet package (meaning you have the line package com.plumtree.remote.portlet; at the top of your source files and your .java files live in com/plumtree/remote/portlet), then they’ll act like they’re in the same package. This means that you’ll have access to all package private member methods, which the patch needs in order to compile.

    Posted by: bucchere on August 30, 2006 at 7:23 PM

  • Hi mate, I think this is very helpfull but I was wondering where can I find corresponding ID’s for all standart and custom user properties, when I’m using

    forID(26) method? Thanks in advance!

    Posted by: ggeorgiev on September 19, 2006 at 1:16 AM

  • This gets you the standard (intrinsic) ones:
    select objectid, name from plumdbuser.ptproperties order by objectid where objectid < 200;
    1 Name
    2 Description
    3 Object Created
    4 Object Last Modified
    5 Open Document URL
    6 Content Type ID
    7 Plumtree Document Image UUID
    8 Content Language
    9 Content Tag
    26 Email Address
    50 Full Text Content
    60 Document Submit Content Source
    61 Document Upload Repository Server
    62 Document Upload DocID
    71 Related Communities
    72 Related Folders
    73 Related Portlets
    74 Related Experts
    75 Related Content Managers
    80 Snapshot Query Reference
    101 Keywords
    102 Subject
    103 Author
    104 Created
    105 Document Title
    106 URL
    107 Category
    111 Comments
    112 Modified
    152 Phone Number
    153 Title
    154 Department
    155 Manager
    156 Company
    157 Address
    158 Postal Code
    159 State or Province
    160 Country
    161 Employee ID
    162 City
    163 Address 2
    

    For the custom ones, change the where clause to >= 200.

    Posted by: bucchere on September 23, 2006 at 6:53 PM

Categories
Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

More adventures in desktop linux

Everything I do in linux seems to be an adventure. That couldn’t be more true for Oracle 10g. After fighting with the installer, monkeying around with the ALUI database scripts and editing the start-up script, I got the database to start, but it would only shut down immediately afterword. Drats!

This morning, I deleted every trace of Oracle 10g from my system and attempted an install of Oracle 9i. The adventure begins . . . .

First off, Oracle 9i requires JRE 1.3.1, which Sun is planning to retire very soon (as soon as Java 6 comes out). Damn, I remember working on Java 1.0 — am I getting old?

JRE 1.3.1 doesn’t install cleanly on Fedora Core 5. Then again, does anything? Java is closed-source — meaning you can’t build it yourself — so once again I was in a linux bind. When I tried to unpack the 1.3.1 JRE I downloaded from Sun, it gave me this:

tail: `-1' option is obsolete; use `-n 1' since this will be removed in the future
Unpacking...
tail: cannot open `+486' for reading: No such file or directory
Checksumming...
1 The download file appears to be corrupted. [etc]

I downloaded the file again a few times to make sure it really wasn’t corrupted. Of course it wasn’t.

Then I found this great blog post that explained exactly what was going wrong and offered an easy fix. Easy, that is, if you’re a developer. (I’m becoming more and more convinced every day that linux is not at all poised to take over the desktop unless the entire earth’s population goes out and gets a CS degree.)

Alas, the antiquated JRE was really to roll and now it was time to run the Oracle installer. Of course, that didn’t run either. Instead, it spat out JRE errors;

Error occurred during initialization of VM
Unable to load native library: /tmp/OraInstall2006-08-19_11-59-35AM/jre/lib/i386/libjava.so: symbol __libc_wait, version GLIBC_2.0 not defined in file libc.so.6 with link time reference

Nice. Back to Google.

The fix this time came (ironically) from IBM’s web site. No problem, just make a change to libcwait.c, recompile it as a shared object and then set the LD_PRELOAD variable. I’m sure my mom could do that, right?

Then of course I had the standard “this only works under X” problem, but I had already figured that one out. Here’s the error:

Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
at sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:59)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:58)
at java.awt.Window.(Window.java:188)
at java.awt.Frame.(Frame.java:315)
at java.awt.Frame.(Frame.java:262)
at oracle.sysman.oii.oiic.OiicInstaller.main(OiicInstaller.java:593)

And the fix (as root):

%>xhost +
%>xterm &
%>su - oracle
%>/tmp/Disk1/runInstaller &

And finally, the Oracle 9i installer launched. Now of course it’s totally hung at 18% on “Linking Oracle Net Required Support Files” and it’s been stuck there since before I started writing this blog post.

Gotta love it.

Categories
dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Handy Startup Script for ALUI G6 on *nix

I just wrote a nice little startup script for ALUI G6 on *nix. If you want to use it, place a file in /etc/init.d called “plumtree” with the following contents:

#!/bin/sh

. /opt/plumtree/pthome.sh

case "$1" in
 'start')
   $PT_HOME/ptportal/6.0/bin/automationserverd.sh start
   $PT_HOME/ptws/6.0/bin/apiserviced.sh start
   $PT_HOME/ptdr/6.0/bin/drserverd.sh start
   $PT_HOME/ptsearchserver/6.0/bin/searchserverd.sh start
   $PT_HOME/ptupload/6.0/bin/plumtreefileuploadd.sh start
   /opt/httpd/bin/apachectl.pt start
   /opt/tomcat5/bin/startup.sh
   ;;

 'stop')
   $PT_HOME/ptportal/6.0/bin/automationserverd.sh stop
   $PT_HOME/ptws/6.0/bin/apiserviced.sh stop
   $PT_HOME/ptdr/6.0/bin/drserverd.sh stop
   $PT_HOME/ptsearchserver/6.0/bin/searchserverd.sh stop
   $PT_HOME/ptupload/6.0/bin/plumtreefileuploadd.sh stop
   /opt/httpd/bin/apachectl.pt stop
   /opt/tomcat5/bin/shutdown.sh
   ;;
esac

Now make the script executable:

%>chmod +x /etc/init.d/plumtree

To run all the ALUI components, type:

/etc/init.d/plumtree start

To stop them, use

/etc/init.d/plumtree stop

If you want to start ALUI automatically when the server comes up, do this (assuming you want ALUI to start at run level 3):

ln -s /etc/init.d/plumtree /etc/rc3.d/S50plumtree

Of course you need to make sure that Oracle is started first if you go this route. If you’re not running all the ALUI services on the same machine (not a recommended configuration, but good for development), you’ll need to edit the script above to start and stop only the components you have installed on each server. Enjoy!

Categories
dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

ALI Install Issues on Fedora Core 5

Note: I don’t think this is officially supported, so YMMV.

I encountered a problem installing ALUI G6 on Fedora Core 5. Just for the record, it’s not a problem with ALUI — it’s a problem with InstallAnywhere, the software that BEA uses to install ALUI.

Here are the errors I got:

[plumtree@bdg-chris]# ./PlumtreeFoundation_v6-0
Preparing to install...
Extracting the JRE from the installer archive...
Unpacking the JRE...
Extracting the installation resources from the installer archive...
Configuring the installer for this system's environment...
awk: error while loading shared libraries: libdl.so.2:
cannot open shared object file: No such file or directory
dirname: error while loading shared libraries: libc.so.6:
cannot open shared object file: No such file or directory
/bin/ls: error while loading shared libraries: librt.so.1:
cannot open shared object file: No such file or directory
basename: error while loading shared libraries: libc.so.6:
cannot open shared object file: No such file or directory
dirname: error while loading shared libraries: libc.so.6:
cannot open shared object file: No such file or directory
basename: error while loading shared libraries: libc.so.6:
cannot open shared object file: No such file or directory
hostname: error while loading shared libraries: libc.so.6:
cannot open shared object file: No such file or directory

Launching installer...

grep: error while loading shared libraries: libc.so.6:
cannot open shared object file: No such file or directory
/tmp/install.dir.17585/Linux/resource/jre/bin/java: error while loading
shared libraries: libpthread.so.0: cannot open shared object file:
No such file or directory

I resolved these errors by doing the following:

[plumtree@bdg-chris]# cat PlumtreeFoundation_v6-0 | sed
"s/export LD_ASSUME_KERNEL/#xport LD_ASSUME_KERNEL/" >
PlumtreeFoundation_v6-0.new

[plumtree@bdg-chris]# chmod a+x PlumtreeFoundation_v6-0.new

[plumtree@bdg-chris]# ./PlumtreeFoundation_v6-0.new

This may work to get ALUI installed on other unsupported flavors of *nix, although I’ve never tried it, so again, YMMV.

Comments

Comments are listed in date ascending order (oldest first)

  • once you got it installed how did it run on core 5?

    Posted by: phil- on April 13, 2007 at 12:30 PM

  • It ran pretty well aside from the occasional JVM segfault, which I could have probably fixed by upgrading to the latest 1.4.2 JVM and plugging that into Tomcat 5, rather than running the OOTB bundled Tomcat/JVM supplied by BEA.

    Instead, I’ve switched to Ubuntu (with Oracle XE), which is a great platform because, for the most part, it just takes care of itself. It’s like having RHEL with a lifetime subscription to RHN, but without actually paying for it! 😉

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

Categories
dev2dev Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Time to switch search keywords?

The data below are from overture.com. They state how many times the following terms are currently being used in search queries. (I’m not sure if the data collected are only from Google or if they include multiple search engines.)

680 plumtree
67 plumtree software
46 plumtree portal

305 aqualogic
31 aqualogic bea

According to these data, which show that more than twice as many people are searching for “plumtree” than for “aqualogic,” it’s not quite time to insert AquaLogic keywords into bdg-online.com and/or re-brand the bdg Plumtree blog as the bdg AquaLogic blog.

Adoption of the new names takes time, but we’re getting closer.

Categories
bdg Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Ruby IDK 5.3 development has begun

We’ve laid down the basic architecture for the Ruby IDK 5.3 and written most of IPortletContext and IPortletRequest. We also now have a test bed application built in Rails, the output of which checks for CSP-Gateway-Type == 'Plumtree', displays your HTTP environment (dumps all the headers) and then proceeds to call each IDK method in IPortletRequest.

This is our first adventure in Ruby and I must say, it’s easy breezy. What a great language! And don’t get me started on how easy it is to prototype a web application with Rails using scaffolding. Makes J2EE seem almost neolithic.

Categories
bdg Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

BEAWorld 2006 sponsorship is a go

Check out our logo on the BEAWorld sponsors page. We’re the first AquaLogic User Interaction partner to sign up (and the only one so far)!

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

Mingle & the PHP EDK moved to dev2dev’s CodeShare

Just in case you’re looking for our two opensource projects that were once accessible via the Plumtree Portal, you can now find them on BEA dev2dev’s CodeShare. Here are the links:

Mingle: https://mingle.projects.dev2dev.bea.com
PHP EDK: https://plumtree-php-edk.projects.dev2dev.bea.com

Enjoy!

Categories
bdg Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Our relationship with BEA + BEAWorld 2006

I often get asked the question: what’s your relationship with BEA?

Without lapsing into buzzword bingo (e.g. synergy), let me just say this: bdg is a BEA “Select Services Partner.” We work on our own or team up with BEA sales and service folks (and sometimes other system integrators as well) to deliver ALUI solutions to our joint customers. Recently, our partner profile was approved by BEA for publication on their web site, where you can get the scoop on what we do here at bdg.

* * *

Considering all the fun we had at last year’s Odyssey, we’re planning on making a big splash at this year’s BEAWorld, which will feature a “Portal Pavilion” to cater to all the old Plumtree customers, partners and fans.

I can’t reveal too much about our plans just yet, but we’re putting out a call to our customers for speaking opportunities and gearing up to defend our “Booth of Pain” title (should we be called upon to do so). Also, if you plan to attend BEAWorld 2006, be sure to stop by the bdg booth to pick up some goodies . . . last year it was mousepads, but this year we’re thinking along the lines of something far less pragmatic. I’ll leave it at that. . . .

Categories
bdg Plumtree • BEA AquaLogic Interaction • Oracle WebCenter Interaction

Announcing my new dev2dev blog

I’m very pleased to announce that I’ve been selected by BEA to be one of their featured bloggers on dev2dev, BEA’s product community site for developers by developers. You can read my dev2dev blog for all the Plumtree/ALUI tips that you’re used to finding here, but continue to check this space for news about bdg.

Also, stay tuned for a new Plumtree/ALUI podcast . . . coming soon!