... until the collector arrives ...

This "blog" is really just a scratchpad of mine. There is not much of general interest here. Most of the content is scribbled down "live" as I discover things I want to remember. I rarely go back to correct mistakes in older entries. You have been warned :)


BEA vs JDK 1.5

When I tried to run the SDO client tutorial code from the AquaLogic Data Services Platform example, I got an obnoxious stack trace:

Exception in thread "main" com.bea.ld.dsmediator.client.exception.SDOMediatorException: com.bea.ld.dsmediator.client.exception.SDOMediatorException: weblogic.rjvm.PeerGoneException: ; nested exception is: 
	at com.bea.ld.dsmediator.client.XmlDataServiceBase.invoke(XmlDataServiceBase.java:117)
	at com.mm.provisional.bea.sandbox.SdoReader.test(SdoReader.java:34)
	at com.mm.provisional.bea.sandbox.SdoReader.main(SdoReader.java:64)
Caused by: com.bea.ld.dsmediator.client.exception.SDOMediatorException: weblogic.rjvm.PeerGoneException: ; nested exception is: 
	at com.bea.ld.dsmediator.client.XmlDataServiceBase.invokeQuery(XmlDataServiceBase.java:188)
	at com.bea.ld.dsmediator.client.XmlDataServiceBase.invoke(XmlDataServiceBase.java:105)
	... 2 more
Caused by: weblogic.rjvm.PeerGoneException: ; nested exception is: 
	at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:108)
	at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:290)
	at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:247)
	at com.bea.ld.Server_ydm4ie_EOImpl_814_WLStub.executeFunction(Unknown Source)
	at com.bea.ld.dsmediator.client.XmlDataServiceBase.invokeQuery(XmlDataServiceBase.java:160)
	... 3 more
Caused by: java.io.EOFException
	at weblogic.rjvm.t3.T3JVMConnection.endOfStream(T3JVMConnection.java:874))
	at weblogic.socket.SocketMuxer.deliverExceptionAndCleanup(SocketMuxer.java:583)
	at weblogic.socket.SocketMuxer.deliverEndOfStream(SocketMuxer.java:533)
	at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:691)
	at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:638)
	at weblogic.socket.JavaSocketMuxer.processSockets(JavaSocketMuxer.java:282)
	at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:32)
	at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
	at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)

On the server side, the stacktrace is:

java.io.InvalidClassException: javax.xml.namespace.QName; local class incompatible: stream classdesc serialVersionUID = 4418622981026545151, local class serialVersionUID = -9120448754896609940
        at java.io.ObjectStreamClass.initNonProxy(Ljava.io.ObjectStreamClass;Ljava.lang.Class;Ljava.lang.ClassNotFoundException;Ljava.io.ObjectStreamClass;)V(Unknown Source)
        at java.io.ObjectInputStream.readNonProxyDesc(Z)Ljava.io.ObjectStreamClass;(Unknown Source)
        at java.io.ObjectInputStream.readClassDesc(Z)Ljava.io.ObjectStreamClass;(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Z)Ljava.lang.Object;(Unknown Source)
        at java.io.ObjectInputStream.readObject()Ljava.lang.Object;(Unknown Source)
        at weblogic.rjvm.ClassTableEntry.readExternal(Ljava.io.ObjectInput;)V(ClassTableEntry.java:33)
        at java.io.ObjectInputStream.readExternalData(Ljava.io.Externalizable;Ljava.io.ObjectStreamClass;)V(Unknown Source)
        at java.io.ObjectInputStream.readOrdinaryObject(Z)Ljava.lang.Object;(Unknown Source)
        at java.io.ObjectInputStream.readObject0(Z)Ljava.lang.Object;(Unknown Source)
        at java.io.ObjectInputStream.readObject()Ljava.lang.Object;(Unknown Source)
        at weblogic.rjvm.InboundMsgAbbrev.readObject(Lweblogic.common.internal.ChunkedObjectInputStream;)Ljava.lang.Object;(InboundMsgAbbrev.java:65)
        at weblogic.rjvm.InboundMsgAbbrev.read(Lweblogic.common.internal.ChunkedObjectInputStream;Lweblogic.rjvm.BubblingAbbrever;)V(InboundMsgAbbrev.java:37)
        at weblogic.rjvm.MsgAbbrevJVMConnection.readMsgAbbrevs(Lweblogic.rjvm.MsgAbbrevInputStream;)V(MsgAbbrevJVMConnection.java:210)
        at weblogic.rjvm.MsgAbbrevInputStream.readMessageContext()V(MsgAbbrevInputStream.java:235)
        at weblogic.rjvm.ConnectionManager.dispatch(Lweblogic.rjvm.MsgAbbrevJVMConnection;Lweblogic.utils.io.Chunk;)V(ConnectionManager.java:735)
        at weblogic.rjvm.t3.T3JVMConnection.dispatch()V(T3JVMConnection.java:760)
        at weblogic.socket.NTSocketMuxer.processSockets()V(NTSocketMuxer.java:105)
        at weblogic.socket.SocketReaderRequest.execute(Lweblogic.kernel.ExecuteThread;)V(SocketReaderRequest.java:32)
        at weblogic.kernel.ExecuteThread.execute(Lweblogic.kernel.ExecuteRequest;)V(ExecuteThread.java:219)
        at weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:178)
        at java.lang.Thread.startThreadFromVM(Ljava.lang.Thread;)V(Unknown Source)

