Possible fix for OPENJPA-13 JIRA issue. Also fix possible NPE on delayed close

on transaction completion in managed environment.



git-svn-id: https://svn.apache.org/repos/asf/incubator/openjpa/trunk@453016 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
A. Abram White 2006-10-04 20:46:25 +00:00
parent 8785be46e7
commit 5337ce10d0
3 changed files with 13 additions and 12 deletions

View File

@ -35,6 +35,7 @@ import org.apache.openjpa.jdbc.sql.SQLBuffer;
import org.apache.openjpa.jdbc.sql.Select;
import org.apache.openjpa.kernel.OpenJPAStateManager;
import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.meta.JavaTypes;
import org.apache.openjpa.meta.ValueStrategies;
import org.apache.openjpa.util.InternalException;
import org.apache.openjpa.util.MetaDataException;
@ -341,7 +342,7 @@ public class HandlerFieldStrategy
Column col, Object autoInc) {
Object data;
if (_cols.length == 1)
data = autoInc;
data = JavaTypes.convert(autoInc, col.getJavaType());
else {
// multiple columns; have to get current value, replace this col's
// value with the given one, and reset
@ -351,7 +352,8 @@ public class HandlerFieldStrategy
data = new Object[_cols.length];
for (int i = 0; i < _cols.length; i++) {
if (_cols[i] == col) {
((Object[]) data)[i] = autoInc;
((Object[]) data)[i] = JavaTypes.convert(autoInc,
col.getJavaType());
break;
}
}

View File

@ -1794,7 +1794,9 @@ public class BrokerImpl
_flags &= ~FLAG_FLUSHED;
_flags &= ~FLAG_TRANS_ENDING;
if (_transEventManager.hasEndListeners()) {
// event manager nulled if freed broker
if (_transEventManager != null
&& _transEventManager.hasEndListeners()) {
fireTransactionEvent(new TransactionEvent(this,
status == Status.STATUS_COMMITTED
? TransactionEvent.AFTER_COMMIT_COMPLETE
@ -4021,10 +4023,7 @@ public class BrokerImpl
_extents = null;
}
try {
releaseConnection();
} catch (RuntimeException re) {
}
try { releaseConnection(); } catch (RuntimeException re) {}
_lm.close();
_store.close();

View File

@ -287,7 +287,7 @@ public class JavaTypes {
// no break
case DOUBLE:
if (val instanceof String)
new Double(val.toString());
return new Double(val.toString());
return val;
case FLOAT_OBJ:
if (val instanceof Float)
@ -297,7 +297,7 @@ public class JavaTypes {
// no break
case FLOAT:
if (val instanceof String)
new Float(val.toString());
return new Float(val.toString());
return val;
case INT_OBJ:
if (val instanceof Integer)
@ -307,7 +307,7 @@ public class JavaTypes {
// no break
case INT:
if (val instanceof String)
new Integer(val.toString());
return new Integer(val.toString());
return val;
case LONG_OBJ:
if (val instanceof Long)
@ -317,7 +317,7 @@ public class JavaTypes {
// no break
case LONG:
if (val instanceof String)
new Long(val.toString());
return new Long(val.toString());
return val;
case NUMBER:
if (val instanceof Number)
@ -333,7 +333,7 @@ public class JavaTypes {
// no break
case SHORT:
if (val instanceof String)
new Short(val.toString());
return new Short(val.toString());
return val;
case STRING:
return val.toString();