I have a simple entity bean which is used to hold serialized objects. It
worked
fine with InstantDB but fails with postgresql. I tried upgrading to
postgresql
7.1.2 from 6.5.3 but that did not fix the problem. I have written a
small bean
to reproduce the problem which is listed below.

Any help or pointers would be much appreciated.

Thanks

Norrie

-----

The client catches the following exception when doing the create

java.lang.reflect.UndeclaredThrowableException:
javax.transaction.HeuristicRollbackException
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:229)
        at
org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker_Stub.invokeHome(Unknown
Source)
        at
org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomeProxy.java:248)
        at $Proxy0.create(Unknown Source)
        at proftest.Client.main(Client.java:19)

postgres postmaster produces:

pq_recvbuf: recv() failed: Broken pipe

The JBoss server log file contains:

[JAWS] FastPath protocol error: Z
[JAWS]  at postgresql.fastpath.Fastpath.fastpath(Fastpath.java:159)
[JAWS]  at postgresql.fastpath.Fastpath.fastpath(Fastpath.java:188)
[JAWS]  at postgresql.fastpath.Fastpath.getInteger(Fastpath.java:200)
[JAWS]  at
postgresql.largeobject.LargeObjectManager.create(LargeObjectManager.java:162)
[JAWS]  at
postgresql.jdbc2.PreparedStatement.setBytes(PreparedStatement.java:298)
[JAWS]  at
org.opentools.minerva.jdbc.PreparedStatementInPool.setBytes(PreparedStatementInPool.java:192)
[JAWS]  at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.setParameter(JDBCCommand.java:321)
[JAWS]  at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.setParameters(JDBCCreateEntityCommand.java:165)
[JAWS]  at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.jdbcExecute(JDBCCommand.java:159)
[JAWS]  at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.execute(JDBCCreateEntityCommand.java:135)
[JAWS]  at
org.jboss.ejb.plugins.jaws.JAWSPersistenceManager.createEntity(JAWSPersistenceManager.java:122)
[JAWS]  at
org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:207)
[JAWS]  at
org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:441)
[JAWS]  at java.lang.reflect.Method.invoke(Native Method)
[JAWS]  at
org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:639)
[JAWS]  at
org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:160)
[JAWS]  at
org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:87)
[JAWS]  at
org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:135)
[JAWS]  at
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:263)
[JAWS]  at
org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:86)
[JAWS]  at
org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:164)
[JAWS]  at
org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:106)
[JAWS]  at
org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:316)
[JAWS]  at
org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRMPContainerInvoker.java:369)
[JAWS]  at java.lang.reflect.Method.invoke(Native Method)
[JAWS]  at
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
[JAWS]  at sun.rmi.transport.Transport$1.run(Transport.java:142)
[JAWS]  at java.security.AccessController.doPrivileged(Native Method)
[JAWS]  at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
[JAWS]  at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)
[JAWS]  at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)
[JAWS]  at java.lang.Thread.run(Thread.java:484)
[JAWS] FastPath protocol error: Z
[JAWS]  at postgresql.fastpath.Fastpath.fastpath(Fastpath.java:159)
[JAWS]  at postgresql.fastpath.Fastpath.fastpath(Fastpath.java:188)
[JAWS]  at postgresql.fastpath.Fastpath.getInteger(Fastpath.java:200)
[JAWS]  at
postgresql.largeobject.LargeObjectManager.create(LargeObjectManager.java:162)
[JAWS]  at
postgresql.jdbc2.PreparedStatement.setBytes(PreparedStatement.java:298)
[JAWS]  at
org.opentools.minerva.jdbc.PreparedStatementInPool.setBytes(PreparedStatementInPool.java:192)
[JAWS]  at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.setParameter(JDBCCommand.java:321)
[JAWS]  at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.setParameters(JDBCCreateEntityCommand.java:165)
[JAWS]  at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.jdbcExecute(JDBCCommand.java:159)
[JAWS]  at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCreateEntityCommand.execute(JDBCCreateEntityCommand.java:135)
[JAWS]  at
org.jboss.ejb.plugins.jaws.JAWSPersistenceManager.createEntity(JAWSPersistenceManager.java:122)
[JAWS]  at
org.jboss.ejb.plugins.CMPPersistenceManager.createEntity(CMPPersistenceManager.java:207)
[JAWS]  at
org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:441)
[JAWS]  at java.lang.reflect.Method.invoke(Native Method)
[JAWS]  at
org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:639)
[JAWS]  at
org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:160)
[JAWS]  at
org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:87)
[JAWS]  at
org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:135)
[JAWS]  at
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:263)
[JAWS]  at
org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:86)
[JAWS]  at
org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:164)
[JAWS]  at
org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:106)
[JAWS]  at
org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:316)
[JAWS]  at
org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRMPContainerInvoker.java:369)
[JAWS]  at java.lang.reflect.Method.invoke(Native Method)
[JAWS]  at
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
[JAWS]  at sun.rmi.transport.Transport$1.run(Transport.java:142)
[JAWS]  at java.security.AccessController.doPrivileged(Native Method)
[JAWS]  at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
[JAWS]  at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)
[JAWS]  at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)
[JAWS]  at java.lang.Thread.run(Thread.java:484)

