javax.sql.rowset.serial.SerialBlob doesn't support free and getBinaryStream
Lance Andersen - Oracle
Lance.Andersen at oracle.com
Thu Jul 5 20:46:44 UTC 2012
We had a holiday here on Weds, so I am still catching up.
First, thank you for taking the time to propose a patch.
Here are a few comments based on the changes I have made in my workspace and comparing to your proposed changes
- The same issue applies to SerialClob
- instead of duplicating all of the code to check if free has been called in each method, I created a private method which does the validation
- I do not see a reason to make the flag isFree transient, if the object has been freed, it has been freed
- free() needs to call blob.free if the blob object is not null prior to nulling out the object
- Your 2nd if statement in getBinaryStream() duplicates part of the check in the 1st if statement
- All of the public methods need to have their javadocs indicate that if called after free has been called, a SerialException will be thrown. additional calls to free is a no-op
- The test case is is a good start. I would change this a bit though:
+ create separate test classes for free and getbinarystream
+ each individual test be a method
+ If you catch the expected Exception, print that the test has passed
+ Each test needs a comment as to what it is trying to validate (just a simple comment is fine)
+ return 0 if the test passed, 1 if it fails and then print the number of failed tests at the end after running through all of them
As I need to change the javadocs, I have create a ccc request which I will do as part of the JDBC 4.2 work and will put the change back at that time.
If you would like to change your test and then create similar tests for SerialClob I will add those as part of the put-back.
Again, thank you for your input and time.
On Jul 5, 2012, at 2:26 AM, Deven You wrote:
> Hi Lance,
> Did you review the patch and compare it to yours. I just have some more words for the patch.
> 1. I think the current spec for free() is not clear, how about add below comments:
> After free has been called, any attempt to invoke a method other than free will result in a SerialException being thrown.
> 2. getBinaryStream(long pos,long length)
> add a javadoc:
> * @throws SerialException if this SerialBlob already be freed.
> add throws SerialException from this method
> Any suggestions?
> Thanks a lot!
> On 07/02/2012 06:25 PM, Lance Andersen - Oracle wrote:
>> Hi Deven,
>> Thanks for the email and the proposed patch. I will look at this later today or tomorrow. I actually have made these changes in my workspace for JDK 8 but will compare your changes to mine.
>> On Jul 2, 2012, at 5:04 AM, Deven You wrote:
>>> Hi All,
>>> Could anyone notice this problem?
>>> Thanks a lot!
>>> On 06/25/2012 04:18 PM, Deven You wrote:
>>>> Hi All,
>>>> First of all, if the jdbc problem has a better mailing list to post please tell me.
>>>> I find that javax.sql.rowset.serial.SerialBlob is not fully implemented in OpenJDK 8. Methods
>>>> public InputStream getBinaryStream(long pos,long length) throws SQLException
>>>> public void free() throws SQLException
>>>> only throw UnsupportedOperationException.
>>>> I have made a patch to implement these 2 methods. Could anyone take a look to review it.
>>>> BTW: I think the spec for SerialBlob is not very clear like it doesn't mention if all method rather than free() need throw any exception after free() is invoked. However that behavior seems reasonable.
>>>>  http://cr.openjdk.java.net/~littlee/OJDK-576/webrev
>>>> Thanks a lot.
>>> Best Regards,
>> Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
>> Oracle Java Engineering
>> 1 Network Drive
>> Burlington, MA 01803
>> Lance.Andersen at oracle.com
> Best Regards,
Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering
1 Network Drive
Burlington, MA 01803
Lance.Andersen at oracle.com
More information about the core-libs-dev