Ticket #6 (closed defect: worksforme)
NullPointerException when creating 2 new containers in the same transaction
| Reported by: | goiss | Owned by: | michael |
|---|---|---|---|
| Priority: | major | Milestone: | |
| Component: | MozartSpaces | Version: | |
| Keywords: | Cc: |
Description
Aus dem Tuwis Forum:
Beim Versuch mehrere Container in einer Transaktion zu erstellen, gibt es eine NullPointerException. Zusätzlich beendet sich die Applikation nicht mehr ohne Verwendung von System.exit. Beispielcode:
public static void main(String[] args) {
ICapi capi = null; try {
capi = new Capi(); Transaction tx = capi.createTransaction(null, ICapi.INFINITE_TIMEOUT); ContainerRef ref1 = capi.createContainer(
tx, null, "ref1", IContainer.INFINITE_SIZE);
ContainerRef ref2 = capi.createContainer(
tx, null, "ref2", IContainer.INFINITE_SIZE);
capi.commitTransaction(tx);
} catch (XCoreException ex) {
ex.printStackTrace();
} finally {
if (capi != null) {
try {
capi.shutdown(null, true);
} catch (XCoreException ex) {
ex.printStackTrace();
}
}
}
}
Wenn man das 2. createContainer löscht gibt es keine Exception. Der ausgegebene StackTrace in Eclipse ist:
Exception in thread "main" org.xvsm.internal.exceptions.FatalException: org.xvsm.internal.exceptions.FatalException: java.lang.NullPointerException
at org.xvsm.core.Capi.commitTransaction(Capi.java:117) at org.xvsm.example.EndlosExceptionTest.main(EndlosExceptionTest.java:28)
Caused by: org.xvsm.internal.exceptions.FatalException: java.lang.NullPointerException
at org.xvsm.core.Capi.throwException(Capi.java:456) at org.xvsm.core.Capi.commitTransaction(Capi.java:113) ... 1 more
Caused by: java.lang.NullPointerException
at org.xvsm.transactions.TransactionManager.commitTransaction(TransactionManager.java:257)socket closed
at org.xvsm.internal.tasks.TransactionTask.run(TransactionTask.java:155) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:619)
Attachments
Change History
comment:2 follow-up: ↓ 3 Changed 4 years ago by michael
- Status changed from assigned to closed
- Resolution set to worksforme
Modified TransactionManager
Please review line 256ff. Works for me.
comment:3 in reply to: ↑ 2 Changed 4 years ago by goiss
- Status changed from closed to reopened
- Resolution worksforme deleted
Replying to michael:
Modified TransactionManager
Please review line 256ff. Works for me.
Aus dem Tuwis-Forum: Mit bescheidenem Erfolg... (wurde das ausgebessert, Anm. Hannu) Scheint nun ausschließlich der zuletzt erstellte Container zugreifbar zu sein. Wenn man im Beispiel capi.write(ref1,...) durch capi.write(ref2,...) ersetzt, geht es.
Außerdem: ohne System.exit scheinen die Programme sowieso kaum zu terminieren, dürften auch nach capi.shutdown immer noch Threads weiterlaufen.
public static void main(String[] args) { ICapi capi = null; try { capi = new Capi(); Transaction tx = capi.createTransaction(null, ICapi.INFINITE_TIMEOUT); ContainerRef ref1 = capi.createContainer( tx, null, "ref1", IContainer.INFINITE_SIZE); ContainerRef ref2 = capi.createContainer( tx, null, "ref2", IContainer.INFINITE_SIZE); capi.write(ref1, 0, tx, new AtomicEntry<String>("bla")); capi.commitTransaction(tx); } catch (XCoreException ex) { ex.printStackTrace(); } finally { if (capi != null) { try { capi.shutdown(null, true); } catch (XCoreException ex) { ex.printStackTrace(); } } } }
comment:4 Changed 4 years ago by michael
- Status changed from reopened to closed
- Resolution set to worksforme
Attached BasicTest.java works without problems.
comment:5 Changed 2 years ago by sim
decoration Changed 1 year ago by admin
bathtub Changed 1 year ago by admin
solar system Changed 1 year ago by admin
stair parts Changed 1 year ago by admin
solar supply Changed 1 year ago by admin

