| Summary: | org.eclipse.persistence.platform.database.oracle.converters.JGeometryConverter is not thred-safe | ||
|---|---|---|---|
| Product: | z_Archived | Reporter: | Magnus Heino <magnus> |
| Component: | Eclipselink | Assignee: | Nobody - feel free to take it <nobody> |
| Status: | NEW --- | QA Contact: | |
| Severity: | normal | ||
| Priority: | P2 | CC: | magnus, tom.ware |
| Version: | unspecified | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Linux | ||
| Whiteboard: | |||
Setting target and priority. See the following page for the meanings of these fields: http://wiki.eclipse.org/EclipseLink/Development/Bugs/Guidelines The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink |
Build Identifier: 2.1.0 The call to JGeometry.store is not thread safe, you should be using the store method that has a StructDescriptor as a parameter. Something like: public Struct convertToStruct(Object geometry, Connection connection) throws SQLException { if (geometry == null){ return null; } StructDescriptor structDescriptor = StructDescriptor.createDescriptor(this.getStructName(), connection); try { return JGeometry.store(connection, geometry, structDescriptor); } catch (Exception e) { throw new SQLException("JGeometry.store(..) failed", e); } } instead of the current public Struct convertToStruct(Object geometry, Connection connection) throws SQLException { if (geometry == null){ return null; } return JGeometry.store((JGeometry)geometry, connection); } If you don't do this, the call to store will use a static cached StructDescriptor that, in a multithreaded app, might come from some other thread being associated some other connection. AFAIK the new store(..) signature is available starting with oracle 10.2 Reproducible: Always