openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Miłosz Tylenda <mtyle...@o2.pl>
Subject RE: Oracle XMLType fetch problems
Date Fri, 08 Apr 2011 08:05:27 GMT
Hi Don,

The AbsrtactMethodError probably comes from the fact that the setClob you use is a JDBC 4
variant of the method. If the driver is actually a JDBC 4 driver, you have chances to invoke
the method like this:

((org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement) stmnt).getInnermostDelegate().setClob(...)

I am afraid there is no simple way to inject "XMLType(?)" into INSERTs in OpenJPA 1.2. You
might try to extend the org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager or
some of its neighbours and set it thru a property:

<property name="openjpa.jdbc.UpdateManager" value="org.apache.openjpa.jdbc.kernel.YourUpdateManager"
/>


You have probably seen the changes made to OpenJPA 2.1 in the source code, if not see [1],
Subversion Commits tab.

Cheers,
Milosz

[1] https://issues.apache.org/jira/browse/OPENJPA-1691


> I've run into issues with handling strings whose length > 4000 chars.  I know this
is a documented bug that is fixed in OpenJPA 2.1, but I'm limited to the OpenJPA 1.2.1, and
am trying to fit the solution into that version.
> 
> I extended the base OracleDictionary, modified my persistence.xml to use my dictionary,
and overrode the connectedConfiguration() method.  This fixed the fetch problems.
> 
> However, I can't figure out how to get the insert to work.  I overrode the setTyped()
method and put "stmnt.setClob" in there for my xml columns.  However, I'm getting an abstract
method exception when this gets invoked.  Additionally, I can't figure out how to get the
changes made in RowImpl to get the generated sql correctly created (i.e. to insert XMLType(?)
into the string).  Do you have any insight into how or if I can work around this issue?
> 
> Thanks for any help.
> 
> Don
> 
> ________________________________
> From: Michael Dick [via OpenJPA] [mailto:ml-node+6209080-1310115157-321123@n2.nabble.com]
> Sent: Friday, March 25, 2011 3:27 PM
> To: Kostello, Donald G [GCG-NAOT]
> Subject: Re: Oracle XMLType fetch problems
> 
> The columnDefinition is the way I'd recommend if you know you'll be using
> Oracle. Other databases might have a different type names for XML columns so
> you're losing a little portability with this approach.
> 
> At any rate, I'm glad it worked for you.
> 
> -mike
> 
> 
> On Fri, Mar 25, 2011 at 3:14 PM, kostellodon <[hidden email]</user/SendEmail.jtp?type=node&node=6209080&i=0&by-user=t>>wrote:
> 
> > I don't have control over our production environment, so I can't ensure
> > we'll have the fixpacks available, so I can't try your second solution.
> >  But, your first method worked like a charm.  Adding the same
> > columnDefinition to my jaxb example caused that to start working also.  The
> > restriction seems to be that if I have multiple mappings for the same table,
> > the first entity that I use to access the table has to have that
> > columnDefinition (which is covered, obviously, by adding that definition to
> > all of my entities accessing that table).  Thanks for the help.
> >
> > Don
> >
> > ________________________________
> > From: Michael Dick [via OpenJPA] [mailto:
> > [hidden email]</user/SendEmail.jtp?type=node&node=6209080&i=1&by-user=t>]
> > Sent: Friday, March 25, 2011 1:30 PM
> > To: Kostello, Donald G [GCG-NAOT]
> > Subject: Re: Oracle XMLType fetch problems
> >
> > Hi Don,
> >
> > I'm not familiar with jaxb, but what you have looks pretty close to the
> > example in the OpenJPA manual.
> >
> > I've tried to reproduce the non-jaxb path and found that the problem is
> > that
> > OpenJPA is expecting your XML column to be a VARCHAR (because that's how
> > it's defined in the entity).
> >
> > I've found two ways to solve the problem :
> > 1. Add a columnDefinition to your @Column annotation. For example :
> >
> >    @Column(name = "XMLCOLUMN", columnDefinition ="XMLCOLUMN XMLType")
> >    private String xmlColumn;
> >
> > 2. Set the openjpa.jdbc.SchemaFactory property to "native" in
> > persistence.xml. This will tell OpenJPA to read the column definitions for
> > every entity in your persistence unit - so it'll take a little longer to
> > create the EntityManagerFactory. You will also want the fixes for
> > OPENJPA-128 <https://issues.apache.org/jira/browse/OPENJPA-1289>9 and
> > OPENJPA-1874 <https://issues.apache.org/jira/browse/OPENJPA-1874>. These
> > are
> > available in our nightly snapshots which are picked up by WebSphere on a
> > regular basis (but you might need the latest fixpack).
> >
> > Hope this helps,
> > -mike
> >
> > On Fri, Mar 25, 2011 at 11:47 AM, kostellodon <[hidden
> > email]</user/SendEmail.jtp?type=node&node=6208737&i=0&by-user=t>>wrote:
> >
> > > I am working with base WebSphere 7, which includes JPA 1.2.1, and am
> > > interacting with an Oracle 11.2 database.  I have a table with an XMLType
> > > column in it that I am trying to persist and later retrieve from.  I am
> > > doing my testing using JUnit 4, using ojdbc6.11.1.0.7.0.jar for my
> > driver.
> > > My classes are being enhanced at loadtime using the javaagent.
> > >
> > > I have tried 2 different methods to store and retrieve the xmltype
> > column.
> > > My first class uses a simple String attribute, and looks like this
> > > (BasicEntity just contains versioning and user info):
> > >
> > > @Entity
> > > @Table(name="SERVICE_SNAPSHOTS")
> > > public class ServiceSnapshot extends BasicEntity {
> > >
> > >        private static final long serialVersionUID = 5789621189247103676L;
> > >
> > >        @Id
> > >        @Column(name="SS_ID")
> > >        @SequenceGenerator(name="id_generatorServiceSnapshot",
> > > sequenceName="SERVICE_SNAPSHOTS_SEQ", allocationSize=1)
> > >        @GeneratedValue(strategy=GenerationType.SEQUENCE,
> > > generator="id_generatorServiceSnapshot")
> > >        private Long id;
> > >
> > >        @Column(name="SS_SERVICE_CD")
> > >        private String serviceCode;
> > >
> > >        @Column(name="SS_OPERATION_CD")
> > >        private String operationCode;
> > >
> > >        @Column(name="SS_CONTENTS_XML")
> > >        private String contentsXML;
> > >
> > >
> > > When I persist the objects, things appear to be stored in the database as
> > > expected.  If I store and fetch the objects in the same method (so that
> > the
> > > objects are in the entity manager), everything comes back fine.  I can
> > > query
> > > the database via SQL and the results are returned.  However, if I just
> > > fetch
> > > the objects, all of the attributes except the XML attribute are properly
> > > fetched.  The XML attribute is null.  If I log the SQL that's being run,
> > I
> > > see the column in the SQL string, but the contentsXML is still null.
> > >
> > > My second uses a JAX-B enhanced object to replace the contentsXML
> > > attribute,
> > > and this attribute looks like this:
> > >        @Persistent(fetch=FetchType.EAGER)
> > >        @Strategy("org.apache.openjpa.jdbc.meta.strats.XMLValueHandler")
> > >        @Column(name="ss_contents_xml")
> > >        private DEServiceResults results;
> > >
> > > I get the same behavior with this class - the results attribute is null,
> > > even though the other attributes are not, and results is in the SQL query
> > > that gets logged.
> > >
> > > I can fetch the xml if I use a native query, so I don't think it's a
> > driver
> > > issue.  Am I setting up my xmltype incorrectly, is this an OpenJPA
> > problem,
> > > or is this a bug with the IBM version?
> > >
> > > Thanks for any help.
> > >
> > > Don
> > >
> > > --
> > > View this message in context:
> > >
> > http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t>
> > <
> > http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208344.html?by-user=t&by-user=t>
> > >
> > > Sent from the OpenJPA Users mailing list archive at Nabble.com.
> > >
> >
> >
> > ________________________________
> > If you reply to this email, your message will be added to the discussion
> > below:
> >
> > http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208737.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6208737.html?by-user=t>
> > To unsubscribe from Oracle XMLType fetch problems, click here<
> > http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==<http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==&by-user=t>
> > >.
> >
> >
> > --
> > View this message in context:
> > http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209046.html<http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209046.html?by-user=t>
> > Sent from the OpenJPA Users mailing list archive at Nabble.com.
> >
> 
> 
> ________________________________
> If you reply to this email, your message will be added to the discussion below:
> http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6209080.html
> To unsubscribe from Oracle XMLType fetch problems, click here<http://openjpa.208410.n2.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=6208344&code=ZG9uYWxkLmcua29zdGVsbG9AY2l0aS5jb218NjIwODM0NHwtMjEyMzQ1ODE0OA==>.
> 
> 
> --
> View this message in context: http://openjpa.208410.n2.nabble.com/Oracle-XMLType-fetch-problems-tp6208344p6251372.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.

Mime
View raw message