[ 
https://issues.apache.org/jira/browse/JENA-1521?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16437263#comment-16437263
 ] 

Andy Seaborne commented on JENA-1521:
-------------------------------------

Datasets shouldn't be closed at the end of a transaction. Close, it does does 
anything, means "not to be used again".

This is why the name was changed to {{TDB2Factory.connectDataset}} from 
{{createDataset}} to get away from the idea of create-destroy.

Because TDB1 and TDB2 databases are held JVM wide, calling the factory again 
gets the same database.

TDB1 ({{DatasetGraphTransaction}}) happens to do very little on {{close()}} and 
does not pass it down further. What clearup it does is reversed, by luck, on 
reuse.

TDB2 ({{DatasetGraphSwitchable}} passes it on to the storage and marks it 
closed.

We could ignore it in TDB2 and properly ignore it in TDB1 if the dataset has 
gone transactional. (I can image that a different dataset implementation may 
need a {{close()}} operation.)

> TDB2 backed Datasets cannot be re-opened.
> -----------------------------------------
>
>                 Key: JENA-1521
>                 URL: https://issues.apache.org/jira/browse/JENA-1521
>             Project: Apache Jena
>          Issue Type: Bug
>         Environment: Apache Jena: 3.7.0
> Java: 1.8_162
>            Reporter: Greg Albiston
>            Priority: Major
>
> If a Dataset connected to with TDB2Factory.connectDataset() is opened, closed 
> and then later re-opened it is reported that the Dataset is closed.
> Opening, closing and re-opening a Dataset with TDBFactory.createDataset() 
> causes no issues.
> Example code to reproduce:
> {noformat}
> public void testTDB2OpenClose() {
> System.out.println("TDB2 Open Close");
>  try {
>  Dataset dataset = TDB2Factory.connectDataset("test_tdb2");
>  dataset.begin(ReadWrite.WRITE);
>  Model defaultModel = dataset.getDefaultModel();
>  
> defaultModel.add(ResourceFactory.createResource("http://example.org/my#SubjA";),
>  ResourceFactory.createProperty("http://example.org/my#PropA";), 
> ResourceFactory.createResource("http://example.org/my#ObjA";));
>  dataset.commit();
>  dataset.end();
>  dataset.close();
> Dataset dataset2 = TDB2Factory.connectDataset("test_tdb2");
>  dataset2.begin(ReadWrite.READ);
>  Model readModel = dataset2.getDefaultModel();
>  Iterator<Statement> statements = readModel.listStatements();
>  while (statements.hasNext())
> { Statement statement = statements.next(); System.out.println(statement); }
>  dataset2.end();
>  dataset2.close();
>  } catch (Exception ex) \{ System.out.println("Exception: " + 
> ex.getMessage()); }
>  }
>  {noformat}
> {noformat}
>  public void testTDB1OpenClose() {
>  
>  System.out.println("TDB1 Open Close");
>  try {
>  Dataset dataset = TDBFactory.createDataset("test_tdb1");
>  dataset.begin(ReadWrite.WRITE);
>  Model defaultModel = dataset.getDefaultModel();
>  
> defaultModel.add(ResourceFactory.createResource("http://example.org/my#SubjA";),
>  ResourceFactory.createProperty("http://example.org/my#PropA";), 
> ResourceFactory.createResource("http://example.org/my#ObjA";));
>  dataset.commit();
>  dataset.end();
>  dataset.close();
>  
>  Dataset dataset2 = TDBFactory.createDataset("test_tdb1");
>  dataset2.begin(ReadWrite.READ);
>  Model readModel = dataset2.getDefaultModel();
>  Iterator<Statement> statements = readModel.listStatements();
>  while (statements.hasNext()) \{ Statement statement = statements.next(); 
> System.out.println(statement); }
> dataset2.end();
>  dataset2.close();
>  } catch (Exception ex)
> { System.out.println("Exception: " + ex.getMessage()); }
> }
> {noformat}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to