/******************************************************************************* | |
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation from Oracle TopLink | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.tests.types; | |
import java.io.*; | |
import org.eclipse.persistence.sessions.UnitOfWork; | |
import org.eclipse.persistence.testing.framework.*; | |
// Bug#4364359 This test is added to test the fix to overcome TIMESTAMPTZ not serializable | |
// as of jdbc 9.2.0.5 and 10.1.0.2. It has been fixed in the next version for both streams | |
public class SerializationOfValueHolderWithTIMESTAMPTZTest extends TestCase { | |
Exception ex; | |
public SerializationOfValueHolderWithTIMESTAMPTZTest() { | |
} | |
public void setup() { | |
UnitOfWork uow = getSession().acquireUnitOfWork(); | |
uow.registerObject(TIMESTAMPTZOwner.example1()); | |
uow.commit(); | |
uow = getSession().acquireUnitOfWork(); | |
uow.registerObject(TIMESTAMPTZOwner.example2()); | |
uow.commit(); | |
if (getSession() instanceof org.eclipse.persistence.sessions.remote.RemoteSession) { | |
throw new TestWarningException("This test cannot be run through the remote."); | |
} | |
getAbstractSession().beginTransaction(); | |
} | |
public void reset() { | |
if (getAbstractSession().isInTransaction()) { | |
getAbstractSession().rollbackTransaction(); | |
getSession().getIdentityMapAccessor().initializeIdentityMaps(); | |
} | |
} | |
public void test() { | |
getSession().getIdentityMapAccessor().initializeIdentityMaps(); | |
try { | |
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); | |
ObjectOutputStream stream = new ObjectOutputStream(byteStream); | |
TIMESTAMPTZOwner tstz = (TIMESTAMPTZOwner) getSession().readObject(TIMESTAMPTZOwner.class, new org.eclipse.persistence.expressions.ExpressionBuilder().get("id").equal(2)); | |
//serialize object by writing to a stream | |
stream.writeObject(tstz); | |
stream.flush(); | |
byte arr[] = byteStream.toByteArray(); | |
ByteArrayInputStream inByteStream = new ByteArrayInputStream(arr); | |
ObjectInputStream inObjStream = new ObjectInputStream(inByteStream); | |
//deserialize the object | |
try { | |
TIMESTAMPTZOwner ts = (TIMESTAMPTZOwner) inObjStream.readObject(); | |
} catch (ClassNotFoundException e) { | |
System.out.println("Could not deserialize object " + e.toString()); | |
} | |
} catch (Exception e) { | |
ex = e; | |
} | |
} | |
public void verify() { | |
if (ex != null) { | |
if (ex.toString().startsWith("java.io.NotSerializableException: oracle.sql.TIMESTAMPTZ")) { | |
throw new TestErrorException("Serialization of value holder with TIMESTAMPTZ failed"); | |
} else { | |
throw new TestErrorException("This test throws an exception", ex); | |
} | |
} | |
} | |
} |