facebook

Unable to reverse engineer an Interbase database with Hibern

  1. MyEclipse Archived
  2.  > 
  3. Database Tools (DB Explorer, Hibernate, etc.)
Viewing 9 posts - 1 through 9 (of 9 total)
  • Author
    Posts
  • #247682 Reply

    Hi, All,

    Using MyEclipse 4.1.1, I am unable to reverse engineer an Interbase 7.1 database using the Interclient driver provided by Borland. I receive the following error:

    An internal error occurred during: “Generating Artifacts”.

    no matter which table I try to reverse engineer. Any thoughts?

    And, while off-topic (to a certain extent), you folks should know this: We’re currently a Delphi shop, looking to go either DotNet or Java. I paid for my MyEclipse subscription out of my own pocket this year in an attempt to convince the PHB’s that Java, Eclipse, and MyEclipse are the way we need to go for the future. Don’t let me down! 🙂

    Thanks very much for your help!

    Brian

    
    *** Date: Fri Mar 03 09:10:37 CST 2006
    
    *** System properties:
    OS=WindowsXP
    OS version=5.1
    Java version=1.5.0_03
    
    *** MyEclipse details:
    MyEclipse Enterprise Workbench
    
    Version: 4.1.1 GA
    Build id: 20060228-4.1.1-GA
    
    *** Eclipse details:
    Eclipse SDK
    
    Version: 3.1.0
    Build id: I20050627-1435
    
    Eclipse Platform
    
    Version: 3.1.0
    Build id: I20050627-1435
    
    Eclipse RCP
    
    Version: 3.1.0
    Build id: I20050627-1435
    
    Eclipse Java Development Tools
    
    Version: 3.1.0
    Build id: I20050627-1435
    
    Eclipse Plug-in Development Environment
    
    Version: 3.1.0
    Build id: I20050627-1435
    
    Eclipse Project SDK
    
    Version: 3.1.0
    Build id: I20050627-1435
    
    Eclipse startup command=-os
    win32
    -ws
    win32
    -arch
    x86
    -launcher
    C:\eclipse\eclipse.exe
    -name
    Eclipse
    -showsplash
    600
    -exitdata
    12a8_78
    -vm
    C:\WINDOWS\system32\javaw.exe
    
    
    
    !ENTRY org.eclipse.core.runtime 4 2 2006-03-03 08:59:28.356
    !MESSAGE An internal error occurred during: "Generating Artifacts".
    !STACK 0
    org.hibernate.exception.GenericJDBCException: Error while reading column meta data for CUSTOMERMASTER
        at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:91)
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:79)
        at org.hibernate.cfg.reveng.dialect.JDBCMetaDataDialect.getColumns(JDBCMetaDataDialect.java:232)
        at org.hibernate.cfg.reveng.JDBCReader.processBasicColumns(JDBCReader.java:486)
        at org.hibernate.cfg.reveng.JDBCReader.readDatabaseSchema(JDBCReader.java:70)
        at com.genuitec.eclipse.hibernate.wizards.MEJDBCMetaDataConfiguration$1.readDatabaseSchema(MEJDBCMetaDataConfiguration.java:102)
        at org.hibernate.cfg.JDBCBinder.readFromDatabase(JDBCBinder.java:87)
        at com.genuitec.eclipse.hibernate.wizards.MEJDBCMetaDataConfiguration.readFromJDBC(MEJDBCMetaDataConfiguration.java:129)
        at com.genuitec.eclipse.hibernate.wizards.GenerateArtifactsJob$5.execute(GenerateArtifactsJob.java:405)
        at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:35)
        at org.hibernate.console.ConsoleConfiguration.execute(ConsoleConfiguration.java:68)
        at com.genuitec.eclipse.hibernate.wizards.GenerateArtifactsJob.buildConfiguration(GenerateArtifactsJob.java:400)
        at com.genuitec.eclipse.hibernate.wizards.GenerateArtifactsJob.run(GenerateArtifactsJob.java:266)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76)
    Caused by: interbase.interclient.ParameterIndexOutOfBoundsException: [interclient] Invalid argument: Input parameter index 2 is out of range.
    See API reference for exception interbase.interclient.ParameterIndexOutOfBoundsException
        at interbase.interclient.PreparedStatement.getParameterIBType(Unknown Source)
        at interbase.interclient.PreparedStatement.setString(Unknown Source)
        at interbase.interclient.DatabaseMetaData.getColumns(Unknown Source)
        at org.hibernate.cfg.reveng.dialect.JDBCMetaDataDialect.getColumns(JDBCMetaDataDialect.java:210)
        ... 11 more
    
    #247700 Reply

    Haris Peco
    Member

    brianjuergensmeyer,

    Can you send us ddl script for your table ?

    best

    #247701 Reply

    Hi,

    This is the DDL for the table.

    Thanks,

    Brian

    
    
    CREATE TABLE CUSTOMERMASTER 
    (
      COMP_NBR    VARCHAR(2),
      CUST_NBR    VARCHAR(8),
      NAME    VARCHAR(30),
      TAG    VARCHAR(8),
      SORT_NAME    VARCHAR(30),
      COLOR    INTEGER,
      ADDR1    VARCHAR(30),
      ADDR2    VARCHAR(30),
      ADDR3    VARCHAR(30),
      CITY    VARCHAR(16),
      STATE    VARCHAR(2),
      ZIP    VARCHAR(10),
      CUST_TYPE    VARCHAR(1),
      PRIORITY    VARCHAR(2),
      NXT_JOB_NBR    INTEGER,
      NXT_QTE_NBR    INTEGER,
      MAIL_CODE    VARCHAR(1),
      PRINT_INVOICE_REPORT    VARCHAR(1),
      BILLING_REF_NBR    VARCHAR(8),
      NOT_INV_AMT    DOUBLE PRECISION,
      OPEN_AR_BAL    DOUBLE PRECISION,
      ORDER_AMT    DOUBLE PRECISION,
      BEG_BAL    DOUBLE PRECISION,
      SALES_YTD    DOUBLE PRECISION,
      SALES_PTD    DOUBLE PRECISION,
      PAYMENTS_PTD    DOUBLE PRECISION,
      ADJUSTMENTS_PTD    DOUBLE PRECISION,
      DATE_FIRST_ORDER    TIMESTAMP,
      DATE_LAST_ORDER    TIMESTAMP,
      DATE_LAST_PAYMENT    TIMESTAMP,
      DATE_LAST_INVOICE    TIMESTAMP,
      DATE_CREDIT_HOLD    TIMESTAMP,
      CREDIT_LIMIT    DOUBLE PRECISION,
      HIGH_CREDIT    DOUBLE PRECISION,
      HIGH_CREDIT_DATE    TIMESTAMP,
      JOB_BREAK    VARCHAR(1),
      STATEMENT_CODE    VARCHAR(1),
      BILLING_CYCLE    VARCHAR(1),
      AUTO_JOB    VARCHAR(1),
      SALESMAN_NBR    VARCHAR(8),
      TAX_ID_NBR    VARCHAR(14),
      PO_REQ    VARCHAR(1),
      TAX_CODE    VARCHAR(2),
      TERMS_CODE    VARCHAR(1),
      PRICE_COLUMN_CODE    VARCHAR(1),
      CREDIT_CODE    VARCHAR(1),
      METRIC    VARCHAR(1),
      MINORITY    VARCHAR(1),
      STATE_JOB    VARCHAR(1),
      LOT_BLOCK    VARCHAR(1),
      PAY_WAITING    VARCHAR(1),
      MUST_QUOTE    VARCHAR(1),
      MUST_REVIEW    VARCHAR(1),
      RM_DEL_INV_DISP    VARCHAR(1),
      BM_DEL_INV_DISP    VARCHAR(1),
      RM_MIN_LOAD    VARCHAR(2),
      BM_MIN_LOAD    VARCHAR(2),
      DISC_ALLOWED    VARCHAR(1),
      DISC_TYPE    VARCHAR(1),
      DISC_BEFORE    DOUBLE PRECISION,
      DISC_AFTER    DOUBLE PRECISION,
      DISC_EFF_DATE    TIMESTAMP,
      DISC_DAYS    INTEGER,
      DISC_PRINT    VARCHAR(1),
      PAY_HABITS    VARCHAR(12),
      FIN_CHRG_AGING_METHOD    VARCHAR(1),
      REC_STATUS    VARCHAR(1),
      CREDIT_CONTROL    VARCHAR(1),
      TRANS_CODE    VARCHAR(4),
      MIX_RESTRICTION    VARCHAR(1),
      MAIL_STATE    VARCHAR(2) NOT NULL
    );
    SET TERM ^ ;
    
    
    /* Triggers only will work for SQL triggers */
    
    CREATE TRIGGER SET_CUSTOMER_MAIL_STATE_INSERT FOR CUSTOMERMASTER 
    ACTIVE BEFORE INSERT POSITION 0
    as BEGIN   IF (New.Mail_State = '') THEN       New.Mail_State = New.State; END
     ^
    
    CREATE TRIGGER SET_CUSTOMER_MAIL_STATE_UPDATE FOR CUSTOMERMASTER 
    ACTIVE BEFORE UPDATE POSITION 0
    as BEGIN   IF (New.Mail_State = '') THEN       New.Mail_State = New.State; END
     ^
    
    COMMIT WORK ^
    SET TERM ;^
    
    #247704 Reply

    Haris Peco
    Member

    Hello,

    I have tried your table with firebird 1.5 and it work.I would like try it on Interbase 7.1, but I haven’t database
    Is there download link for this databases ?

    However, my first advice – try find last jdbc drivers and set primary key.

    this is hbm.xml from firebird (MyEclipse make composite id for all columns because you haven’t primary key)

    
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse - Hibernate Tools
    -->
    <hibernate-mapping>
        <class name="com.genuitec.firebird.Customermaster" table="CUSTOMERMASTER">
            <composite-id name="id" class="com.genuitec.firebird.CustomermasterId">
                <key-property name="compNbr" type="string">
                    <column name="COMP_NBR" length="2" />
                </key-property>
                <key-property name="custNbr" type="string">
                    <column name="CUST_NBR" length="8" />
                </key-property>
                <key-property name="name" type="string">
                    <column name="NAME" length="30" />
                </key-property>
                <key-property name="tag" type="string">
                    <column name="TAG" length="8" />
                </key-property>
                <key-property name="sortName" type="string">
                    <column name="SORT_NAME" length="30" />
                </key-property>
                <key-property name="color" type="integer">
                    <column name="COLOR" />
                </key-property>
                <key-property name="addr1" type="string">
                    <column name="ADDR1" length="30" />
                </key-property>
                <key-property name="addr2" type="string">
                    <column name="ADDR2" length="30" />
                </key-property>
                <key-property name="addr3" type="string">
                    <column name="ADDR3" length="30" />
                </key-property>
                <key-property name="city" type="string">
                    <column name="CITY" length="16" />
                </key-property>
                <key-property name="state" type="string">
                    <column name="STATE" length="2" />
                </key-property>
                <key-property name="zip" type="string">
                    <column name="ZIP" length="10" />
                </key-property>
                <key-property name="custType" type="string">
                    <column name="CUST_TYPE" length="1" />
                </key-property>
                <key-property name="priority" type="string">
                    <column name="PRIORITY" length="2" />
                </key-property>
                <key-property name="nxtJobNbr" type="integer">
                    <column name="NXT_JOB_NBR" />
                </key-property>
                <key-property name="nxtQteNbr" type="integer">
                    <column name="NXT_QTE_NBR" />
                </key-property>
                <key-property name="mailCode" type="string">
                    <column name="MAIL_CODE" length="1" />
                </key-property>
                <key-property name="printInvoiceReport" type="string">
                    <column name="PRINT_INVOICE_REPORT" length="1" />
                </key-property>
                <key-property name="billingRefNbr" type="string">
                    <column name="BILLING_REF_NBR" length="8" />
                </key-property>
                <key-property name="notInvAmt" type="double">
                    <column name="NOT_INV_AMT" precision="15" scale="0" />
                </key-property>
                <key-property name="openArBal" type="double">
                    <column name="OPEN_AR_BAL" precision="15" scale="0" />
                </key-property>
                <key-property name="orderAmt" type="double">
                    <column name="ORDER_AMT" precision="15" scale="0" />
                </key-property>
                <key-property name="begBal" type="double">
                    <column name="BEG_BAL" precision="15" scale="0" />
                </key-property>
                <key-property name="salesYtd" type="double">
                    <column name="SALES_YTD" precision="15" scale="0" />
                </key-property>
                <key-property name="salesPtd" type="double">
                    <column name="SALES_PTD" precision="15" scale="0" />
                </key-property>
                <key-property name="paymentsPtd" type="double">
                    <column name="PAYMENTS_PTD" precision="15" scale="0" />
                </key-property>
                <key-property name="adjustmentsPtd" type="double">
                    <column name="ADJUSTMENTS_PTD" precision="15" scale="0" />
                </key-property>
                <key-property name="dateFirstOrder" type="timestamp">
                    <column name="DATE_FIRST_ORDER" length="19" />
                </key-property>
                <key-property name="dateLastOrder" type="timestamp">
                    <column name="DATE_LAST_ORDER" length="19" />
                </key-property>
                <key-property name="dateLastPayment" type="timestamp">
                    <column name="DATE_LAST_PAYMENT" length="19" />
                </key-property>
                <key-property name="dateLastInvoice" type="timestamp">
                    <column name="DATE_LAST_INVOICE" length="19" />
                </key-property>
                <key-property name="dateCreditHold" type="timestamp">
                    <column name="DATE_CREDIT_HOLD" length="19" />
                </key-property>
                <key-property name="creditLimit" type="double">
                    <column name="CREDIT_LIMIT" precision="15" scale="0" />
                </key-property>
                <key-property name="highCredit" type="double">
                    <column name="HIGH_CREDIT" precision="15" scale="0" />
                </key-property>
                <key-property name="highCreditDate" type="timestamp">
                    <column name="HIGH_CREDIT_DATE" length="19" />
                </key-property>
                <key-property name="jobBreak" type="string">
                    <column name="JOB_BREAK" length="1" />
                </key-property>
                <key-property name="statementCode" type="string">
                    <column name="STATEMENT_CODE" length="1" />
                </key-property>
                <key-property name="billingCycle" type="string">
                    <column name="BILLING_CYCLE" length="1" />
                </key-property>
                <key-property name="autoJob" type="string">
                    <column name="AUTO_JOB" length="1" />
                </key-property>
                <key-property name="salesmanNbr" type="string">
                    <column name="SALESMAN_NBR" length="8" />
                </key-property>
                <key-property name="taxIdNbr" type="string">
                    <column name="TAX_ID_NBR" length="14" />
                </key-property>
                <key-property name="poReq" type="string">
                    <column name="PO_REQ" length="1" />
                </key-property>
                <key-property name="taxCode" type="string">
                    <column name="TAX_CODE" length="2" />
                </key-property>
                <key-property name="termsCode" type="string">
                    <column name="TERMS_CODE" length="1" />
                </key-property>
                <key-property name="priceColumnCode" type="string">
                    <column name="PRICE_COLUMN_CODE" length="1" />
                </key-property>
                <key-property name="creditCode" type="string">
                    <column name="CREDIT_CODE" length="1" />
                </key-property>
                <key-property name="metric" type="string">
                    <column name="METRIC" length="1" />
                </key-property>
                <key-property name="minority" type="string">
                    <column name="MINORITY" length="1" />
                </key-property>
                <key-property name="stateJob" type="string">
                    <column name="STATE_JOB" length="1" />
                </key-property>
                <key-property name="lotBlock" type="string">
                    <column name="LOT_BLOCK" length="1" />
                </key-property>
                <key-property name="payWaiting" type="string">
                    <column name="PAY_WAITING" length="1" />
                </key-property>
                <key-property name="mustQuote" type="string">
                    <column name="MUST_QUOTE" length="1" />
                </key-property>
                <key-property name="mustReview" type="string">
                    <column name="MUST_REVIEW" length="1" />
                </key-property>
                <key-property name="rmDelInvDisp" type="string">
                    <column name="RM_DEL_INV_DISP" length="1" />
                </key-property>
                <key-property name="bmDelInvDisp" type="string">
                    <column name="BM_DEL_INV_DISP" length="1" />
                </key-property>
                <key-property name="rmMinLoad" type="string">
                    <column name="RM_MIN_LOAD" length="2" />
                </key-property>
                <key-property name="bmMinLoad" type="string">
                    <column name="BM_MIN_LOAD" length="2" />
                </key-property>
                <key-property name="discAllowed" type="string">
                    <column name="DISC_ALLOWED" length="1" />
                </key-property>
                <key-property name="discType" type="string">
                    <column name="DISC_TYPE" length="1" />
                </key-property>
                <key-property name="discBefore" type="double">
                    <column name="DISC_BEFORE" precision="15" scale="0" />
                </key-property>
                <key-property name="discAfter" type="double">
                    <column name="DISC_AFTER" precision="15" scale="0" />
                </key-property>
                <key-property name="discEffDate" type="timestamp">
                    <column name="DISC_EFF_DATE" length="19" />
                </key-property>
                <key-property name="discDays" type="integer">
                    <column name="DISC_DAYS" />
                </key-property>
                <key-property name="discPrint" type="string">
                    <column name="DISC_PRINT" length="1" />
                </key-property>
                <key-property name="payHabits" type="string">
                    <column name="PAY_HABITS" length="12" />
                </key-property>
                <key-property name="finChrgAgingMethod" type="string">
                    <column name="FIN_CHRG_AGING_METHOD" length="1" />
                </key-property>
                <key-property name="recStatus" type="string">
                    <column name="REC_STATUS" length="1" />
                </key-property>
                <key-property name="creditControl" type="string">
                    <column name="CREDIT_CONTROL" length="1" />
                </key-property>
                <key-property name="transCode" type="string">
                    <column name="TRANS_CODE" length="4" />
                </key-property>
                <key-property name="mixRestriction" type="string">
                    <column name="MIX_RESTRICTION" length="1" />
                </key-property>
                <key-property name="mailState" type="string">
                    <column name="MAIL_STATE" length="2" />
                </key-property>
            </composite-id>
        </class>
    </hibernate-mapping>
    
    #247708 Reply

    Hmmm.. Well, as I’m still fairly new to this, it is certainly possible that I’m doing something wrong. If you wish, you can go to http://www.borland.com/downloads/download_interbase.html and get a demo version of IB 7.5.1 (I need to update from IB 7.1 myself).

    Although, it is entirely possible that Firebird is more functional than Interbase is in this respect.

    Thanks,

    Brian

    #247709 Reply

    Haris Peco
    Member

    Brian,

    I will try your case with Intebase 7.5.1 (linux, but it’s same probably).You can upgrade , if it possible – jdbc drivers make troubles often and it’s better that you try latest version – ‘broken driver’ can be reason for your error

    I will send you my results with 7.5.1 soon

    Best

    #247718 Reply

    Haris Peco
    Member

    Brian,

    I reproduce your case with 7.5.1 and I think that it is bug in interclient drivers.We can make workaround for interbase if this is important for you in future releases

    Explanation :

    Next DatabaseMetaData#getColumns work with mostly JDBC driver (including firebird JayBird driver)

    ResultSet rs = dm.getColumns(null,null,”CUSTOMERMASTER”,””);

    with interbase interclient driver it throw exception (you got it, too)

    Interbase interclient expect this :

    ResultSet rs = dm.getColumns(null,null,”CUSTOMERMASTER”,”%”);

    JDBC API doesn’t tell if parameter columnPattern (4th parameter) can be null or not, but mostly drivers handle
    null like “%”.

    This is test and you can try (only change parameters YOUR …) :

    Best

    
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.Driver;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import junit.framework.TestCase;
    
    public class InterbaseDriverTest extends TestCase {
    
        private String driverName = "interbase.interclient.Driver";
        // private String driverName = "org.firebirdsql.jdbc.FBDriver";
        private String url = "jdbc:interbase://YOUR_HOST/YOUR_DATABASE";
        // private String url = "jdbc:firebirdsql://YOUR_HOST/YOUR_DATABSE";
        private String username = "YOUR_USERNAME";
    
        private String password = "YOU_PASSWORD";
    
        private static Driver driver;
    
        public InterbaseDriverTest(String name) {
            super(name);
            if (driver == null) {
                try {
                    driver = (Driver) Class.forName(driverName).newInstance();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
        public void testGetColumns() {
            Connection con;
            try {
                con = getConnection();
                DatabaseMetaData dm = con.getMetaData();
                // doesn't work with Interbase 7.1,7.5.1
                // work with other JDBC drivers
                ResultSet rs = dm.getColumns(null,null,"CUSTOMERMASTER","");
                // this work with interclient, too
                // ResultSet rs = dm.getColumns(null,null,"CUSTOMERMASTER","%");
                while (rs.next()) {
                    String columnName = rs.getString("COLUMN_NAME");
                    System.out.println(columnName);
                }
            } catch (Throwable e) {
                e.printStackTrace();
            }
            
        }
        
        public Connection getConnection() throws SQLException {
            return DriverManager.getConnection(url, username, password);
        }
    
    }
    
    #248836 Reply

    Hi!

    @support-snpe wrote:

    Brian,

    I reproduce your case with 7.5.1 and I think that it is bug in interclient drivers.We can make workaround for interbase if this is important for you in future releases

    I’d be very grateful if you folks would put a work around in for this in the next build. I realize it isn’t your problem, but I expect that you’ll be a bit more responsive than Borland will if I hit them up about it.

    I also realize it has been a while sine I wrote in about this, so, if I don’t hear back from you by Monday, I’ll try to find some way to bump this so it doesn’t fall off your radar screen.

    Thanks again,

    Brian Juergensmeyer

    #248846 Reply

    Haris Peco
    Member

    Brian,

    I file your request and it will be reoslved in future releases

    Thanks

Viewing 9 posts - 1 through 9 (of 9 total)
Reply To: Unable to reverse engineer an Interbase database with Hibern

You must be logged in to post in the forum log in