private Object extractPdxIfNeeded(Object object) { if (object instanceof PdxInstance) { object = ((PdxInstance) object).getObject(); } else if (object instanceof PdxString) { object = ((PdxString) object).toString(); } return object; }
/** * Helper method, Returns field values, in case of PdxInstance * gets the domain objects. */ public Object[] getPdxFieldValues() { if (this.values == null) { return new Object[0]; } Object[] fValues = new Object[this.values.length]; for (int i=0; i < this.values.length; i++) { if (this.values[i] instanceof PdxInstance) { fValues[i] = ((PdxInstance)this.values[i]).getObject(); } else if (this.values[i] instanceof PdxString) { fValues[i] = ((PdxString)this.values[i]).toString(); } else { fValues[i] = this.values[i]; } } return fValues; }
/** * Helper method, Returns field values, in case of PdxInstance * gets the domain objects. */ public Object[] getPdxFieldValues() { if (this.values == null) { return new Object[0]; } Object[] fValues = new Object[this.values.length]; for (int i=0; i < this.values.length; i++) { if (this.values[i] instanceof PdxInstance) { fValues[i] = ((PdxInstance)this.values[i]).getObject(); } else if (this.values[i] instanceof PdxString) { fValues[i] = ((PdxString)this.values[i]).toString(); } else { fValues[i] = this.values[i]; } } return fValues; }
receiver = ((PdxInstanceImpl)receiver).getCachedObject(); } else { receiver = ((PdxInstance)receiver).getObject();
public void testObjectArrayPdxInstance() throws IOException, ClassNotFoundException { DefaultQuery.setPdxReadSerialized(true); PdxReaderImpl.TESTHOOK_TRACKREADS = true; try { LongFieldHolder[] v = new LongFieldHolder[]{new LongFieldHolder(1), new LongFieldHolder(2)}; PdxInstance pi = (PdxInstance) serializeAndDeserialize(new ObjectArrayHolder(v)); ObjectArrayHolder oah = (ObjectArrayHolder) pi.getObject(); LongFieldHolder[] nv = (LongFieldHolder[])oah.getObjectArray(); if (!Arrays.equals(v, nv)) { fail("expected " + Arrays.toString(v) + " but had " + Arrays.toString(nv)); } Object[] oa = (Object[]) pi.getField("f1"); assertTrue(oa[0] instanceof PdxInstance); assertTrue(oa[1] instanceof PdxInstance); LongFieldHolder[] nv2 = new LongFieldHolder[2]; nv2[0] = (LongFieldHolder)((PdxInstance)oa[0]).getObject(); nv2[1] = (LongFieldHolder)((PdxInstance)oa[1]).getObject(); if (!Arrays.equals(v, nv2)) { fail("expected " + Arrays.toString(v) + " but had " + Arrays.toString(nv2)); } } finally { DefaultQuery.setPdxReadSerialized(false); PdxReaderImpl.TESTHOOK_TRACKREADS = false; } } public void testLongField() throws IOException, ClassNotFoundException {
for (int i = 0; i < values.length; i++) { if (values[i] instanceof PdxInstance) { newValues[i] = ((PdxInstance) values[i]).getObject(); } else if (values[i] instanceof PdxString) { newValues[i] = ((PdxString) values[i]).toString(); } else { if (object instanceof PdxInstance) { object = ((PdxInstance) object).getObject(); } else if (object instanceof PdxString) { object = ((PdxString) object).toString();
public void testReadNullObjects() throws Exception { setupSerializer(stdSerializableClasses); // Don't want to write any fields DomainObjectPdxAuto objOut = new DomainObjectPdxAuto(4); objOut.anInteger = null; HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT); DataSerializer.writeObject(objOut, out); // Now we want to read all fields. manager.resetCaches(); PdxInstance pdxIn = DataSerializer.readObject(new DataInputStream( new ByteArrayInputStream(out.toByteArray()))); DomainObjectPdxAuto result = (DomainObjectPdxAuto) pdxIn.getObject(); assertNull(result.anInteger); assertNull(result.anEnum); }
assertEquals(new SimpleClass(57, (byte)3), piv.getObject()); Object v2 = r.get(1); if (v == v2) {
public void testGetFieldName() throws IOException, ClassNotFoundException { setupSerializer(new ExplicitFieldNameAutoSerializer(false, "com.gemstone.gemfire.pdx.DomainObjectPdxAuto"), true); DomainObject objOut = new DomainObjectPdxAuto(4); HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT); DataSerializer.writeObject(objOut, out); PdxInstance pi = (PdxInstance)DataSerializer.readObject(new DataInputStream( new ByteArrayInputStream(out.toByteArray()))); System.out.println("fieldNames=" + pi.getFieldNames()); assertEquals(false, pi.hasField("long_0")); assertEquals(true, pi.hasField("_long_0")); assertEquals(true, pi.hasField("string_0")); assertEquals(objOut, pi.getObject()); }
public void testIsIdentityField() throws IOException, ClassNotFoundException { setupSerializer(new ExplicitIdentityAutoSerializer(false, "com.gemstone.gemfire.pdx.DomainObjectPdxAuto"), true); DomainObject objOut = new DomainObjectPdxAuto(4); HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT); DataSerializer.writeObject(objOut, out); DataSerializer.writeObject(objOut, out); DataInputStream dis = new DataInputStream( new ByteArrayInputStream(out.toByteArray())); PdxInstance pi = (PdxInstance)DataSerializer.readObject(dis); PdxInstance pi2 = (PdxInstance)DataSerializer.readObject(dis); assertEquals(true, pi.isIdentityField("long_0")); assertEquals(false, pi.isIdentityField("string_0")); assertEquals(false, pi.isEnum()); assertEquals(objOut.getClass().getName(), pi.getClassName()); assertEquals(objOut, pi.getObject()); assertEquals(objOut, pi2.getObject()); } public static class ExplicitIncludedAutoSerializer extends ReflectionBasedAutoSerializer {
private Object deserializePdxForLocalDistinctQuery(ExecutionContext context, Object val) throws QueryInvocationTargetException { if (!((DefaultQuery) context.getQuery()).isRemoteQuery()) { if (context.isDistinct() && val instanceof PdxInstance && !this.region.getCache().getPdxReadSerialized()) { try { val = ((PdxInstance) val).getObject(); } catch (Exception ex) { throw new QueryInvocationTargetException( "Unable to retrieve domain object from PdxInstance while building the ResultSet. " + ex.getMessage()); } } else if (val instanceof PdxString) { val = ((PdxString) val).toString(); } } return val; }
/** Given an object that can be a PdxInstance, return either the object or * the base object represented by the PdxInstance. * @param anObj The object that could be a PdxInstance * @return anObj, or if anObj is a PdxInstance return its base object. */ public static Object toBaseObject(Object anObj) { boolean expectPdxInstance = true; Cache aCache = CacheHelper.getCache(); if (aCache != null) { // could be null during a nice_kill expectPdxInstance = aCache.getPdxReadSerialized(); } if (anObj instanceof PdxInstance) { if (!expectPdxInstance) { throw new TestException("Did not expect a PdxInstance: " + anObj); } PdxInstance pdxInst = (PdxInstance)anObj; Object baseObj = pdxInst.getObject(); Log.getLogWriter().info("Obtained " + baseObj + " from PdxInstance " + pdxInst); return baseObj; } else if (anObj == null) { return anObj; } else { // even if we expect PdxInstances, we might get a domain object if it // happens to be deserialized already in the cache return anObj; } }
public static String getOldValueStr(EntryEvent eEvent) { try { Object value = eEvent.getOldValue(); if (value instanceof PdxInstance) { try { Object backingObj = ((PdxInstance)value).getObject(); return "PdxInstance representing: " + TestHelper.toString(backingObj); } catch (SerializationException e) { Throwable lastCause = TestHelper.getLastCausedBy(e); if (lastCause instanceof ClassNotFoundException) { return "<PdxInstance could not be obtained due to: " + e.getMessage() + ">"; } throw new TestException(TestHelper.getStackTrace(e)); } } else { return TestHelper.toString(value); } } catch (SerializationException e) { // find the last non-null caused by Throwable lastCause = TestHelper.getLastCausedBy(e); if (lastCause instanceof ClassNotFoundException) { return "<Class " + lastCause.getMessage() + " was not found>"; } throw e; } }
public static String getNewValueStr(EntryEvent eEvent) { try { Object value = eEvent.getNewValue(); if (value instanceof PdxInstance) { try { Object backingObj = ((PdxInstance)value).getObject(); return "PdxInstance representing: " + TestHelper.toString(backingObj); } catch (SerializationException e) { Throwable lastCause = TestHelper.getLastCausedBy(e); if (lastCause instanceof ClassNotFoundException) { return "<PdxInstance representing " + e.getMessage() + " but class could not be found>"; } throw new TestException(TestHelper.getStackTrace(e)); } } else { return TestHelper.toString(value); } } catch (SerializationException e) { // find the last non-null caused by Throwable lastCause = TestHelper.getLastCausedBy(e); if (lastCause instanceof ClassNotFoundException) { return "<Class " + lastCause.getMessage() + " was not found>"; } throw e; } }
private Object verifyAndGetPdxDomainObject(Object value) { if (value instanceof Struct) { // Doing hasPdx check first, since its cheaper. if (((StructImpl)value).isHasPdx() && !((GemFireCacheImpl) this.region.getCache()).getPdxReadSerializedByAnyGemFireServices()) { // Set the pdx values for the struct object. StructImpl v = (StructImpl)value; Object[] fieldValues = v.getPdxFieldValues(); return new StructImpl((StructTypeImpl)v.getStructType(), fieldValues); } } else if (value instanceof PdxInstance && !((GemFireCacheImpl) this.region.getCache()).getPdxReadSerializedByAnyGemFireServices()) { return ((PdxInstance)value).getObject(); } return value; }
private Object verifyAndGetPdxDomainObject(Object value) { if (value instanceof StructImpl) { // Doing hasPdx check first, since its cheaper. if (((StructImpl)value).isHasPdx() && !((GemFireCacheImpl) this.region.getCache()).getPdxReadSerializedByAnyGemFireServices()) { // Set the pdx values for the struct object. StructImpl v = (StructImpl)value; Object[] fieldValues = v.getPdxFieldValues(); return new StructImpl((StructTypeImpl)v.getStructType(), fieldValues); } } else if (value instanceof PdxInstance && !((GemFireCacheImpl) this.region.getCache()).getPdxReadSerializedByAnyGemFireServices()) { return ((PdxInstance)value).getObject(); } return value; }
assertEquals(Coin.HEADS.name(), e0.getField("name")); assertEquals(Coin.HEADS.ordinal(), e0.getField("ordinal")); assertEquals(Coin.HEADS, e0.getObject());
public void testReadNullPrimitives() throws Exception { setupSerializer(stdSerializableClasses); // Don't want to write any fields manager.addExcludePattern(".*DomainObjectPdxAuto", "a(Char|Boolean|Byte|Short|Int|Long|Float|Double)"); DomainObject objOut = new DomainObjectPdxAuto(4); objOut.set("aString", "aString has a value"); HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT); DataSerializer.writeObject(objOut, out); // Now we want to read all fields. manager.resetCaches(); PdxInstance pdxIn = DataSerializer.readObject(new DataInputStream( new ByteArrayInputStream(out.toByteArray()))); // Force the object to be de-serialized without any exceptions being thrown DomainObjectPdxAuto result = (DomainObjectPdxAuto) pdxIn.getObject(); assertEquals('\u0000', result.aChar); assertFalse(result.aBoolean); assertEquals(0, result.aByte); assertEquals(0, result.aShort); assertEquals(0, result.anInt); assertEquals(0L, result.aLong); assertEquals(0.0f, result.aFloat); assertEquals(0.0d, result.aDouble); assertEquals("aString has a value", result.get("aString")); }
Object backingObj = pdxInst.getObject(); if (backingObj instanceof BaseValueHolder) { Log.getLogWriter().info("Obtained " + backingObj + " from PdxInstance " + pdxInst);
public void testObjectPdxInstance() throws IOException, ClassNotFoundException { DefaultQuery.setPdxReadSerialized(true); PdxReaderImpl.TESTHOOK_TRACKREADS = true; try { PdxInstance pi = (PdxInstance) serializeAndDeserialize(new ObjectHolder("hello")); ObjectHolder v3 = (ObjectHolder)pi.getObject(); WritablePdxInstance wpi = pi.createWriter(); wpi.setField("f1", "goodbye"); assertEquals("goodbye", wpi.getField("f1")); ObjectHolder v = (ObjectHolder)wpi.getObject(); ObjectHolder v2 = (ObjectHolder)wpi.getObject(); assertEquals("goodbye", v.getObject()); assertEquals("goodbye", v2.getObject()); assertEquals("hello", v3.getObject()); assertEquals("goodbye", wpi.getField("f1")); } finally { DefaultQuery.setPdxReadSerialized(false); PdxReaderImpl.TESTHOOK_TRACKREADS = false; } } public void testObjectArrayPdxInstance() throws IOException, ClassNotFoundException {