Index: foundation/eclipselink.extension.oracle.test/src/org/eclipse/persistence/testing/tests/jpa/structconverter/StructConverterServerTestSuite.java =================================================================== --- foundation/eclipselink.extension.oracle.test/src/org/eclipse/persistence/testing/tests/jpa/structconverter/StructConverterServerTestSuite.java (revision 0) +++ foundation/eclipselink.extension.oracle.test/src/org/eclipse/persistence/testing/tests/jpa/structconverter/StructConverterServerTestSuite.java (revision 0) @@ -0,0 +1,158 @@ +/******************************************************************************* + * Copyright (c) 1998, 2008 Oracle. 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.jpa.structconverter; + +import javax.persistence.EntityManager; + +import junit.extensions.TestSetup; +import junit.framework.Test; +import junit.framework.TestSuite; +import oracle.spatial.geometry.JGeometry; + +import org.eclipse.persistence.expressions.Expression; +import org.eclipse.persistence.expressions.ExpressionBuilder; +import org.eclipse.persistence.expressions.spatial.SpatialExpressionFactory; +import org.eclipse.persistence.expressions.spatial.SpatialParameters; +import org.eclipse.persistence.expressions.spatial.SpatialParameters.Mask; +import org.eclipse.persistence.queries.ReadAllQuery; +import org.eclipse.persistence.platform.database.converters.StructConverter; + +import org.eclipse.persistence.testing.framework.junit.JUnitTestCase; +import org.eclipse.persistence.testing.models.jpa.structconverter.SimpleSpatial; +import org.eclipse.persistence.testing.models.jpa.structconverter.SimpleXMLSpatial; +import org.eclipse.persistence.testing.models.jpa.structconverter.JGeometryTableCreator; +import org.eclipse.persistence.testing.models.jpa.structconverter.DummyStructConverterType; + +/** + * TestSuite to ensure Annotation-based struct converters get properly added to the project + * + * This test suite ensures the project is properly set-up and does a sanity test using one of the + * converters. Other tests are handled by the StructConverter tests suites in the TestBrowser. + * + */ +public class StructConverterServerTestSuite extends JUnitTestCase { + + public static final String STRUCT_CONVERTER_PU = "structConverter"; + + public StructConverterServerTestSuite(){ + } + + public StructConverterServerTestSuite(String name){ + super(name); + } + + public static Test suite() { + TestSuite suite = new TestSuite(); + suite.setName("Struct Converter Test Suite"); + suite.addTest(new StructConverterServerTestSuite("testSetup")); + suite.addTest(new StructConverterServerTestSuite("testPlatform")); + suite.addTest(new StructConverterServerTestSuite("testSimpleSpatialWrite")); + suite.addTest(new StructConverterServerTestSuite("testSimpleReadQuery")); + return suite; + } + + public void testSetup() { + clearCache(); + getServerSession(STRUCT_CONVERTER_PU).executeNonSelectingSQL("DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'JPA_JGEOMETRY'"); + new JGeometryTableCreator().replaceTables(JUnitTestCase.getServerSession(STRUCT_CONVERTER_PU)); + getServerSession(STRUCT_CONVERTER_PU).executeNonSelectingSQL("INSERT INTO USER_SDO_GEOM_METADATA(TABLE_NAME, COLUMN_NAME, DIMINFO) VALUES('JPA_JGEOMETRY', 'JGEOMETRY'," + + " mdsys.sdo_dim_array(mdsys.sdo_dim_element('X', -100, 100, 0.005), mdsys.sdo_dim_element('Y', -100, 100, 0.005)))"); + + getServerSession(STRUCT_CONVERTER_PU).executeNonSelectingSQL("CREATE INDEX test_idx on JPA_JGEOMETRY(jgeometry) indextype is mdsys.spatial_index parameters ('sdo_level=5 sdo_numtiles=6')"); + } + + /** + * Ensure the DatabasePlatform is setup with the proper StructConverters + */ + public void testPlatform(){ + EntityManager em = createEntityManager(STRUCT_CONVERTER_PU); + try{ + // trigger deploy + em.find(SimpleSpatial.class, new Long(1)); + } catch (Exception e){}; + + StructConverter converter = getServerSession(STRUCT_CONVERTER_PU).getPlatform().getTypeConverters().get(JGeometry.class); + assertNotNull("Platform does not have correct JGeometryConverter.", converter); + assertTrue("JGeometery struct converter is wrong type.", converter.getClass().getName().indexOf("JGeometryConverter") >= 0); + + converter = getServerSession(STRUCT_CONVERTER_PU).getPlatform().getTypeConverters().get(DummyStructConverterType.class); + assertNotNull("Platform does not have correct DummyStructConverter.", converter); + assertTrue("JGeometery struct converter is wrong type.", converter.getClass().getName().indexOf("DummyStructConverter") >= 0); + } + + /** + * Sanity test to ensure a read and a write with a Converter specified by + * annotations work properly + */ + public void testSimpleSpatialWrite(){ + EntityManager em = createEntityManager(STRUCT_CONVERTER_PU); + + beginTransaction(em); + SimpleSpatial simpleSpatial = new SimpleSpatial(1000, pointCluster1()); + em.persist(simpleSpatial); + em.flush(); + + em.clear(); + + simpleSpatial = em.find(SimpleSpatial.class, new Long(1000)); + + assertNotNull("JGeometry was not properly read in.", simpleSpatial.getJGeometry()); + rollbackTransaction(em); + } + + /** + * Tests if SpatialExpressions will work properly without hung up when using ANYINTERACT query type + */ + public void testSimpleReadQuery(){ + + JGeometry circle = JGeometry.createCircle(-10, 0, 0, 10, 10, 0, 0); + JGeometry newCircle = JGeometry.createCircle(0, -10, 0, 10, 10, 0, 0); + EntityManager em = createEntityManager(); + try{ + beginTransaction(em); + SimpleSpatial simpleSpatial = new SimpleSpatial(2000, circle); + em.persist(simpleSpatial); + commitTransaction(em); + }catch (RuntimeException ex){ + if (isTransactionActive(em)){ + rollbackTransaction(em); + } + throw ex; + } + + clearCache(STRUCT_CONVERTER_PU); + + ReadAllQuery raq = new ReadAllQuery(SimpleSpatial.class); + ExpressionBuilder eb = raq.getExpressionBuilder(); + + SpatialParameters parameters = new SpatialParameters(); + parameters.setQueryType(SpatialParameters.QueryType.WINDOW).setMask(Mask.ANYINTERACT); + Expression selectionCriteria = SpatialExpressionFactory.relate(eb.get("jGeometry"), newCircle, parameters); + raq.setSelectionCriteria(selectionCriteria); + raq.addAscendingOrdering("id"); + getServerSession(STRUCT_CONVERTER_PU).executeQuery(raq); + } + + /** + * mdsys.sdo_geometry(5, + * NULL, null, + * mdsys.sdo_elem_info_array(1,1,3), + * mdsys.sdo_ordinate_array(1.1, 1.1, 2.2, 2.2, 3.3, 4.4))); + */ + public JGeometry pointCluster1() { + Object[] points = + new Object[] { new double[] { 1.1, 1.1 }, new double[] { 2.2, 2.2 }, + new double[] { 3.3, 4.4 } }; + return JGeometry.createMultiPoint(points, 2, 0); + } +} Index: jpa/eclipselink.jpa.test/build.xml =================================================================== --- jpa/eclipselink.jpa.test/build.xml (revision 3503) +++ jpa/eclipselink.jpa.test/build.xml (working copy) @@ -174,6 +174,7 @@ + @@ -1170,6 +1171,7 @@ + @@ -1458,6 +1460,31 @@ + + + + + + +CREATE OR REPLACE TYPE MY_GEOMETRY AS OBJECT (id NUMBER, geom MDSYS.SDO_GEOMETRY); + + + + + + + + + + + + + Index: jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/lob/LobJUnitTestCase.java =================================================================== --- jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/lob/LobJUnitTestCase.java (revision 3501) +++ jpa/eclipselink.jpa.test/src/org/eclipse/persistence/testing/tests/jpa/lob/LobJUnitTestCase.java (working copy) @@ -64,7 +64,8 @@ EntityManager em = createEntityManager(); beginTransaction(em); try { - Image image = ImageSimulator.generateImage(1000, 800); + //Image image = ImageSimulator.generateImage(1000, 800); + Image image = ImageSimulator.generateImage(4800, 4500); originalImage = image; em.persist(image); imageId = image.getId(); Index: jpa/eclipselink.jpa.test/weblogic.xml =================================================================== --- jpa/eclipselink.jpa.test/weblogic.xml (revision 3503) +++ jpa/eclipselink.jpa.test/weblogic.xml (working copy) @@ -76,6 +76,7 @@ +