Hi Alexey, I'm not a JPA team member, but I think you can/should submit your patches creating Jira issues and all the rest. I don't think anyone will have problems receiving a patch.
Simone Alexey Ousov wrote: > Hello All! > I'm trying to work with OpenJPA and Firebird database. The actual > environment is: Apache ODE BPEL engine under Apache Tomcat 5.5 which > uses OpenJPA with Firebird database. After some investigations > everything works, but with many limitations. These limitations I wish > to talk about. > > 1. OpenJPA doesn't work with latest Firebird JDBC drivers. Only very > old one, from year 2005 version "1.5.6" can be used. But even this is > not enough, version "1.5.6" which can be downloaded from > http://www.firebirdsql.org/index.php?op=files&id=jaybird doesn't have > "jaybird.dll" compiled, so for embedded mode I needed "jaybird.dll" > from pre-"1.5.6" release. The reason why it cannot be used is the > following exception: > org.firebirdsql.jdbc.FBSQLException: The result set is closed > at > org.firebirdsql.jdbc.AbstractResultSet.checkCursorMove(AbstractResultSet.java:217) > > at > org.firebirdsql.jdbc.AbstractResultSet.next(AbstractResultSet.java:249) > at > org.apache.openjpa.lib.jdbc.DelegatingResultSet.next(DelegatingResultSet.java:106) > > at > org.apache.openjpa.jdbc.sql.ResultSetResult.nextInternal(ResultSetResult.java:222) > > at > org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.nextInternal(SelectImpl.java:2285) > > at > org.apache.openjpa.jdbc.sql.AbstractResult.next(AbstractResult.java:169) > at > org.apache.openjpa.jdbc.meta.strats.StoreCollectionFieldStrategy.load(StoreCollectionFieldStrategy.java:476) > > at > org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:802) > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:520) > > ... 14 more > > I think the reason of this exception is discussed here: > http://tracker.firebirdsql.org/browse/JDBC-91 > > 2. Firebird sequences which are new in Firebird 2.x are not > implemented in Firebird dictionary. Even Firebird 1.5.x has sequences, > but their name was "Generators". Although I use pretty old JDBC > drivers, Firebird database version is 2.1.0. So I use following > temporary solution: > > import org.apache.openjpa.jdbc.schema.Sequence; > import org.apache.openjpa.jdbc.sql.FirebirdDictionary; > > public class Firebird2Dictionary extends FirebirdDictionary { > > public Firebird2Dictionary() { > super(); > > nextSequenceQuery = "SELECT NEXT VALUE FOR {0} FROM RDB$DATABASE"; > } > > @Override > public String[] getCreateSequenceSQL(Sequence seq) { > StringBuffer buf = new StringBuffer(); > buf.append("CREATE SEQUENCE "); > buf.append(getFullName(seq)); > return new String[]{ buf.toString() }; > } > > } > > 3. Native queries cannot be executed in resulting environment. > Although all named jpql queries executed successfully, native queries > throw the following exception: > > <openjpa-1.1.0-r422266:657916 nonfatal general error> > org.apache.openjpa.persistence.PersistenceException: You cannot set > value of an non-existing parameter.
 > org.apache.openjpa.jdbc.sql.SQLExceptions.narrow(SQLExceptions.java:146)
 > > org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4150)
 > > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
 > > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
 > > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
 > > org.apache.openjpa.jdbc.kernel.SQLStoreQuery$SQLExecutor.executeUpdate(SQLStoreQuery.java:237)
 > > org.apache.openjpa.kernel.QueryImpl.update(QueryImpl.java:1038)
 > org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:808)
 > org.apache.openjpa.kernel.QueryImpl.updateAll(QueryImpl.java:883)
 > org.apache.openjpa.kernel.DelegatingQuery.updateAll(DelegatingQuery.java:573)
 > > org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:319)
 > > 
 > ...
 > org.firebirdsql.jdbc.FBSQLException: You cannot set value of an > non-existing parameter.
 > org.firebirdsql.jdbc.FBProcedureCall$NullParam.setValue(FBProcedureCall.java:325)
 > > org.firebirdsql.jdbc.AbstractCallableStatement.setLong(AbstractCallableStatement.java:1042)
 > > org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.setLong(DelegatingPreparedStatement.java:120)
 > > org.apache.ode.utils.LoggingStatementWrapper.setLong(LoggingStatementWrapper.java:495)
 > > org.apache.openjpa.lib.jdbc.DelegatingCallableStatement.setLong(DelegatingCallableStatement.java:299)
 > > org.apache.openjpa.jdbc.sql.DBDictionary.setLong(DBDictionary.java:998)
 > > org.apache.openjpa.jdbc.sql.DBDictionary.setUnknown(DBDictionary.java:1283)
 > > org.apache.openjpa.jdbc.sql.SQLBuffer.setParameters(SQLBuffer.java:568)
 > > org.apache.openjpa.jdbc.kernel.SQLStoreQuery$SQLExecutor.executeUpdate(SQLStoreQuery.java:231)
 > > org.apache.openjpa.kernel.QueryImpl.update(QueryImpl.java:1038)
 > org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:808)
 > org.apache.openjpa.kernel.QueryImpl.updateAll(QueryImpl.java:883)
 > org.apache.openjpa.kernel.DelegatingQuery.updateAll(DelegatingQuery.java:573)
 > > org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:319)
 > > com.comped.TE.db.openjpa.DbQueryJpa.executeUpdate(DbQueryJpa.java:22)
 > > > The statement is: > insert into ANAGRAFICHE (COD_TITOLARE, NOME, CODICE_FISCALE, > DATA_NASCITA) values (?, ?, ?, ?) > This happens because query parameters are not parsed, and Firebird > thinks query doesn't have parameters. > > So finally this worths of 3 bug reports. Should I write them, or > Firebird support is something no one need, so it is dropped by OpenJPA > team? The actual blocker is third case above. I don't know if this bug > is inside Firebird JDBC drivers or in OpenJPA, because I cannot > upgrade to fresh JDBC driver. What do you think, how can I fix this > issue? > > Best regards, > Alexey Ousov -- Simone Gianni CEO Semeru s.r.l. Apache Committer http://www.simonegianni.it/