The following code reproduces the problem. 

Test interface code:

package proftest;

import java.rmi.RemoteException;
import javax.ejb.EJBHome;
import javax.ejb.Handle;
import javax.ejb.EJBObject;

public interface Test extends EJBObject {
  public void store(byte data[]) throws RemoteException;
  public byte[] restore() throws RemoteException;
}

TestHome code:

package proftest;

import java.rmi.RemoteException;
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import javax.ejb.FinderException;

public interface TestHome extends EJBHome {
  public Test create(String key, byte data[] ) throws RemoteException,
CreateException;
  public Test findByPrimaryKey(String key) throws RemoteException,
FinderException;
}


TestBean code:

package proftest;

import javax.ejb.EntityBean;
import javax.ejb.EntityContext;

public class TestBean implements EntityBean {

  public String key;
  public byte data[];

  public String ejbCreate(String key, byte data[] ) {
    this.key=key;
    this.data=data;
    return null;
  }

  public void ejbPostCreate(String key, byte data[] ) {
  }

  public void store(byte data[]) {
    this.data=data;
  }

  public byte[] restore() {
    return data;
  }

  public void ejbActivate() throws javax.ejb.EJBException,
java.rmi.RemoteException {}
  public void ejbLoad() throws javax.ejb.EJBException,
java.rmi.RemoteException {}
  public void ejbPassivate() throws javax.ejb.EJBException,
java.rmi.RemoteException {}
  public void ejbRemove() throws javax.ejb.RemoveException,
javax.ejb.EJBException, java.rmi.RemoteException {}
  public void ejbStore() throws javax.ejb.EJBException,
java.rmi.RemoteException {}
  public void setEntityContext(EntityContext parm1) throws
javax.ejb.EJBException, java.rmi.RemoteException {}
  public void unsetEntityContext() throws javax.ejb.EJBException,
java.rmi.RemoteException {}
}



Client program:

package proftest;

import javax.naming.Context;

public class Client {

  public static void main(String[] args) {
    try {
     
System.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
      System.setProperty("java.naming.provider.url","localhost:1099");
      Context jndiContext=new javax.naming.InitialContext();
      Object obj = jndiContext.lookup("Test");
      TestHome testHome =
          (TestHome)javax.rmi.PortableRemoteObject.narrow(obj,
TestHome.class);
      byte data[]=new byte[5];
      for ( byte i=0; i<4; i++ )
        data[i]=i;

      testHome.create("test",data);
    } catch (Exception ex ) {
      ex.printStackTrace(System.err);
    }
  }
}

The ejb-jar file is:

<ejb-jar>
     <enterprise-beans>
       <entity>
         <description>Test of CMP for byte[] </description>
         <ejb-name>Test</ejb-name>
         <home>proftest.TestHome</home>
         <remote>proftest.Test</remote>
         <ejb-class>proftest.TestBean</ejb-class>
         <persistence-type>Container</persistence-type>
         <prim-key-class>java.lang.String</prim-key-class>
         <reentrant>False</reentrant>
         <cmp-field>
           <field-name>key</field-name>
         </cmp-field>
         <cmp-field>
           <field-name>data</field-name>
         </cmp-field>
         <primkey-field>key</primkey-field>
       </entity>
    </enterprise-beans>
</ejb-jar>

_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to