Hi Marc, hi Aaron!
Now I made up a jaws.xlm and jboss.xlm file. The contents:
(as this will be stored in the mailing list archives: WARNING! These
settings do not work up to now. I'll post my complete settings again, as
soon as they work properly).
<?xml version="1.0" encoding="UTF-8"?>
<jaws>
<datasource>Hypersonic</datasource>
<type-mapping>InterbaseTypeMapping</type-mapping>
<type-mappings>
<type-mapping>
<name>InterbaseTypeMapping</name>
<mapping>
<java-type>java.lang.Long</java-type>
<jdbc-type>BIGINT</jdbc-type>
<sql-type>DOUBLE PRECISION</sql-type>
</mapping>
<mapping>
<java-type>java.lang.Byte</java-type>
<jdbc-type>TINYINT</jdbc-type>
<sql-type>TINYINT</sql-type>
</mapping>
<mapping>
<java-type>java.lang.Boolean</java-type>
<jdbc-type>CHAR</jdbc-type>
<sql-type>CHAR(5)</sql-type>
</mapping>
<mapping>
<java-type>java.lang.String</java-type>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>VARCHAR(256)</sql-type>
</mapping>
<mapping>
<java-type>java.lang.Character</java-type>
<jdbc-type>CHAR</jdbc-type>
<sql-type>CHAR</sql-type>
</mapping>
<mapping>
<java-type>java.lang.Short</java-type>
<jdbc-type>SMALLINT</jdbc-type>
<sql-type>SMALLINT</sql-type>
</mapping>
<mapping>
<java-type>java.sql.TimeStamp</java-type>
<jdbc-type>TIMESTAMP</jdbc-type>
<sql-type>DATE</sql-type>
</mapping>
<mapping>
<java-type>java.lang.Double</java-type>
<jdbc-type>DOUBLE</jdbc-type>
<sql-type>DOUBLE PRECISION</sql-type>
</mapping>
<mapping>
<java-type>java.lang.Float</java-type>
<jdbc-type>REAL</jdbc-type>
<sql-type>FLOAT</sql-type>
</mapping>
<mapping>
<java-type>java.lang.Object</java-type>
<jdbc-type>JAVA_OBJECT</jdbc-type>
<sql-type>ARRAY</sql-type>
</mapping>
<mapping>
<java-type>java.util.Date</java-type>
<jdbc-type>DATE</jdbc-type>
<sql-type>DATE</sql-type>
</mapping>
<mapping>
<java-type>java.lang.Integer</java-type>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER</sql-type>
</mapping>
</type-mapping>
</type-mappings>
</jaws>
<?xml version="1.0" encoding="Cp1252"?>
<jboss>
<resource-managers>
<resource-manager
res-class="org.jboss.ejb.deployment.JDBCResource">
<res-name>PK</res-name>
<res-jndi-name>Hypersonic</res-jndi-name>
</resource-manager>
</resource-managers>
</jboss>
Relevant trace part of jBoss deploying the TestBean:
[JAWS] Initializing JAWS plugin for nextgen.EntityPK
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[Container factory] Caught SQL NPE on JawsCMPField!
[Container factory] Caught JDBC NPE on JawsCMPField!
[JAWS] Init SQL: CREATE TABLE nextgen_EntityPK (aString
VARCHAR(256),otherField INTEGER,aLong DOUBLE PRECISION,aBoolean
CHAR(5),aDouble DOUBLE PRECISION,anInt INTEGER)
[JAWS] Destroy SQL: DROP TABLE nextgen_EntityPK
[JAWS] Exists SQL: SELECT COUNT(*) AS Total FROM nextgen_EntityPK WHERE
aBoolean=? AND anInt=? AND aLong=? AND aDouble=? AND aString=?
[JAWS] Create SQL: INSERT INTO nextgen_EntityPK
(aString,otherField,aLong,aBoolean,aDouble,anInt) VALUES (?,?,?,?,?,?)
[JAWS] Remove SQL: DELETE FROM nextgen_EntityPK WHERE aBoolean=? AND
anInt=? AND aLong=? AND aDouble=? AND aString=?
[JAWS] Load SQL: SELECT aString,otherField,aLong,aBoolean,aDouble,anInt
FROM nextgen_EntityPK WHERE aBoolean=? AND anInt=? AND aLong=? AND
aDouble=? AND aString=?
[JAWS] Init command executing: CREATE TABLE nextgen_EntityPK (aString
VARCHAR(256),otherField INTEGER,aLong DOUBLE PRECISION,aBoolean
CHAR(5),aDouble DOUBLE PRECISION,anInt INTEGER)
[JAWS] Rows affected = 0
[JAWS] Table nextgen_EntityPK created
When I start the test suite fails at test 81:
Test Entity Bean PK
====================
75- Looking up home for nextgen.EntityPK...ok
76- Calling find on the home...not found
77- Did not find the instance will create it...ok
78- Retrieving other field...0, ok
79- Setting it to 4...ok
80- Findind it again ... ok
81- Retrieving other field again, should be
4...java.lang.reflect.UndeclaredThrowableException:
java.rmi.ServerException: RemoteException occurred in server thread;
nested exception is:
<snip>
Server trace:
[JAWS] Create command executing: INSERT INTO nextgen_EntityPK
(aString,otherField,aLong,aBoolean,aDouble,anInt) VALUES (?,?,?,?,?,?)
[JAWS] Set parameter: idx=1, jdbcType=VARCHAR, value=Marc
[JAWS] Set parameter: idx=2, jdbcType=INTEGER, value=0
[JAWS] Set parameter: idx=3, jdbcType=BIGINT, value=100
[JAWS] Set parameter: idx=4, jdbcType=CHAR, value=true
[JAWS] Set parameter: idx=5, jdbcType=DOUBLE, value=100.0
[JAWS] Set parameter: idx=6, jdbcType=INTEGER, value=10
[JAWS] Rows affected = 1
[nextgen.EntityPK] EntityPK.ejbPostCreate(pk) called
[nextgen.EntityPK] commiting
[nextgen.EntityPK] beforeCompletion called
[nextgen.EntityPK] afterCompletion called
[nextgen.EntityPK] TX_REQUIRED for getOtherField
[nextgen.EntityPK] Begin tx
[nextgen.EntityPK] Tx is tx:Xid:553
[nextgen.EntityPK] commiting
[nextgen.EntityPK] beforeCompletion called
[nextgen.EntityPK] EntityPK.ejbStore() called
[nextgen.EntityPK] afterCompletion called
[nextgen.EntityPK] TX_REQUIRED for setOtherField
[nextgen.EntityPK] Begin tx
[nextgen.EntityPK] Tx is tx:Xid:554
[nextgen.EntityPK] commiting
[nextgen.EntityPK] beforeCompletion called
[nextgen.EntityPK] EntityPK.ejbStore() called
[JAWS] Store command executing: UPDATE nextgen_EntityPK SET otherField=?
WHERE aBoolean=? AND anInt=? AND aLong=? AND aDouble=? AND aString=?
[JAWS] Set parameter: idx=1, jdbcType=INTEGER, value=4
[JAWS] Set parameter: idx=2, jdbcType=CHAR, value=true
[JAWS] Set parameter: idx=3, jdbcType=INTEGER, value=10
[JAWS] Set parameter: idx=4, jdbcType=BIGINT, value=100
[JAWS] Set parameter: idx=5, jdbcType=DOUBLE, value=100.0
[JAWS] Set parameter: idx=6, jdbcType=VARCHAR, value=Marc
[JAWS] Rows affected = 1
[nextgen.EntityPK] afterCompletion called
[Default] JRMPCI:invokeHome findByPrimaryKey
[Default] Tx is null
[Default] invokeHome
[nextgen.EntityPK] TX_REQUIRED for findByPrimaryKey
[nextgen.EntityPK] Begin tx
[nextgen.EntityPK] EntityPK.setSessionContext() called
[JAWS] Exists command executing: SELECT COUNT(*) AS Total FROM
nextgen_EntityPK WHERE aBoolean=? AND anInt=? AND aLong=? AND aDouble=?
AND aString=?
[JAWS] Set parameter: idx=1, jdbcType=CHAR, value=true
[JAWS] Set parameter: idx=2, jdbcType=INTEGER, value=10
[JAWS] Set parameter: idx=3, jdbcType=BIGINT, value=100
[JAWS] Set parameter: idx=4, jdbcType=DOUBLE, value=100.0
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=Marc
[nextgen.EntityPK] commiting
[nextgen.EntityPK] TX_REQUIRED for getOtherField
[nextgen.EntityPK] Begin tx
[nextgen.EntityPK] EntityPK.ejbActivate() called
[JAWS] Load command executing: SELECT
aString,otherField,aLong,aBoolean,aDouble,anInt FROM nextgen_EntityPK
WHERE aBoolean=? AND anInt=? AND aLong=? AND aDouble=? AND aString=?
[JAWS] Set parameter: idx=1, jdbcType=CHAR, value=true
[JAWS] Set parameter: idx=2, jdbcType=INTEGER, value=10
[JAWS] Set parameter: idx=3, jdbcType=BIGINT, value=100
[JAWS] Set parameter: idx=4, jdbcType=DOUBLE, value=100.0
[JAWS] Set parameter: idx=5, jdbcType=VARCHAR, value=Marc
[JAWS] Got result: idx=1, value=Marc, class=java.lang.String,
JDBCtype=VARCHAR
[JAWS] Got result: idx=2, value=4, class=java.lang.Integer,
JDBCtype=INTEGER
[JAWS] Got result: idx=3, value=100.0, class=java.lang.Double,
JDBCtype=BIGINT
[nextgen.EntityPK] commiting
[nextgen.EntityPK] Load failed; nested exception is:
java.rmi.ServerException: Load failed; nested exception is:
java.lang.IllegalArgumentException: argument type mismatch
[Default] java.rmi.ServerException: Load failed; nested exception is:
java.rmi.ServerException: Load failed; nested exception is:
java.lang.IllegalArgumentException: argument type mismatch
[Default] java.rmi.ServerException: Load failed; nested exception is:
java.lang.IllegalArgumentException: argument type mismatch
at java.lang.reflect.Field.set(Native Method)
at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.setCMPFieldValue(JDBCCommand.java:567)
at
org.jboss.ejb.plugins.jaws.jdbc.JDBCLoadEntityCommand.handleResult(JDBCLoadEntityCommand.java:199)[Default]
java.lang.IllegalArgumentException: argument type mismatch
at
org.jboss.ejb.plugins.jaws.jdbc.JDBCQueryCommand.executeStatementAndHandleResult(JDBCQueryCommand.java:59)
at
org.jboss.ejb.plugins.jaws.jdbc.JDBCCommand.jdbcExecute(JDBCCommand.java:122)
at
org.jboss.ejb.plugins.jaws.jdbc.JDBCLoadEntityCommand.execute(JDBCLoadEntityCommand.java:93)
at
org.jboss.ejb.plugins.jaws.JAWSPersistenceManager.loadEntity(JAWSPersistenceManager.java:150)
at
org.jboss.ejb.plugins.CMPPersistenceManager.loadEntity(CMPPersistenceManager.java:205)
at
org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:166)
at
org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:106)
at
org.jboss.ejb.plugins.TxInterceptor.invokeNext(TxInterceptor.java:128)
at
org.jboss.ejb.plugins.TxInterceptor.runWithTransactions(TxInterceptor.java:189)
at org.jboss.ejb.plugins.TxInterceptor.invoke(TxInterceptor.java:96)
at
org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:140)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:156)
at org.jboss.ejb.EntityContainer.invoke(EntityContainer.java:320)
at
org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:202)
at
org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:179)
at java.lang.reflect.Method.invoke(Native Method)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:241)
at sun.rmi.transport.Transport$1.run(Transport.java:142)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:443)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:643)
at java.lang.Thread.run(Thread.java:484)
The test suite stops after this exception.
Could it be, that I am still using some wrong mappings ? How to map
boolean when no BIT is available ?
Thanks a lot,
Tobias
marc fleury wrote:
>
> > [JAWS] java.lang.reflect.InvocationTargetException:
> > interbase.interclient.SQLException: [interclient][interbase] Dynamic SQL
> > Error
> > [JAWS] SQL error code = -204
> > [JAWS] Table unknown
> > [JAWS] NEXTGEN_ENTITYPK
>
> It seems the table is never created. This means that jaws w/ interbase
> chokes on one of the fields of the Primary key at creation time (boolean,
> int, long, double, String), try to look for the stack trace of startup and
> tell me what the server says at deployment time when it tries to create the
> schema...
>
> And your other tables create fine, yes? (field-CMP and BMP) (obviously since
> you run to 77 :(
>
> marc
--
--------------------------------------------------------------
To subscribe: [EMAIL PROTECTED]
To unsubscribe: [EMAIL PROTECTED]
Problems?: [EMAIL PROTECTED]