[ 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)