You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Michael Dick <mi...@gmail.com> on 2009/06/16 20:04:37 UTC

Re: svn commit: r782338 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc: meta/strats/ sql/

I don't have a Java 6 configuration for MySQL, but I do run Sun JDK 5&6 and
IBM SDK 5&6 with Derby every night. These builds are passing now.

-mike

On Tue, Jun 16, 2009 at 12:52 PM, Craig L Russell <Cr...@sun.com>wrote:

> Hi,
>
> Has this change been tested with JDK 5 and JDK 6? I thought the reason for
> the reflection stuff was the incompatibility between JDBC3 and JDBC4 so you
> couldn't write the same code for both platforms.
>
> I might (probably?) have missed the discussion on how to resolve
> http://issues.apache.org/jira/browse/OPENJPA-5 which is central to this
> issue.
>
> Craig
>
>
> On Jun 7, 2009, at 1:13 AM, mtylenda@apache.org wrote:
>
>  Author: mtylenda
>> Date: Sun Jun  7 08:13:41 2009
>> New Revision: 782338
>>
>> URL: http://svn.apache.org/viewvc?rev=782338&view=rev
>> Log:
>> OPENJPA-1122: Remove JDBC 3 related reflection from DBDictionary
>>
>> Modified:
>>
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
>>
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
>>
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
>>
>> Modified:
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
>> URL:
>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>
>> ==============================================================================
>> ---
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
>> (original)
>> +++
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
>> Sun Jun  7 08:13:41 2009
>> @@ -18,6 +18,7 @@
>>  */
>> package org.apache.openjpa.jdbc.meta.strats;
>>
>> +import java.sql.Blob;
>> import java.sql.ResultSet;
>> import java.sql.SQLException;
>>
>> @@ -89,7 +90,7 @@
>>        DBDictionary dict)
>>        throws SQLException {
>>        byte[] b = (byte[]) sm.setImplData(field.getIndex(), null);
>> -        Object blob = rs.getBlob(1);
>> +        Blob blob = rs.getBlob(1);
>>        dict.putBytes(blob, b);
>>    }
>>
>>
>> Modified:
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>> URL:
>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>
>> ==============================================================================
>> ---
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>> (original)
>> +++
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>> Sun Jun  7 08:13:41 2009
>> @@ -19,6 +19,7 @@
>> package org.apache.openjpa.jdbc.meta.strats;
>>
>> import java.lang.reflect.Array;
>> +import java.sql.Blob;
>> import java.sql.ResultSet;
>> import java.sql.SQLException;
>>
>> @@ -72,7 +73,7 @@
>>    protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>        DBDictionary dict)
>>        throws SQLException {
>> -        Object blob = rs.getBlob(1);
>> +        Blob blob = rs.getBlob(1);
>>        dict.putBytes(blob,
>> PrimitiveWrapperArrays.toByteArray(sm.fetchObject
>>            (field.getIndex())));
>>    }
>> @@ -80,7 +81,7 @@
>>    protected Object load(Column col, Result res, Joins joins)
>>        throws SQLException {
>>        return PrimitiveWrapperArrays.toObjectValue(field,
>> -            (byte[]) res.getBytes(col, joins));
>> +            res.getBytes(col, joins));
>>    }
>>
>>    public void map(boolean adapt) {
>>
>> Modified:
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>> URL:
>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>
>> ==============================================================================
>> ---
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>> (original)
>> +++
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>> Sun Jun  7 08:13:41 2009
>> @@ -23,6 +23,7 @@
>> import java.io.IOException;
>> import java.io.Reader;
>> import java.lang.reflect.Array;
>> +import java.sql.Clob;
>> import java.sql.ResultSet;
>> import java.sql.SQLException;
>>
>> @@ -77,7 +78,7 @@
>>    protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>        DBDictionary dict)
>>        throws SQLException {
>> -        Object clob = rs.getClob(1);
>> +        Clob clob = rs.getClob(1);
>>        dict.putChars(clob, PrimitiveWrapperArrays.
>>            toCharArray(sm.fetchObject(field.getIndex())));
>>    }
>>
>> Modified:
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
>> URL:
>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>
>> ==============================================================================
>> ---
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
>> (original)
>> +++
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
>> Sun Jun  7 08:13:41 2009
>> @@ -18,6 +18,7 @@
>>  */
>> package org.apache.openjpa.jdbc.meta.strats;
>>
>> +import java.sql.Clob;
>> import java.sql.ResultSet;
>> import java.sql.SQLException;
>>
>> @@ -66,7 +67,7 @@
>>    protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>        DBDictionary dict)
>>        throws SQLException {
>> -        Object clob = rs.getClob(1);
>> +        Clob clob = rs.getClob(1);
>>        dict.putString(clob, sm.fetchString(field.getIndex()));
>>    }
>>
>>
>> Modified:
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
>> URL:
>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
>>
>> ==============================================================================
>> ---
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
>> (original)
>> +++
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
>> Sun Jun  7 08:13:41 2009
>> @@ -28,8 +28,6 @@
>> import java.io.Reader;
>> import java.io.StringReader;
>> import java.io.Writer;
>> -import java.lang.reflect.InvocationTargetException;
>> -import java.lang.reflect.Method;
>> import java.math.BigDecimal;
>> import java.math.BigInteger;
>> import java.sql.Array;
>> @@ -394,11 +392,6 @@
>>    // first time it happens we can warn the user
>>    private Set _precisionWarnedTypes = null;
>>
>> -    // cache lob methods
>> -    private Method _setBytes = null;
>> -    private Method _setString = null;
>> -    private Method _setCharStream = null;
>> -
>>    // batchLimit value:
>>    // -1 = unlimited
>>    // 0  = no batch
>> @@ -1421,55 +1414,27 @@
>>    /**
>>     * Invoke the JDK 1.4 <code>setBytes</code> method on the given BLOB
>> object.
>>     */
>> -    public void putBytes(Object blob, byte[] data)
>> +    public void putBytes(Blob blob, byte[] data)
>>        throws SQLException {
>> -        if (_setBytes == null) {
>> -            try {
>> -                _setBytes = blob.getClass().getMethod("setBytes",
>> -                    new Class[]{ long.class, byte[].class });
>> -            } catch (Exception e) {
>> -                throw new StoreException(e);
>> -            }
>> -        }
>> -        invokePutLobMethod(_setBytes, blob,
>> -            new Object[]{ Numbers.valueOf(1L), data });
>> +        blob.setBytes(1L, data);
>>    }
>>
>>    /**
>>     * Invoke the JDK 1.4 <code>setString</code> method on the given CLOB
>>     * object.
>>     */
>> -    public void putString(Object clob, String data)
>> +    public void putString(Clob clob, String data)
>>        throws SQLException {
>> -        if (_setString == null) {
>> -            try {
>> -                _setString = clob.getClass().getMethod("setString",
>> -                    new Class[]{ long.class, String.class });
>> -            } catch (Exception e) {
>> -                throw new StoreException(e);
>> -            }
>> -        }
>> -        invokePutLobMethod(_setString, clob,
>> -            new Object[]{ Numbers.valueOf(1L), data });
>> +        clob.setString(1L, data);
>>    }
>>
>>    /**
>>     * Invoke the JDK 1.4 <code>setCharacterStream</code> method on the
>> given
>>     * CLOB object.
>>     */
>> -    public void putChars(Object clob, char[] data)
>> +    public void putChars(Clob clob, char[] data)
>>        throws SQLException {
>> -        if (_setCharStream == null) {
>> -            try {
>> -                _setCharStream = clob.getClass().getMethod
>> -                    ("setCharacterStream", new Class[]{ long.class });
>> -            } catch (Exception e) {
>> -                throw new StoreException(e);
>> -            }
>> -        }
>> -
>> -        Writer writer = (Writer) invokePutLobMethod(_setCharStream, clob,
>> -            new Object[]{ Numbers.valueOf(1L) });
>> +        Writer writer = clob.setCharacterStream(1L);
>>        try {
>>            writer.write(data);
>>            writer.flush();
>> @@ -1479,24 +1444,6 @@
>>    }
>>
>>    /**
>> -     * Invoke the given LOB method on the given target with the given
>> data.
>> -     */
>> -    private static Object invokePutLobMethod(Method method, Object
>> target,
>> -        Object[] args)
>> -        throws SQLException {
>> -        try {
>> -            return method.invoke(target, args);
>> -        } catch (InvocationTargetException ite) {
>> -            Throwable t = ite.getTargetException();
>> -            if (t instanceof SQLException)
>> -                throw(SQLException) t;
>> -            throw new StoreException(t);
>> -        } catch (Exception e) {
>> -            throw new StoreException(e);
>> -        }
>> -    }
>> -
>> -    /**
>>     * Warn that a particular value could not be stored precisely.
>>     * After the first warning for a particular type, messages
>>     * will be turned into trace messages.
>>
>> Modified:
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
>> URL:
>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
>>
>> ==============================================================================
>> ---
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
>> (original)
>> +++
>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
>> Sun Jun  7 08:13:41 2009
>> @@ -949,7 +949,7 @@
>>     * vendor-specific class; for example Weblogic wraps oracle thin driver
>>     * lobs in its own interfaces with the same methods.
>>     */
>> -    public void putBytes(Object blob, byte[] data)
>> +    public void putBytes(Blob blob, byte[] data)
>>        throws SQLException {
>>        if (blob == null)
>>            return;
>> @@ -970,7 +970,7 @@
>>     * vendor-specific class; for example Weblogic wraps oracle thin driver
>>     * lobs in its own interfaces with the same methods.
>>     */
>> -    public void putString(Object clob, String data)
>> +    public void putString(Clob clob, String data)
>>        throws SQLException {
>>        if (_putString == null) {
>>            try {
>> @@ -989,7 +989,7 @@
>>     * vendor-specific class; for example Weblogic wraps oracle thin driver
>>     * lobs in its own interfaces with the same methods.
>>     */
>> -    public void putChars(Object clob, char[] data)
>> +    public void putChars(Clob clob, char[] data)
>>        throws SQLException {
>>        if (_putChars == null) {
>>            try {
>>
>>
>>
> Craig L Russell
> Architect, Sun Java Enterprise System http://db.apache.org/jdo
> 408 276-5638 mailto:Craig.Russell@sun.com
> P.S. A good JDO? O, Gasp!
>
>

Re: svn commit: r782338 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc: meta/strats/ sql/

Posted by Miłosz Tylenda <mt...@o2.pl>.
Hi!

I have built OpenJPA with JDK 6 and run persistence-jdbc tests with JDK 5. Did not see any impact. However the mentioned methods are not used now, so I tested the streaming LOB (which alos uses Blob/Clob without reflection) functionality and I did not see impact either.

I have also tried running the test suite with JDK 6 but it always hangs at first test from persistence-jdbc, no matter what JDK I used during build. Probably I have again the classloader problem I recently described in a different post.

Regards,
Milosz


> Hi Craig & Mike,
> 
> I believe the reflection mentioned was introduced in order to compile with JDK 1.3 (JDBC 2) and use JDK 1.4 (JDBC 3) methods on Blob/Clob and has nothing to do with JDK 5/6 (i.e. JDBC 3/4).
> 
> I haven't tried to build with JDK 6 and run with JDK 5 yet. However, why do you think it won't run? We are using only JDK 5 and below methods.
> 
> If this proves to be a problem then the problem is a little broader - for example we use Blob methods in DBDictionary.updateBlob method (streaming BLOB functionality).
> 
> Cheers,
> Milosz
> 
> 
> > Hi Craig,
> > 
> > Thanks for the explanation. The tests always build from scratch, currently.
> > I could certainly add tests that build with one and run with the other (or
> > both) though.
> > 
> > -mike
> > 
> > On Tue, Jun 16, 2009 at 1:16 PM, Craig L Russell wrote:
> > 
> > > Hi Mike,
> > >
> > > The code will work if you build from source and run on the same platform
> > > you compiled on.
> > >
> > > But a binary distribution won't work (IIRC) if you run on a different
> > > platform than what the distribution was built with.
> > >
> > > Do your tests compile on 6 and run on both 5 and 6?
> > >
> > > Thanks,
> > >
> > > Craig
> > >
> > >
> > > On Jun 16, 2009, at 11:04 AM, Michael Dick wrote:
> > >
> > >  I don't have a Java 6 configuration for MySQL, but I do run Sun JDK 5&6
> > >> and
> > >> IBM SDK 5&6 with Derby every night. These builds are passing now.
> > >>
> > >> -mike
> > >>
> > >> On Tue, Jun 16, 2009 at 12:52 PM, Craig L Russell > >wrote:
> > >>
> > >>  Hi,
> > >>>
> > >>> Has this change been tested with JDK 5 and JDK 6? I thought the reason
> > >>> for
> > >>> the reflection stuff was the incompatibility between JDBC3 and JDBC4 so
> > >>> you
> > >>> couldn't write the same code for both platforms.
> > >>>
> > >>> I might (probably?) have missed the discussion on how to resolve
> > >>> http://issues.apache.org/jira/browse/OPENJPA-5 which is central to this
> > >>> issue.
> > >>>
> > >>> Craig
> > >>>
> > >>>
> > >>> On Jun 7, 2009, at 1:13 AM, mtylenda@apache.org wrote:
> > >>>
> > >>> Author: mtylenda
> > >>>
> > >>>> Date: Sun Jun  7 08:13:41 2009
> > >>>> New Revision: 782338
> > >>>>
> > >>>> URL: http://svn.apache.org/viewvc?rev=782338&view=rev
> > >>>> Log:
> > >>>> OPENJPA-1122: Remove JDBC 3 related reflection from DBDictionary
> > >>>>
> > >>>> Modified:
> > >>>>
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
> > >>>>
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
> > >>>>
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
> > >>>>
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
> > >>>>
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
> > >>>>
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
> > >>>>
> > >>>> Modified:
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
> > >>>> URL:
> > >>>>
> > >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
> > >>>>
> > >>>>
> > >>>> ==============================================================================
> > >>>> ---
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
> > >>>> (original)
> > >>>> +++
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
> > >>>> Sun Jun  7 08:13:41 2009
> > >>>> @@ -18,6 +18,7 @@
> > >>>> */
> > >>>> package org.apache.openjpa.jdbc.meta.strats;
> > >>>>
> > >>>> +import java.sql.Blob;
> > >>>> import java.sql.ResultSet;
> > >>>> import java.sql.SQLException;
> > >>>>
> > >>>> @@ -89,7 +90,7 @@
> > >>>>      DBDictionary dict)
> > >>>>      throws SQLException {
> > >>>>      byte[] b = (byte[]) sm.setImplData(field.getIndex(), null);
> > >>>> -        Object blob = rs.getBlob(1);
> > >>>> +        Blob blob = rs.getBlob(1);
> > >>>>      dict.putBytes(blob, b);
> > >>>>  }
> > >>>>
> > >>>>
> > >>>> Modified:
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
> > >>>> URL:
> > >>>>
> > >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
> > >>>>
> > >>>>
> > >>>> ==============================================================================
> > >>>> ---
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
> > >>>> (original)
> > >>>> +++
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
> > >>>> Sun Jun  7 08:13:41 2009
> > >>>> @@ -19,6 +19,7 @@
> > >>>> package org.apache.openjpa.jdbc.meta.strats;
> > >>>>
> > >>>> import java.lang.reflect.Array;
> > >>>> +import java.sql.Blob;
> > >>>> import java.sql.ResultSet;
> > >>>> import java.sql.SQLException;
> > >>>>
> > >>>> @@ -72,7 +73,7 @@
> > >>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
> > >>>>      DBDictionary dict)
> > >>>>      throws SQLException {
> > >>>> -        Object blob = rs.getBlob(1);
> > >>>> +        Blob blob = rs.getBlob(1);
> > >>>>      dict.putBytes(blob,
> > >>>> PrimitiveWrapperArrays.toByteArray(sm.fetchObject
> > >>>>          (field.getIndex())));
> > >>>>  }
> > >>>> @@ -80,7 +81,7 @@
> > >>>>  protected Object load(Column col, Result res, Joins joins)
> > >>>>      throws SQLException {
> > >>>>      return PrimitiveWrapperArrays.toObjectValue(field,
> > >>>> -            (byte[]) res.getBytes(col, joins));
> > >>>> +            res.getBytes(col, joins));
> > >>>>  }
> > >>>>
> > >>>>  public void map(boolean adapt) {
> > >>>>
> > >>>> Modified:
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
> > >>>> URL:
> > >>>>
> > >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
> > >>>>
> > >>>>
> > >>>> ==============================================================================
> > >>>> ---
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
> > >>>> (original)
> > >>>> +++
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
> > >>>> Sun Jun  7 08:13:41 2009
> > >>>> @@ -23,6 +23,7 @@
> > >>>> import java.io.IOException;
> > >>>> import java.io.Reader;
> > >>>> import java.lang.reflect.Array;
> > >>>> +import java.sql.Clob;
> > >>>> import java.sql.ResultSet;
> > >>>> import java.sql.SQLException;
> > >>>>
> > >>>> @@ -77,7 +78,7 @@
> > >>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
> > >>>>      DBDictionary dict)
> > >>>>      throws SQLException {
> > >>>> -        Object clob = rs.getClob(1);
> > >>>> +        Clob clob = rs.getClob(1);
> > >>>>      dict.putChars(clob, PrimitiveWrapperArrays.
> > >>>>          toCharArray(sm.fetchObject(field.getIndex())));
> > >>>>  }
> > >>>>
> > >>>> Modified:
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
> > >>>> URL:
> > >>>>
> > >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
> > >>>>
> > >>>>
> > >>>> ==============================================================================
> > >>>> ---
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
> > >>>> (original)
> > >>>> +++
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
> > >>>> Sun Jun  7 08:13:41 2009
> > >>>> @@ -18,6 +18,7 @@
> > >>>> */
> > >>>> package org.apache.openjpa.jdbc.meta.strats;
> > >>>>
> > >>>> +import java.sql.Clob;
> > >>>> import java.sql.ResultSet;
> > >>>> import java.sql.SQLException;
> > >>>>
> > >>>> @@ -66,7 +67,7 @@
> > >>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
> > >>>>      DBDictionary dict)
> > >>>>      throws SQLException {
> > >>>> -        Object clob = rs.getClob(1);
> > >>>> +        Clob clob = rs.getClob(1);
> > >>>>      dict.putString(clob, sm.fetchString(field.getIndex()));
> > >>>>  }
> > >>>>
> > >>>>
> > >>>> Modified:
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
> > >>>> URL:
> > >>>>
> > >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
> > >>>>
> > >>>>
> > >>>> ==============================================================================
> > >>>> ---
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
> > >>>> (original)
> > >>>> +++
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
> > >>>> Sun Jun  7 08:13:41 2009
> > >>>> @@ -28,8 +28,6 @@
> > >>>> import java.io.Reader;
> > >>>> import java.io.StringReader;
> > >>>> import java.io.Writer;
> > >>>> -import java.lang.reflect.InvocationTargetException;
> > >>>> -import java.lang.reflect.Method;
> > >>>> import java.math.BigDecimal;
> > >>>> import java.math.BigInteger;
> > >>>> import java.sql.Array;
> > >>>> @@ -394,11 +392,6 @@
> > >>>>  // first time it happens we can warn the user
> > >>>>  private Set _precisionWarnedTypes = null;
> > >>>>
> > >>>> -    // cache lob methods
> > >>>> -    private Method _setBytes = null;
> > >>>> -    private Method _setString = null;
> > >>>> -    private Method _setCharStream = null;
> > >>>> -
> > >>>>  // batchLimit value:
> > >>>>  // -1 = unlimited
> > >>>>  // 0  = no batch
> > >>>> @@ -1421,55 +1414,27 @@
> > >>>>  /**
> > >>>>   * Invoke the JDK 1.4 setBytes method on the given BLOB
> > >>>> object.
> > >>>>   */
> > >>>> -    public void putBytes(Object blob, byte[] data)
> > >>>> +    public void putBytes(Blob blob, byte[] data)
> > >>>>      throws SQLException {
> > >>>> -        if (_setBytes == null) {
> > >>>> -            try {
> > >>>> -                _setBytes = blob.getClass().getMethod("setBytes",
> > >>>> -                    new Class[]{ long.class, byte[].class });
> > >>>> -            } catch (Exception e) {
> > >>>> -                throw new StoreException(e);
> > >>>> -            }
> > >>>> -        }
> > >>>> -        invokePutLobMethod(_setBytes, blob,
> > >>>> -            new Object[]{ Numbers.valueOf(1L), data });
> > >>>> +        blob.setBytes(1L, data);
> > >>>>  }
> > >>>>
> > >>>>  /**
> > >>>>   * Invoke the JDK 1.4 setString method on the given CLOB
> > >>>>   * object.
> > >>>>   */
> > >>>> -    public void putString(Object clob, String data)
> > >>>> +    public void putString(Clob clob, String data)
> > >>>>      throws SQLException {
> > >>>> -        if (_setString == null) {
> > >>>> -            try {
> > >>>> -                _setString = clob.getClass().getMethod("setString",
> > >>>> -                    new Class[]{ long.class, String.class });
> > >>>> -            } catch (Exception e) {
> > >>>> -                throw new StoreException(e);
> > >>>> -            }
> > >>>> -        }
> > >>>> -        invokePutLobMethod(_setString, clob,
> > >>>> -            new Object[]{ Numbers.valueOf(1L), data });
> > >>>> +        clob.setString(1L, data);
> > >>>>  }
> > >>>>
> > >>>>  /**
> > >>>>   * Invoke the JDK 1.4 setCharacterStream method on the
> > >>>> given
> > >>>>   * CLOB object.
> > >>>>   */
> > >>>> -    public void putChars(Object clob, char[] data)
> > >>>> +    public void putChars(Clob clob, char[] data)
> > >>>>      throws SQLException {
> > >>>> -        if (_setCharStream == null) {
> > >>>> -            try {
> > >>>> -                _setCharStream = clob.getClass().getMethod
> > >>>> -                    ("setCharacterStream", new Class[]{ long.class });
> > >>>> -            } catch (Exception e) {
> > >>>> -                throw new StoreException(e);
> > >>>> -            }
> > >>>> -        }
> > >>>> -
> > >>>> -        Writer writer = (Writer) invokePutLobMethod(_setCharStream,
> > >>>> clob,
> > >>>> -            new Object[]{ Numbers.valueOf(1L) });
> > >>>> +        Writer writer = clob.setCharacterStream(1L);
> > >>>>      try {
> > >>>>          writer.write(data);
> > >>>>          writer.flush();
> > >>>> @@ -1479,24 +1444,6 @@
> > >>>>  }
> > >>>>
> > >>>>  /**
> > >>>> -     * Invoke the given LOB method on the given target with the given
> > >>>> data.
> > >>>> -     */
> > >>>> -    private static Object invokePutLobMethod(Method method, Object
> > >>>> target,
> > >>>> -        Object[] args)
> > >>>> -        throws SQLException {
> > >>>> -        try {
> > >>>> -            return method.invoke(target, args);
> > >>>> -        } catch (InvocationTargetException ite) {
> > >>>> -            Throwable t = ite.getTargetException();
> > >>>> -            if (t instanceof SQLException)
> > >>>> -                throw(SQLException) t;
> > >>>> -            throw new StoreException(t);
> > >>>> -        } catch (Exception e) {
> > >>>> -            throw new StoreException(e);
> > >>>> -        }
> > >>>> -    }
> > >>>> -
> > >>>> -    /**
> > >>>>   * Warn that a particular value could not be stored precisely.
> > >>>>   * After the first warning for a particular type, messages
> > >>>>   * will be turned into trace messages.
> > >>>>
> > >>>> Modified:
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
> > >>>> URL:
> > >>>>
> > >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
> > >>>>
> > >>>>
> > >>>> ==============================================================================
> > >>>> ---
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
> > >>>> (original)
> > >>>> +++
> > >>>>
> > >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
> > >>>> Sun Jun  7 08:13:41 2009
> > >>>> @@ -949,7 +949,7 @@
> > >>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
> > >>>>   * lobs in its own interfaces with the same methods.
> > >>>>   */
> > >>>> -    public void putBytes(Object blob, byte[] data)
> > >>>> +    public void putBytes(Blob blob, byte[] data)
> > >>>>      throws SQLException {
> > >>>>      if (blob == null)
> > >>>>          return;
> > >>>> @@ -970,7 +970,7 @@
> > >>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
> > >>>>   * lobs in its own interfaces with the same methods.
> > >>>>   */
> > >>>> -    public void putString(Object clob, String data)
> > >>>> +    public void putString(Clob clob, String data)
> > >>>>      throws SQLException {
> > >>>>      if (_putString == null) {
> > >>>>          try {
> > >>>> @@ -989,7 +989,7 @@
> > >>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
> > >>>>   * lobs in its own interfaces with the same methods.
> > >>>>   */
> > >>>> -    public void putChars(Object clob, char[] data)
> > >>>> +    public void putChars(Clob clob, char[] data)
> > >>>>      throws SQLException {
> > >>>>      if (_putChars == null) {
> > >>>>          try {
> > >>>>
> > >>>>
> > >>>>
> > >>>>  Craig L Russell
> > >>> Architect, Sun Java Enterprise System http://db.apache.org/jdo
> > >>> 408 276-5638 mailto:Craig.Russell@sun.com
> > >>> P.S. A good JDO? O, Gasp!
> > >>>
> > >>>
> > >>>
> > > Craig L Russell
> > > Architect, Sun Java Enterprise System http://db.apache.org/jdo
> > > 408 276-5638 mailto:Craig.Russell@sun.com
> > > P.S. A good JDO? O, Gasp!
> > >
> > >
> > 
> 

Re: svn commit: r782338 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc: meta/strats/ sql/

Posted by Miłosz Tylenda <mt...@o2.pl>.
Hi Craig & Mike,

I believe the reflection mentioned was introduced in order to compile with JDK 1.3 (JDBC 2) and use JDK 1.4 (JDBC 3) methods on Blob/Clob and has nothing to do with JDK 5/6 (i.e. JDBC 3/4).

I haven't tried to build with JDK 6 and run with JDK 5 yet. However, why do you think it won't run? We are using only JDK 5 and below methods.

If this proves to be a problem then the problem is a little broader - for example we use Blob methods in DBDictionary.updateBlob method (streaming BLOB functionality).

Cheers,
Milosz


> Hi Craig,
> 
> Thanks for the explanation. The tests always build from scratch, currently.
> I could certainly add tests that build with one and run with the other (or
> both) though.
> 
> -mike
> 
> On Tue, Jun 16, 2009 at 1:16 PM, Craig L Russell wrote:
> 
> > Hi Mike,
> >
> > The code will work if you build from source and run on the same platform
> > you compiled on.
> >
> > But a binary distribution won't work (IIRC) if you run on a different
> > platform than what the distribution was built with.
> >
> > Do your tests compile on 6 and run on both 5 and 6?
> >
> > Thanks,
> >
> > Craig
> >
> >
> > On Jun 16, 2009, at 11:04 AM, Michael Dick wrote:
> >
> >  I don't have a Java 6 configuration for MySQL, but I do run Sun JDK 5&6
> >> and
> >> IBM SDK 5&6 with Derby every night. These builds are passing now.
> >>
> >> -mike
> >>
> >> On Tue, Jun 16, 2009 at 12:52 PM, Craig L Russell > >wrote:
> >>
> >>  Hi,
> >>>
> >>> Has this change been tested with JDK 5 and JDK 6? I thought the reason
> >>> for
> >>> the reflection stuff was the incompatibility between JDBC3 and JDBC4 so
> >>> you
> >>> couldn't write the same code for both platforms.
> >>>
> >>> I might (probably?) have missed the discussion on how to resolve
> >>> http://issues.apache.org/jira/browse/OPENJPA-5 which is central to this
> >>> issue.
> >>>
> >>> Craig
> >>>
> >>>
> >>> On Jun 7, 2009, at 1:13 AM, mtylenda@apache.org wrote:
> >>>
> >>> Author: mtylenda
> >>>
> >>>> Date: Sun Jun  7 08:13:41 2009
> >>>> New Revision: 782338
> >>>>
> >>>> URL: http://svn.apache.org/viewvc?rev=782338&view=rev
> >>>> Log:
> >>>> OPENJPA-1122: Remove JDBC 3 related reflection from DBDictionary
> >>>>
> >>>> Modified:
> >>>>
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
> >>>>
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
> >>>>
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
> >>>>
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
> >>>>
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
> >>>>
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
> >>>>
> >>>> Modified:
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
> >>>> URL:
> >>>>
> >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
> >>>>
> >>>>
> >>>> ==============================================================================
> >>>> ---
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
> >>>> Sun Jun  7 08:13:41 2009
> >>>> @@ -18,6 +18,7 @@
> >>>> */
> >>>> package org.apache.openjpa.jdbc.meta.strats;
> >>>>
> >>>> +import java.sql.Blob;
> >>>> import java.sql.ResultSet;
> >>>> import java.sql.SQLException;
> >>>>
> >>>> @@ -89,7 +90,7 @@
> >>>>      DBDictionary dict)
> >>>>      throws SQLException {
> >>>>      byte[] b = (byte[]) sm.setImplData(field.getIndex(), null);
> >>>> -        Object blob = rs.getBlob(1);
> >>>> +        Blob blob = rs.getBlob(1);
> >>>>      dict.putBytes(blob, b);
> >>>>  }
> >>>>
> >>>>
> >>>> Modified:
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
> >>>> URL:
> >>>>
> >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
> >>>>
> >>>>
> >>>> ==============================================================================
> >>>> ---
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
> >>>> Sun Jun  7 08:13:41 2009
> >>>> @@ -19,6 +19,7 @@
> >>>> package org.apache.openjpa.jdbc.meta.strats;
> >>>>
> >>>> import java.lang.reflect.Array;
> >>>> +import java.sql.Blob;
> >>>> import java.sql.ResultSet;
> >>>> import java.sql.SQLException;
> >>>>
> >>>> @@ -72,7 +73,7 @@
> >>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
> >>>>      DBDictionary dict)
> >>>>      throws SQLException {
> >>>> -        Object blob = rs.getBlob(1);
> >>>> +        Blob blob = rs.getBlob(1);
> >>>>      dict.putBytes(blob,
> >>>> PrimitiveWrapperArrays.toByteArray(sm.fetchObject
> >>>>          (field.getIndex())));
> >>>>  }
> >>>> @@ -80,7 +81,7 @@
> >>>>  protected Object load(Column col, Result res, Joins joins)
> >>>>      throws SQLException {
> >>>>      return PrimitiveWrapperArrays.toObjectValue(field,
> >>>> -            (byte[]) res.getBytes(col, joins));
> >>>> +            res.getBytes(col, joins));
> >>>>  }
> >>>>
> >>>>  public void map(boolean adapt) {
> >>>>
> >>>> Modified:
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
> >>>> URL:
> >>>>
> >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
> >>>>
> >>>>
> >>>> ==============================================================================
> >>>> ---
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
> >>>> Sun Jun  7 08:13:41 2009
> >>>> @@ -23,6 +23,7 @@
> >>>> import java.io.IOException;
> >>>> import java.io.Reader;
> >>>> import java.lang.reflect.Array;
> >>>> +import java.sql.Clob;
> >>>> import java.sql.ResultSet;
> >>>> import java.sql.SQLException;
> >>>>
> >>>> @@ -77,7 +78,7 @@
> >>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
> >>>>      DBDictionary dict)
> >>>>      throws SQLException {
> >>>> -        Object clob = rs.getClob(1);
> >>>> +        Clob clob = rs.getClob(1);
> >>>>      dict.putChars(clob, PrimitiveWrapperArrays.
> >>>>          toCharArray(sm.fetchObject(field.getIndex())));
> >>>>  }
> >>>>
> >>>> Modified:
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
> >>>> URL:
> >>>>
> >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
> >>>>
> >>>>
> >>>> ==============================================================================
> >>>> ---
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
> >>>> Sun Jun  7 08:13:41 2009
> >>>> @@ -18,6 +18,7 @@
> >>>> */
> >>>> package org.apache.openjpa.jdbc.meta.strats;
> >>>>
> >>>> +import java.sql.Clob;
> >>>> import java.sql.ResultSet;
> >>>> import java.sql.SQLException;
> >>>>
> >>>> @@ -66,7 +67,7 @@
> >>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
> >>>>      DBDictionary dict)
> >>>>      throws SQLException {
> >>>> -        Object clob = rs.getClob(1);
> >>>> +        Clob clob = rs.getClob(1);
> >>>>      dict.putString(clob, sm.fetchString(field.getIndex()));
> >>>>  }
> >>>>
> >>>>
> >>>> Modified:
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
> >>>> URL:
> >>>>
> >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
> >>>>
> >>>>
> >>>> ==============================================================================
> >>>> ---
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
> >>>> Sun Jun  7 08:13:41 2009
> >>>> @@ -28,8 +28,6 @@
> >>>> import java.io.Reader;
> >>>> import java.io.StringReader;
> >>>> import java.io.Writer;
> >>>> -import java.lang.reflect.InvocationTargetException;
> >>>> -import java.lang.reflect.Method;
> >>>> import java.math.BigDecimal;
> >>>> import java.math.BigInteger;
> >>>> import java.sql.Array;
> >>>> @@ -394,11 +392,6 @@
> >>>>  // first time it happens we can warn the user
> >>>>  private Set _precisionWarnedTypes = null;
> >>>>
> >>>> -    // cache lob methods
> >>>> -    private Method _setBytes = null;
> >>>> -    private Method _setString = null;
> >>>> -    private Method _setCharStream = null;
> >>>> -
> >>>>  // batchLimit value:
> >>>>  // -1 = unlimited
> >>>>  // 0  = no batch
> >>>> @@ -1421,55 +1414,27 @@
> >>>>  /**
> >>>>   * Invoke the JDK 1.4 setBytes method on the given BLOB
> >>>> object.
> >>>>   */
> >>>> -    public void putBytes(Object blob, byte[] data)
> >>>> +    public void putBytes(Blob blob, byte[] data)
> >>>>      throws SQLException {
> >>>> -        if (_setBytes == null) {
> >>>> -            try {
> >>>> -                _setBytes = blob.getClass().getMethod("setBytes",
> >>>> -                    new Class[]{ long.class, byte[].class });
> >>>> -            } catch (Exception e) {
> >>>> -                throw new StoreException(e);
> >>>> -            }
> >>>> -        }
> >>>> -        invokePutLobMethod(_setBytes, blob,
> >>>> -            new Object[]{ Numbers.valueOf(1L), data });
> >>>> +        blob.setBytes(1L, data);
> >>>>  }
> >>>>
> >>>>  /**
> >>>>   * Invoke the JDK 1.4 setString method on the given CLOB
> >>>>   * object.
> >>>>   */
> >>>> -    public void putString(Object clob, String data)
> >>>> +    public void putString(Clob clob, String data)
> >>>>      throws SQLException {
> >>>> -        if (_setString == null) {
> >>>> -            try {
> >>>> -                _setString = clob.getClass().getMethod("setString",
> >>>> -                    new Class[]{ long.class, String.class });
> >>>> -            } catch (Exception e) {
> >>>> -                throw new StoreException(e);
> >>>> -            }
> >>>> -        }
> >>>> -        invokePutLobMethod(_setString, clob,
> >>>> -            new Object[]{ Numbers.valueOf(1L), data });
> >>>> +        clob.setString(1L, data);
> >>>>  }
> >>>>
> >>>>  /**
> >>>>   * Invoke the JDK 1.4 setCharacterStream method on the
> >>>> given
> >>>>   * CLOB object.
> >>>>   */
> >>>> -    public void putChars(Object clob, char[] data)
> >>>> +    public void putChars(Clob clob, char[] data)
> >>>>      throws SQLException {
> >>>> -        if (_setCharStream == null) {
> >>>> -            try {
> >>>> -                _setCharStream = clob.getClass().getMethod
> >>>> -                    ("setCharacterStream", new Class[]{ long.class });
> >>>> -            } catch (Exception e) {
> >>>> -                throw new StoreException(e);
> >>>> -            }
> >>>> -        }
> >>>> -
> >>>> -        Writer writer = (Writer) invokePutLobMethod(_setCharStream,
> >>>> clob,
> >>>> -            new Object[]{ Numbers.valueOf(1L) });
> >>>> +        Writer writer = clob.setCharacterStream(1L);
> >>>>      try {
> >>>>          writer.write(data);
> >>>>          writer.flush();
> >>>> @@ -1479,24 +1444,6 @@
> >>>>  }
> >>>>
> >>>>  /**
> >>>> -     * Invoke the given LOB method on the given target with the given
> >>>> data.
> >>>> -     */
> >>>> -    private static Object invokePutLobMethod(Method method, Object
> >>>> target,
> >>>> -        Object[] args)
> >>>> -        throws SQLException {
> >>>> -        try {
> >>>> -            return method.invoke(target, args);
> >>>> -        } catch (InvocationTargetException ite) {
> >>>> -            Throwable t = ite.getTargetException();
> >>>> -            if (t instanceof SQLException)
> >>>> -                throw(SQLException) t;
> >>>> -            throw new StoreException(t);
> >>>> -        } catch (Exception e) {
> >>>> -            throw new StoreException(e);
> >>>> -        }
> >>>> -    }
> >>>> -
> >>>> -    /**
> >>>>   * Warn that a particular value could not be stored precisely.
> >>>>   * After the first warning for a particular type, messages
> >>>>   * will be turned into trace messages.
> >>>>
> >>>> Modified:
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
> >>>> URL:
> >>>>
> >>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
> >>>>
> >>>>
> >>>> ==============================================================================
> >>>> ---
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
> >>>> Sun Jun  7 08:13:41 2009
> >>>> @@ -949,7 +949,7 @@
> >>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
> >>>>   * lobs in its own interfaces with the same methods.
> >>>>   */
> >>>> -    public void putBytes(Object blob, byte[] data)
> >>>> +    public void putBytes(Blob blob, byte[] data)
> >>>>      throws SQLException {
> >>>>      if (blob == null)
> >>>>          return;
> >>>> @@ -970,7 +970,7 @@
> >>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
> >>>>   * lobs in its own interfaces with the same methods.
> >>>>   */
> >>>> -    public void putString(Object clob, String data)
> >>>> +    public void putString(Clob clob, String data)
> >>>>      throws SQLException {
> >>>>      if (_putString == null) {
> >>>>          try {
> >>>> @@ -989,7 +989,7 @@
> >>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
> >>>>   * lobs in its own interfaces with the same methods.
> >>>>   */
> >>>> -    public void putChars(Object clob, char[] data)
> >>>> +    public void putChars(Clob clob, char[] data)
> >>>>      throws SQLException {
> >>>>      if (_putChars == null) {
> >>>>          try {
> >>>>
> >>>>
> >>>>
> >>>>  Craig L Russell
> >>> Architect, Sun Java Enterprise System http://db.apache.org/jdo
> >>> 408 276-5638 mailto:Craig.Russell@sun.com
> >>> P.S. A good JDO? O, Gasp!
> >>>
> >>>
> >>>
> > Craig L Russell
> > Architect, Sun Java Enterprise System http://db.apache.org/jdo
> > 408 276-5638 mailto:Craig.Russell@sun.com
> > P.S. A good JDO? O, Gasp!
> >
> >
> 

Re: svn commit: r782338 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc: meta/strats/ sql/

Posted by Michael Dick <mi...@gmail.com>.
Hi Craig,

Thanks for the explanation. The tests always build from scratch, currently.
I could certainly add tests that build with one and run with the other (or
both) though.

-mike

On Tue, Jun 16, 2009 at 1:16 PM, Craig L Russell <Cr...@sun.com>wrote:

> Hi Mike,
>
> The code will work if you build from source and run on the same platform
> you compiled on.
>
> But a binary distribution won't work (IIRC) if you run on a different
> platform than what the distribution was built with.
>
> Do your tests compile on 6 and run on both 5 and 6?
>
> Thanks,
>
> Craig
>
>
> On Jun 16, 2009, at 11:04 AM, Michael Dick wrote:
>
>  I don't have a Java 6 configuration for MySQL, but I do run Sun JDK 5&6
>> and
>> IBM SDK 5&6 with Derby every night. These builds are passing now.
>>
>> -mike
>>
>> On Tue, Jun 16, 2009 at 12:52 PM, Craig L Russell <Craig.Russell@sun.com
>> >wrote:
>>
>>  Hi,
>>>
>>> Has this change been tested with JDK 5 and JDK 6? I thought the reason
>>> for
>>> the reflection stuff was the incompatibility between JDBC3 and JDBC4 so
>>> you
>>> couldn't write the same code for both platforms.
>>>
>>> I might (probably?) have missed the discussion on how to resolve
>>> http://issues.apache.org/jira/browse/OPENJPA-5 which is central to this
>>> issue.
>>>
>>> Craig
>>>
>>>
>>> On Jun 7, 2009, at 1:13 AM, mtylenda@apache.org wrote:
>>>
>>> Author: mtylenda
>>>
>>>> Date: Sun Jun  7 08:13:41 2009
>>>> New Revision: 782338
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=782338&view=rev
>>>> Log:
>>>> OPENJPA-1122: Remove JDBC 3 related reflection from DBDictionary
>>>>
>>>> Modified:
>>>>
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>>>
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>>>
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>>>
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
>>>>
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
>>>>
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
>>>>
>>>> Modified:
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> ---
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>>> (original)
>>>> +++
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>>> Sun Jun  7 08:13:41 2009
>>>> @@ -18,6 +18,7 @@
>>>> */
>>>> package org.apache.openjpa.jdbc.meta.strats;
>>>>
>>>> +import java.sql.Blob;
>>>> import java.sql.ResultSet;
>>>> import java.sql.SQLException;
>>>>
>>>> @@ -89,7 +90,7 @@
>>>>      DBDictionary dict)
>>>>      throws SQLException {
>>>>      byte[] b = (byte[]) sm.setImplData(field.getIndex(), null);
>>>> -        Object blob = rs.getBlob(1);
>>>> +        Blob blob = rs.getBlob(1);
>>>>      dict.putBytes(blob, b);
>>>>  }
>>>>
>>>>
>>>> Modified:
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> ---
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>>> (original)
>>>> +++
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>>> Sun Jun  7 08:13:41 2009
>>>> @@ -19,6 +19,7 @@
>>>> package org.apache.openjpa.jdbc.meta.strats;
>>>>
>>>> import java.lang.reflect.Array;
>>>> +import java.sql.Blob;
>>>> import java.sql.ResultSet;
>>>> import java.sql.SQLException;
>>>>
>>>> @@ -72,7 +73,7 @@
>>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>>>      DBDictionary dict)
>>>>      throws SQLException {
>>>> -        Object blob = rs.getBlob(1);
>>>> +        Blob blob = rs.getBlob(1);
>>>>      dict.putBytes(blob,
>>>> PrimitiveWrapperArrays.toByteArray(sm.fetchObject
>>>>          (field.getIndex())));
>>>>  }
>>>> @@ -80,7 +81,7 @@
>>>>  protected Object load(Column col, Result res, Joins joins)
>>>>      throws SQLException {
>>>>      return PrimitiveWrapperArrays.toObjectValue(field,
>>>> -            (byte[]) res.getBytes(col, joins));
>>>> +            res.getBytes(col, joins));
>>>>  }
>>>>
>>>>  public void map(boolean adapt) {
>>>>
>>>> Modified:
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> ---
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>>> (original)
>>>> +++
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>>> Sun Jun  7 08:13:41 2009
>>>> @@ -23,6 +23,7 @@
>>>> import java.io.IOException;
>>>> import java.io.Reader;
>>>> import java.lang.reflect.Array;
>>>> +import java.sql.Clob;
>>>> import java.sql.ResultSet;
>>>> import java.sql.SQLException;
>>>>
>>>> @@ -77,7 +78,7 @@
>>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>>>      DBDictionary dict)
>>>>      throws SQLException {
>>>> -        Object clob = rs.getClob(1);
>>>> +        Clob clob = rs.getClob(1);
>>>>      dict.putChars(clob, PrimitiveWrapperArrays.
>>>>          toCharArray(sm.fetchObject(field.getIndex())));
>>>>  }
>>>>
>>>> Modified:
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> ---
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
>>>> (original)
>>>> +++
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java
>>>> Sun Jun  7 08:13:41 2009
>>>> @@ -18,6 +18,7 @@
>>>> */
>>>> package org.apache.openjpa.jdbc.meta.strats;
>>>>
>>>> +import java.sql.Clob;
>>>> import java.sql.ResultSet;
>>>> import java.sql.SQLException;
>>>>
>>>> @@ -66,7 +67,7 @@
>>>>  protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>>>      DBDictionary dict)
>>>>      throws SQLException {
>>>> -        Object clob = rs.getClob(1);
>>>> +        Clob clob = rs.getClob(1);
>>>>      dict.putString(clob, sm.fetchString(field.getIndex()));
>>>>  }
>>>>
>>>>
>>>> Modified:
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> ---
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
>>>> (original)
>>>> +++
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
>>>> Sun Jun  7 08:13:41 2009
>>>> @@ -28,8 +28,6 @@
>>>> import java.io.Reader;
>>>> import java.io.StringReader;
>>>> import java.io.Writer;
>>>> -import java.lang.reflect.InvocationTargetException;
>>>> -import java.lang.reflect.Method;
>>>> import java.math.BigDecimal;
>>>> import java.math.BigInteger;
>>>> import java.sql.Array;
>>>> @@ -394,11 +392,6 @@
>>>>  // first time it happens we can warn the user
>>>>  private Set _precisionWarnedTypes = null;
>>>>
>>>> -    // cache lob methods
>>>> -    private Method _setBytes = null;
>>>> -    private Method _setString = null;
>>>> -    private Method _setCharStream = null;
>>>> -
>>>>  // batchLimit value:
>>>>  // -1 = unlimited
>>>>  // 0  = no batch
>>>> @@ -1421,55 +1414,27 @@
>>>>  /**
>>>>   * Invoke the JDK 1.4 <code>setBytes</code> method on the given BLOB
>>>> object.
>>>>   */
>>>> -    public void putBytes(Object blob, byte[] data)
>>>> +    public void putBytes(Blob blob, byte[] data)
>>>>      throws SQLException {
>>>> -        if (_setBytes == null) {
>>>> -            try {
>>>> -                _setBytes = blob.getClass().getMethod("setBytes",
>>>> -                    new Class[]{ long.class, byte[].class });
>>>> -            } catch (Exception e) {
>>>> -                throw new StoreException(e);
>>>> -            }
>>>> -        }
>>>> -        invokePutLobMethod(_setBytes, blob,
>>>> -            new Object[]{ Numbers.valueOf(1L), data });
>>>> +        blob.setBytes(1L, data);
>>>>  }
>>>>
>>>>  /**
>>>>   * Invoke the JDK 1.4 <code>setString</code> method on the given CLOB
>>>>   * object.
>>>>   */
>>>> -    public void putString(Object clob, String data)
>>>> +    public void putString(Clob clob, String data)
>>>>      throws SQLException {
>>>> -        if (_setString == null) {
>>>> -            try {
>>>> -                _setString = clob.getClass().getMethod("setString",
>>>> -                    new Class[]{ long.class, String.class });
>>>> -            } catch (Exception e) {
>>>> -                throw new StoreException(e);
>>>> -            }
>>>> -        }
>>>> -        invokePutLobMethod(_setString, clob,
>>>> -            new Object[]{ Numbers.valueOf(1L), data });
>>>> +        clob.setString(1L, data);
>>>>  }
>>>>
>>>>  /**
>>>>   * Invoke the JDK 1.4 <code>setCharacterStream</code> method on the
>>>> given
>>>>   * CLOB object.
>>>>   */
>>>> -    public void putChars(Object clob, char[] data)
>>>> +    public void putChars(Clob clob, char[] data)
>>>>      throws SQLException {
>>>> -        if (_setCharStream == null) {
>>>> -            try {
>>>> -                _setCharStream = clob.getClass().getMethod
>>>> -                    ("setCharacterStream", new Class[]{ long.class });
>>>> -            } catch (Exception e) {
>>>> -                throw new StoreException(e);
>>>> -            }
>>>> -        }
>>>> -
>>>> -        Writer writer = (Writer) invokePutLobMethod(_setCharStream,
>>>> clob,
>>>> -            new Object[]{ Numbers.valueOf(1L) });
>>>> +        Writer writer = clob.setCharacterStream(1L);
>>>>      try {
>>>>          writer.write(data);
>>>>          writer.flush();
>>>> @@ -1479,24 +1444,6 @@
>>>>  }
>>>>
>>>>  /**
>>>> -     * Invoke the given LOB method on the given target with the given
>>>> data.
>>>> -     */
>>>> -    private static Object invokePutLobMethod(Method method, Object
>>>> target,
>>>> -        Object[] args)
>>>> -        throws SQLException {
>>>> -        try {
>>>> -            return method.invoke(target, args);
>>>> -        } catch (InvocationTargetException ite) {
>>>> -            Throwable t = ite.getTargetException();
>>>> -            if (t instanceof SQLException)
>>>> -                throw(SQLException) t;
>>>> -            throw new StoreException(t);
>>>> -        } catch (Exception e) {
>>>> -            throw new StoreException(e);
>>>> -        }
>>>> -    }
>>>> -
>>>> -    /**
>>>>   * Warn that a particular value could not be stored precisely.
>>>>   * After the first warning for a particular type, messages
>>>>   * will be turned into trace messages.
>>>>
>>>> Modified:
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
>>>> URL:
>>>>
>>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
>>>>
>>>>
>>>> ==============================================================================
>>>> ---
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
>>>> (original)
>>>> +++
>>>>
>>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
>>>> Sun Jun  7 08:13:41 2009
>>>> @@ -949,7 +949,7 @@
>>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
>>>>   * lobs in its own interfaces with the same methods.
>>>>   */
>>>> -    public void putBytes(Object blob, byte[] data)
>>>> +    public void putBytes(Blob blob, byte[] data)
>>>>      throws SQLException {
>>>>      if (blob == null)
>>>>          return;
>>>> @@ -970,7 +970,7 @@
>>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
>>>>   * lobs in its own interfaces with the same methods.
>>>>   */
>>>> -    public void putString(Object clob, String data)
>>>> +    public void putString(Clob clob, String data)
>>>>      throws SQLException {
>>>>      if (_putString == null) {
>>>>          try {
>>>> @@ -989,7 +989,7 @@
>>>>   * vendor-specific class; for example Weblogic wraps oracle thin driver
>>>>   * lobs in its own interfaces with the same methods.
>>>>   */
>>>> -    public void putChars(Object clob, char[] data)
>>>> +    public void putChars(Clob clob, char[] data)
>>>>      throws SQLException {
>>>>      if (_putChars == null) {
>>>>          try {
>>>>
>>>>
>>>>
>>>>  Craig L Russell
>>> Architect, Sun Java Enterprise System http://db.apache.org/jdo
>>> 408 276-5638 mailto:Craig.Russell@sun.com
>>> P.S. A good JDO? O, Gasp!
>>>
>>>
>>>
> Craig L Russell
> Architect, Sun Java Enterprise System http://db.apache.org/jdo
> 408 276-5638 mailto:Craig.Russell@sun.com
> P.S. A good JDO? O, Gasp!
>
>

Re: svn commit: r782338 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc: meta/strats/ sql/

Posted by Craig L Russell <Cr...@Sun.COM>.
Hi Mike,

The code will work if you build from source and run on the same  
platform you compiled on.

But a binary distribution won't work (IIRC) if you run on a different  
platform than what the distribution was built with.

Do your tests compile on 6 and run on both 5 and 6?

Thanks,

Craig

On Jun 16, 2009, at 11:04 AM, Michael Dick wrote:

> I don't have a Java 6 configuration for MySQL, but I do run Sun JDK  
> 5&6 and
> IBM SDK 5&6 with Derby every night. These builds are passing now.
>
> -mike
>
> On Tue, Jun 16, 2009 at 12:52 PM, Craig L Russell <Craig.Russell@sun.com 
> >wrote:
>
>> Hi,
>>
>> Has this change been tested with JDK 5 and JDK 6? I thought the  
>> reason for
>> the reflection stuff was the incompatibility between JDBC3 and  
>> JDBC4 so you
>> couldn't write the same code for both platforms.
>>
>> I might (probably?) have missed the discussion on how to resolve
>> http://issues.apache.org/jira/browse/OPENJPA-5 which is central to  
>> this
>> issue.
>>
>> Craig
>>
>>
>> On Jun 7, 2009, at 1:13 AM, mtylenda@apache.org wrote:
>>
>> Author: mtylenda
>>> Date: Sun Jun  7 08:13:41 2009
>>> New Revision: 782338
>>>
>>> URL: http://svn.apache.org/viewvc?rev=782338&view=rev
>>> Log:
>>> OPENJPA-1122: Remove JDBC 3 related reflection from DBDictionary
>>>
>>> Modified:
>>>
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>>
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>>
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>>
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedClobFieldStrategy.java
>>>
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> sql/DBDictionary.java
>>>
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> sql/OracleDictionary.java
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedBlobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> ---
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedBlobFieldStrategy.java
>>> Sun Jun  7 08:13:41 2009
>>> @@ -18,6 +18,7 @@
>>> */
>>> package org.apache.openjpa.jdbc.meta.strats;
>>>
>>> +import java.sql.Blob;
>>> import java.sql.ResultSet;
>>> import java.sql.SQLException;
>>>
>>> @@ -89,7 +90,7 @@
>>>       DBDictionary dict)
>>>       throws SQLException {
>>>       byte[] b = (byte[]) sm.setImplData(field.getIndex(), null);
>>> -        Object blob = rs.getBlob(1);
>>> +        Blob blob = rs.getBlob(1);
>>>       dict.putBytes(blob, b);
>>>   }
>>>
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedByteArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> ---
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedByteArrayFieldStrategy.java
>>> Sun Jun  7 08:13:41 2009
>>> @@ -19,6 +19,7 @@
>>> package org.apache.openjpa.jdbc.meta.strats;
>>>
>>> import java.lang.reflect.Array;
>>> +import java.sql.Blob;
>>> import java.sql.ResultSet;
>>> import java.sql.SQLException;
>>>
>>> @@ -72,7 +73,7 @@
>>>   protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>>       DBDictionary dict)
>>>       throws SQLException {
>>> -        Object blob = rs.getBlob(1);
>>> +        Blob blob = rs.getBlob(1);
>>>       dict.putBytes(blob,
>>> PrimitiveWrapperArrays.toByteArray(sm.fetchObject
>>>           (field.getIndex())));
>>>   }
>>> @@ -80,7 +81,7 @@
>>>   protected Object load(Column col, Result res, Joins joins)
>>>       throws SQLException {
>>>       return PrimitiveWrapperArrays.toObjectValue(field,
>>> -            (byte[]) res.getBytes(col, joins));
>>> +            res.getBytes(col, joins));
>>>   }
>>>
>>>   public void map(boolean adapt) {
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedCharArrayFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> ---
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedCharArrayFieldStrategy.java
>>> Sun Jun  7 08:13:41 2009
>>> @@ -23,6 +23,7 @@
>>> import java.io.IOException;
>>> import java.io.Reader;
>>> import java.lang.reflect.Array;
>>> +import java.sql.Clob;
>>> import java.sql.ResultSet;
>>> import java.sql.SQLException;
>>>
>>> @@ -77,7 +78,7 @@
>>>   protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>>       DBDictionary dict)
>>>       throws SQLException {
>>> -        Object clob = rs.getClob(1);
>>> +        Clob clob = rs.getClob(1);
>>>       dict.putChars(clob, PrimitiveWrapperArrays.
>>>           toCharArray(sm.fetchObject(field.getIndex())));
>>>   }
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedClobFieldStrategy.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/MaxEmbeddedClobFieldStrategy.java?rev=782338&r1=782337&r2=782338&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> ---
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedClobFieldStrategy.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> meta/strats/MaxEmbeddedClobFieldStrategy.java
>>> Sun Jun  7 08:13:41 2009
>>> @@ -18,6 +18,7 @@
>>> */
>>> package org.apache.openjpa.jdbc.meta.strats;
>>>
>>> +import java.sql.Clob;
>>> import java.sql.ResultSet;
>>> import java.sql.SQLException;
>>>
>>> @@ -66,7 +67,7 @@
>>>   protected void putData(OpenJPAStateManager sm, ResultSet rs,
>>>       DBDictionary dict)
>>>       throws SQLException {
>>> -        Object clob = rs.getClob(1);
>>> +        Clob clob = rs.getClob(1);
>>>       dict.putString(clob, sm.fetchString(field.getIndex()));
>>>   }
>>>
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> sql/DBDictionary.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> ---
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> sql/DBDictionary.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> sql/DBDictionary.java
>>> Sun Jun  7 08:13:41 2009
>>> @@ -28,8 +28,6 @@
>>> import java.io.Reader;
>>> import java.io.StringReader;
>>> import java.io.Writer;
>>> -import java.lang.reflect.InvocationTargetException;
>>> -import java.lang.reflect.Method;
>>> import java.math.BigDecimal;
>>> import java.math.BigInteger;
>>> import java.sql.Array;
>>> @@ -394,11 +392,6 @@
>>>   // first time it happens we can warn the user
>>>   private Set _precisionWarnedTypes = null;
>>>
>>> -    // cache lob methods
>>> -    private Method _setBytes = null;
>>> -    private Method _setString = null;
>>> -    private Method _setCharStream = null;
>>> -
>>>   // batchLimit value:
>>>   // -1 = unlimited
>>>   // 0  = no batch
>>> @@ -1421,55 +1414,27 @@
>>>   /**
>>>    * Invoke the JDK 1.4 <code>setBytes</code> method on the given  
>>> BLOB
>>> object.
>>>    */
>>> -    public void putBytes(Object blob, byte[] data)
>>> +    public void putBytes(Blob blob, byte[] data)
>>>       throws SQLException {
>>> -        if (_setBytes == null) {
>>> -            try {
>>> -                _setBytes = blob.getClass().getMethod("setBytes",
>>> -                    new Class[]{ long.class, byte[].class });
>>> -            } catch (Exception e) {
>>> -                throw new StoreException(e);
>>> -            }
>>> -        }
>>> -        invokePutLobMethod(_setBytes, blob,
>>> -            new Object[]{ Numbers.valueOf(1L), data });
>>> +        blob.setBytes(1L, data);
>>>   }
>>>
>>>   /**
>>>    * Invoke the JDK 1.4 <code>setString</code> method on the given  
>>> CLOB
>>>    * object.
>>>    */
>>> -    public void putString(Object clob, String data)
>>> +    public void putString(Clob clob, String data)
>>>       throws SQLException {
>>> -        if (_setString == null) {
>>> -            try {
>>> -                _setString = clob.getClass().getMethod("setString",
>>> -                    new Class[]{ long.class, String.class });
>>> -            } catch (Exception e) {
>>> -                throw new StoreException(e);
>>> -            }
>>> -        }
>>> -        invokePutLobMethod(_setString, clob,
>>> -            new Object[]{ Numbers.valueOf(1L), data });
>>> +        clob.setString(1L, data);
>>>   }
>>>
>>>   /**
>>>    * Invoke the JDK 1.4 <code>setCharacterStream</code> method on  
>>> the
>>> given
>>>    * CLOB object.
>>>    */
>>> -    public void putChars(Object clob, char[] data)
>>> +    public void putChars(Clob clob, char[] data)
>>>       throws SQLException {
>>> -        if (_setCharStream == null) {
>>> -            try {
>>> -                _setCharStream = clob.getClass().getMethod
>>> -                    ("setCharacterStream", new Class[] 
>>> { long.class });
>>> -            } catch (Exception e) {
>>> -                throw new StoreException(e);
>>> -            }
>>> -        }
>>> -
>>> -        Writer writer = (Writer)  
>>> invokePutLobMethod(_setCharStream, clob,
>>> -            new Object[]{ Numbers.valueOf(1L) });
>>> +        Writer writer = clob.setCharacterStream(1L);
>>>       try {
>>>           writer.write(data);
>>>           writer.flush();
>>> @@ -1479,24 +1444,6 @@
>>>   }
>>>
>>>   /**
>>> -     * Invoke the given LOB method on the given target with the  
>>> given
>>> data.
>>> -     */
>>> -    private static Object invokePutLobMethod(Method method, Object
>>> target,
>>> -        Object[] args)
>>> -        throws SQLException {
>>> -        try {
>>> -            return method.invoke(target, args);
>>> -        } catch (InvocationTargetException ite) {
>>> -            Throwable t = ite.getTargetException();
>>> -            if (t instanceof SQLException)
>>> -                throw(SQLException) t;
>>> -            throw new StoreException(t);
>>> -        } catch (Exception e) {
>>> -            throw new StoreException(e);
>>> -        }
>>> -    }
>>> -
>>> -    /**
>>>    * Warn that a particular value could not be stored precisely.
>>>    * After the first warning for a particular type, messages
>>>    * will be turned into trace messages.
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> sql/OracleDictionary.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java?rev=782338&r1=782337&r2=782338&view=diff
>>>
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> = 
>>> ====================================================================
>>> ---
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> sql/OracleDictionary.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/ 
>>> sql/OracleDictionary.java
>>> Sun Jun  7 08:13:41 2009
>>> @@ -949,7 +949,7 @@
>>>    * vendor-specific class; for example Weblogic wraps oracle thin  
>>> driver
>>>    * lobs in its own interfaces with the same methods.
>>>    */
>>> -    public void putBytes(Object blob, byte[] data)
>>> +    public void putBytes(Blob blob, byte[] data)
>>>       throws SQLException {
>>>       if (blob == null)
>>>           return;
>>> @@ -970,7 +970,7 @@
>>>    * vendor-specific class; for example Weblogic wraps oracle thin  
>>> driver
>>>    * lobs in its own interfaces with the same methods.
>>>    */
>>> -    public void putString(Object clob, String data)
>>> +    public void putString(Clob clob, String data)
>>>       throws SQLException {
>>>       if (_putString == null) {
>>>           try {
>>> @@ -989,7 +989,7 @@
>>>    * vendor-specific class; for example Weblogic wraps oracle thin  
>>> driver
>>>    * lobs in its own interfaces with the same methods.
>>>    */
>>> -    public void putChars(Object clob, char[] data)
>>> +    public void putChars(Clob clob, char[] data)
>>>       throws SQLException {
>>>       if (_putChars == null) {
>>>           try {
>>>
>>>
>>>
>> Craig L Russell
>> Architect, Sun Java Enterprise System http://db.apache.org/jdo
>> 408 276-5638 mailto:Craig.Russell@sun.com
>> P.S. A good JDO? O, Gasp!
>>
>>

Craig L Russell
Architect, Sun Java Enterprise System http://db.apache.org/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!