Hi All,
As discussed, I am trying to make changes in our java cod to migrate from jena
2 to jena 3
private Model getModelFromRDFStore(String modelName, java.sql.Connection
conn)
{
org.apache.jena.sdb.StoreDesc storeDesc = new
org.apache.jena.sdb.StoreDesc(org.apache.jena.sdb.store.LayoutType.LayoutTripleNodesIndex,
org.apache.jena.sdb.store.DatabaseType.Oracle) ;
org.apache.jena.sdb.Store store = null;
try {
store =
org.apache.jena.sdb.SDBFactory.connectStore(conn, storeDesc);
if(!StoreUtils.isFormatted(store))
{
store.getTableFormatter().create();
}
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
org.apache.jena.query.Dataset dataset =
org.apache.jena.sdb.SDBFactory.connectDataset(store);
Model model = null;
if (!dataset.containsNamedModel(modelName)) {
model = dataset.getDefaultModel();
dataset.addNamedModel(modelName, model);
}
else {
model = dataset.getNamedModel(modelName);
}
store.getConnection().close();
store.close();
System.out.println("############### RETURNING model ===== " +
model);
return model;
}
But I am getting the following issues
1) While printing the model (System.out.println("############### RETURNING
model ===== " + model);), I am getting the following SQLException:
<Jan 15, 2020 3:18:45,779 AM PST> <Error>
<oracle.bpm.barch.reports.services.repository.rdfimpl> <BEA-000000> <<[Thread -
[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'
]null.null> com.hp.hpl.jena.sdb.sql.SDBExceptionSQL: SQLException in executing
SQL statement
at com.hp.hpl.jena.sdb.compiler.SDB_QC.exec(SDB_QC.java:84)
at com.hp.hpl.jena.sdb.compiler.OpSQL.exec(OpSQL.java:65)
at
com.hp.hpl.jena.sdb.engine.QueryEngineSDB.eval(QueryEngineSDB.java:154)
at
com.hp.hpl.jena.sparql.engine.QueryEngineBase.evaluate(QueryEngineBase.java:137)
at
com.hp.hpl.jena.sparql.engine.QueryEngineBase.createPlan(QueryEngineBase.java:107)
at
com.hp.hpl.jena.sparql.engine.QueryEngineBase.getPlan(QueryEngineBase.java:88)
at
com.hp.hpl.jena.sdb.engine.QueryEngineSDB$QueryEngineFactorySDB.create(QueryEngineSDB.java:198)
at com.hp.hpl.jena.sdb.graph.GraphSDB.graphBaseFind(GraphSDB.java:169)
at com.hp.hpl.jena.graph.impl.GraphBase.find(GraphBase.java:277)
at com.hp.hpl.jena.graph.GraphUtil.findAll(GraphUtil.java:123)
at com.hp.hpl.jena.graph.impl.GraphBase.toString(GraphBase.java:436)
at com.hp.hpl.jena.graph.impl.GraphBase.toString(GraphBase.java:411)
at java.lang.String.valueOf(String.java:2981)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.hp.hpl.jena.rdf.model.impl.ModelCom.toString(ModelCom.java:1506)
at java.lang.String.valueOf(String.java:2981)
at java.lang.StringBuilder.append(StringBuilder.java:131)
2) We are fetching model data from database, but I am not getting any details
in the fetched model object. Is something missing in this logic?
Regards,
Ashwani
On 10/01/20, 4:14 PM, "Andy Seaborne" <[email protected]> wrote:
Probably has not been formatted:
https://urldefense.proofpoint.com/v2/url?u=http-3A__jena.apache.org_documentation_sdb_javaapi.html-23formatting-2Dor-2Demptying-2Dthe-2Dstore&d=DwIDaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=ld8gXdwUlVansMT0flGoGNN0AOkhQba_hAJM5PewJCA&m=xMdWwv3NfQf8eKJO6IDGzidz0u7zt4EiZ0x6jeuB5WI&s=2bL8SFjE2-I7Ooz_b_k_V2x6t7R7hn50CNfPrVbF99A&e=
On 10/01/2020 02:20, Ashwani Rathi wrote:
> Hi All,
> As discussed, I am trying to migrate from Jena 2 to Jena 3. As part of
that we are trying to eliminate usage of com.hp.hpl.jena.db.IDBConnection and
rather use org.apache.jena.sdb.sql.SDBConnection
> Following is the method that we have written to get
org.apache.jena.rdf.model.Model object from database
>
> private Model getModelFromRDFStore(String modelName,
java.sql.Connection conn)
> {
> org.apache.jena.sdb.StoreDesc storeDesc = new
org.apache.jena.sdb.StoreDesc(org.apache.jena.sdb.store.LayoutType.LayoutTripleNodesIndex,
> org.apache.jena.sdb.store.DatabaseType.Oracle) ;
> org.apache.jena.sdb.Store store = null;
> try {
> store =
org.apache.jena.sdb.SDBFactory.connectStore(conn, storeDesc);
> } catch (java.sql.SQLException e) {
> e.printStackTrace();
> }
> org.apache.jena.query.Dataset dataset =
org.apache.jena.sdb.SDBFactory.connectDataset(store);
> Model model = null;
> if (!dataset.containsNamedModel(modelName)) {
> model = dataset.getDefaultModel();
> dataset.addNamedModel(modelName, model);
> }
> else {
> model = dataset.getNamedModel(modelName);
> }
> return model;
> }
>
> But while checking for model in a dataset ->
(!dataset.containsNamedModel(modelName)), we are getting the following error:
> Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: table or view
does not exist
>
> Attached is the detailed exception. From the log it seems that some
tables like Nodes N_1, Quads Q_1 , Nodes R_1, Nodes R_2 are missing.
> So can anyone please tell what all tables (with columns) should we create
to fix this issue?
>
> Regards,
> Ashwani
>
>
>
> On 09/01/20, 8:07 PM, "Andy Seaborne" <[email protected]> wrote:
>
> Hi Ashwani,
>
> What are you trying to achieve overall?
>
> Is it to port an existing application/system from Jena 2.6 to Jena
> 3.current?
> Or is it create a general adaptor for Jena to Oracle Spatial RDF?
>
> The answers to your questions are different depending on use case.
>
> If it is the latter, then going down the SDB route may lead to a
whole host
> of problems because SDB is not deeply integrated into Jena anymore.
For
> example: transactions (and integration with Fuseki will be hard),
newer
> APIs like RDFConnection. You want to implement DatasetGraph and
> Transactional. I doubt the database framework DBOE helps much but it
is
> worth checking that to see if it will save you work.
>
> If it is a one-off conversion for a specific application, things are
> simpler because it's getting something to work for one, known case
rather
> arbitrary application use cases in the future and as Jena evolves.
> ------------
> Re: SDBConnection
>
> SDBConnection does not control the table naming. That's in the
"FmtLayout"
> classes.
>
> Re:LayoutType
>
> See the source code.
> SDB uses one of three fixed table layouts. layout1 (really, *really*
don't
> use), layout2/index and layout2/hash.
>
> The SPARQL to SQL code generation is specific to the layout.
>
>
> On Thu, 9 Jan 2020 at 12:24, Ashwani Rathi
<[email protected]> wrote:
>
> > Thanks for the reply.
> >
> > Also in jena 2, we can set TableNamePrefix on an IDBConnection
with the
> > following statements:
> >
> > IDBConnection conn = null;
> > IRDBDriver driver = conn.getDriver();
> > driver.setTableNamePrefix("prefix");
> >
> > So what actually does this achieve. And how can we achieve the same
> > functionality in jena 3 with org.apache.jena.sdb.sql.SDBConnection
class?
> >
> > Regards,
> > Ashwani
> >
> > On 09/01/20, 2:15 PM, "Bögershausen, Merlin Michael" <
> > [email protected]> wrote:
> >
> > Hi,
> >
> > You can check whether the dataset contains a specific named
model with
> > dataset.containesNamedModel() [1]
> >
> >
> >
> > Best Merlin
> >
> >
> >
> > [1]
> >
https://urldefense.proofpoint.com/v2/url?u=https-3A__jena.apache.org_documentation_javadoc_arq_org_apache_jena_query_Dataset.html-23containsNamedModel-2Djava.lang.String-2D&d=DwIGaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=ld8gXdwUlVansMT0flGoGNN0AOkhQba_hAJM5PewJCA&m=_5kPj72-EHVEVxkEWZfp9umEDalFfeUoHIdfCCb9Plo&s=HB2xzUCShqe8JzEhH_9HaUktJ5rnUU2XOCqrcL6wOe8&e=
> >
> >
> >
> >
> >
> > Am 09.01.2020 06:59 schrieb Ashwani Rathi
<[email protected]>:
> >
> > Hi All,
> >
> > We are upgrading from jena 2 to jena 3.
> >
> > We have the following method in
com.hp.hpl.jena.db.IDBConnection in
> > jena 2:
> >
> >
> >
> >
> >
------------------------------------------------------------------------------------------------------------
> >
> > containsModel
> >
> >
> >
> > boolean containsModel(String name) throws
> > RDFRDBException
> >
> >
> >
> > Test if a given model is contained in the database.
> >
> >
> >
> > Parameters:
> >
> > name - the name of a model which may be in the database
> >
> > Returns:
> >
> > Boolean true if the model is contained in the database
> >
> > Throws:
> >
> > RDFDBException
> >
> > RDFRDBException
> >
> > Since:
> >
> > Jena 2.0
> >
> >
> >
------------------------------------------------------------------------------------------------------------
> >
> > This method is used to check whether a given model exists in
the
> > underlying database.
> >
> >
> >
> > So is there a corresponding method to check for models in
database in
> > jena 3 in org.apache.jena.sdb.sql.SDBConnection.java class or in
any other
> > jena 3 jar?
> >
> >
> >
> > Regards,
> >
> > Ashwani
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
>
>