openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From MiƂosz Tylenda <mtyle...@o2.pl>
Subject Re: svn commit: r782338 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc: meta/strats/ sql/
Date Wed, 24 Jun 2009 17:57:41 GMT
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!
> > >
> > >
> > 
> 

Mime
View raw message