This indicates that the standard Java class QName has changed.

The BEA support pages were no help, but after some experimentation I found out that the error only occurred using JDK 1.5.  If I ran under JDK 1.4.2, the problem disappeared.  This was the second JDK 1.5 incompatibility that I have observed in the last few days, but I cannot remember what the other one was (should have written a diary entry).


If you attempt to edit an XQuery in an AquaLogic Data Service and you find that you cannot associate an entity with a zone, it might be too late.  The BEA documentation cryptically states that the order that you wire things together might be significant.  In particular, you should create all zones prior to creating any WHERE clauses in the query.


Thick Web App vs. Thin Web App -- The Back Button Test

There is great debate about when a web application is "thick" versus when it is "thin".  As a result, application thickness has a spectrum rather than a boundary.  However, here is a rule of thumb to help make the determination -- the "back button test".  If the back button doesn't work in a web app, it is almost certainly a thick app.  If it does work, then the app is quite likely to be thin.  The test isn't perfect, but it works quite well in practice.

MS Exchange / Outlook Web Access

Outlook Web Access does not appear to be proxy friendly.  It uses non-standard HTTP verbs.  I observed SEARCH and SUBSCRIBE.  SEARCH appears to be a old proposed extension to WebDAV.  I can't find anything about SUBSCRIBE.  Interestingly, the MS web sites don't seem to have any information about these verbs.  OWA only appears to use these verbs when talking to IE -- when I tried FF, only standard HTTP verbs were used (and the application looks quite different).


Internet Explorer XSLT Output

I always have trouble locating the IE extension that allows you to view XSLT output, so I thought I'd capture the URL for future reference:

Internet Explorer Tools for Validating XML and Viewing XSLT Output

The file is called iexmltls.exe.



I posted a message on the oXygen forum:

Is there a way to install a custom URI resolver for use in Saxon XQuery? I would like to achieve the equivalent of using the Saxon command line argument '-r', but within the context of an oXygen session.


MS SQL Server

Here is an MS SQL query that writes an SQL query to show the row counts for all user tables:

select line
from (
  select 0 seq, 'select null table_name, null row_count where 1=2' line
  union select 1, 'union select '''+name+''', count(*) from ['+name+']'
    from dbo.sysobjects where type='U' and name<>'dtproperties'
  union select 2, 'order by 1'
) lines
order by seq, line


IIS Virtual Hosts

If you create multiple web sites in IIS (i.e. virtual hosts), you may see an error like this when trying to access anything other than the default web site:

Bad Request (Invalid Hostname)

For example, on the domain mm.local, we created a new web site called wiki on the collaboration server.  If you tried to hit the server using the address wiki.mm.local, all would work properly.  But if you tried just wiki, then you would get the exhibited error message.  To correct this, open the properties page for the web site, select the Web Site tab and click the Advanced button.  In the Multiple identities for this Web site section, ensure that both the long and short names for the web site are listed (e.g. both wiki.mm.local and wiki).

XQuery Engines

A site that lists many XQuery engines can be found at:

SQL Summit Catalog of XQuery Engines, Processors and Tools

Blog Archive