/** * Method to add fields to match the PK fields of the persistable class * @param cw The ClassWriter to use */ protected void addFields(ClassWriter cw) { int[] pkPositions = cmd.getPKMemberPositions(); for (int i=0;i<pkPositions.length;i++) { AbstractMemberMetaData mmd = cmd.getMetaDataForManagedMemberAtPosition(pkPositions[i]); String fieldTypeName = getTypeNameForField(mmd); if (DataNucleusEnhancer.LOGGER.isDebugEnabled()) { DataNucleusEnhancer.LOGGER.debug(LOCALISER.msg("Enhancer.AddField", fieldTypeName + " " + pkClassName + " " + mmd.getName())); } FieldVisitor fv = cw.visitField(Opcodes.ACC_PUBLIC, mmd.getName(), ASMUtils.getTypeDescriptorForType(fieldTypeName), null, null); fv.visitEnd(); } }
/** * Constructor. * @param ownerTable Table of the owner member, for linking back * @param tableName The Table SQL identifier * @param mmd Member meta data for the owner field/property * @param storeMgr Manager for the datastore. */ protected JoinTable(Table ownerTable, DatastoreIdentifier tableName, AbstractMemberMetaData mmd, RDBMSStoreManager storeMgr) { super(tableName, storeMgr); this.ownerTable = ownerTable; this.mmd = mmd; this.ownerType = mmd.getClassName(true); if (mmd.getPersistenceModifier() == FieldPersistenceModifier.NONE) { throw new NucleusException(Localiser.msg("057006", mmd.getName())).setFatal(); } }
RelationType relationType = mmd.getRelationType(clr); EmbeddedMetaData embmd = mmds.get(0).getEmbeddedMetaData(); if (mmds.size() == 1 && embmd != null && embmd.getOwnerMember() != null && embmd.getOwnerMember().equals(mmd.getName())) NucleusLogger.PERSISTENCE.debug("Field=" + mmd.getFullFieldName() + " not currently supported (embedded)");
NucleusLogger.DATASTORE_RETRIEVE.debug("Value of discriminator is null so assuming object is null"); return null; NucleusLogger.DATASTORE_RETRIEVE.debug("Exception obtaining value of discriminator : " + sqle.getMessage()); NucleusLogger.DATASTORE_RETRIEVE.debug("Value of determiner column is null so assuming object is null"); return null; NucleusLogger.DATASTORE_RETRIEVE.warn(Localiser.msg("052300", pcClassForObject.getName(), concreteSubclass.getName())); pcClassForObject = concreteSubclass; throw new NucleusUserException(Localiser.msg("052301", pcClassForObject.getName())); mappedFieldNumbers[i] = cmd.getAbsolutePositionOfMember(mmd.getName()); mappingDefinition.addMappingForMember(mappedFieldNumbers[i], resultMapping.getMappingForMemberPosition(fieldNumbers[i]));
/** * Method called at the end of visiting the setXXX method. * This is used to add the aaaSetXXX method with the same code as is present originally in the setXXX method. */ public void visitEnd() { visitor.visitEnd(); if (DataNucleusEnhancer.LOGGER.isDebugEnabled()) { String msg = ClassMethod.getMethodAdditionMessage(ASMClassEnhancer.MN_SetterPrefix + mmd.getName(), null, new Object[]{mmd.getType()}, new String[] {"val"}); DataNucleusEnhancer.LOGGER.debug(LOCALISER.msg("Enhancer.AddMethod", msg)); } if (!mmd.isAbstract()) { // Property is not abstract so generate the setXXX method to use the aaaSetXXX we just added generateSetXXXMethod(mv, mmd, enhancer.getASMClassName(), enhancer.getClassDescriptor(), ASMClassEnhancer.useFrames()); } }
void handleIgnorableMapping(AbstractClassMetaData acmd, AbstractMemberMetaData ammd, String localiserKey, String warningOnlyMsg) { switch (getIgnorableMetaDataBehavior()) { case WARN: if (ammd == null) { warn(String.format( "Meta-data warning for %s: %s %s %s", acmd.getFullClassName(), GAE_LOCALISER.msg(localiserKey), warningOnlyMsg, ADJUST_WARNING_MSG)); } else { warn(String.format( "Meta-data warning for %s.%s: %s %s %s", acmd.getFullClassName(), ammd.getName(), GAE_LOCALISER.msg(localiserKey, ammd.getFullFieldName()), warningOnlyMsg, ADJUST_WARNING_MSG)); } break; case ERROR: if (ammd == null) { throw new InvalidMetaDataException(GAE_LOCALISER, localiserKey, acmd.getFullClassName()); } throw new InvalidMetaDataException(GAE_LOCALISER, localiserKey, ammd.getFullFieldName()); // We swallow both null and NONE } }
RelationType relationType = mmd.getRelationType(clr); EmbeddedMetaData embmd = mmds.get(0).getEmbeddedMetaData(); if (mmds.size() == 1 && embmd != null && embmd.getOwnerMember() != null && embmd.getOwnerMember().equals(mmd.getName())) NucleusLogger.PERSISTENCE.debug("Field=" + mmd.getFullFieldName() + " not currently supported (embedded)");
NucleusLogger.DATASTORE_SCHEMA.debug("Member " + mmd.getFullFieldName() + " uses superclass-table yet the field is not marked as nullable " + " nor does it have a default value, so setting the column as nullable"); throw new NucleusException(Localiser.msg("057006",mmd.getName())).setFatal(); NucleusLogger.METADATA.warn(Localiser.msg("057016", theCmd.getFullClassName(), mmd.getCollection().getElementType())); NucleusLogger.METADATA.warn(Localiser.msg("057014", theCmd.getFullClassName(), mmd.getType().getComponentType().getName()));
if (DataNucleusEnhancer.LOGGER.isDebugEnabled()) DataNucleusEnhancer.LOGGER.debug(LOCALISER.msg("Enhancer.AddMethod", "int " + pkClassName + ".hashCode()")); mv.visitFieldInsn(Opcodes.GETFIELD, className_ASM, mmd.getName(), ASMUtils.getTypeDescriptorForType(mmd.getTypeName())); if (mmd.getType() == long.class)
ASMClassEnhancer.MN_GetterPrefix + mmd.getName(), "()" + fieldTypeDesc); String methodName = "get" + ASMUtils.getTypeNameForJDOMethod(mmd.getType()) + "Field"; String argTypeDesc = fieldTypeDesc; "()Lorg/datanucleus/util/DetachListener;"); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitLdcInsn(mmd.getName()); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "org/datanucleus/util/DetachListener", "undetachedFieldAccess", "(Ljava/lang/Object;Ljava/lang/String;)V"); mv.visitLdcInsn(LOCALISER.msg("Enhancer.DetachedPropertyAccess", mmd.getName())); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, ASMClassEnhancer.ACN_DetachedFieldAccessException, "<init>", "(Ljava/lang/String;)V"); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, asmClassName, ASMClassEnhancer.MN_GetterPrefix + mmd.getName(), "()" + fieldTypeDesc); ASMUtils.addReturnForType(mv, mmd.getType()); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, asmClassName, ASMClassEnhancer.MN_GetterPrefix + mmd.getName(), "()" + fieldTypeDesc); String methodName = "get" + ASMUtils.getTypeNameForJDOMethod(mmd.getType()) + "Field"; String argTypeDesc = fieldTypeDesc; "()Lorg/datanucleus/util/DetachListener;"); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitLdcInsn(mmd.getName()); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "org/datanucleus/util/DetachListener", "undetachedFieldAccess", "(Ljava/lang/Object;Ljava/lang/String;)V");
AbstractMemberMetaData mmd = cmd.getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber); EmbeddedMetaData embmd = mmds.get(0).getEmbeddedMetaData(); if (mmds.size() == 1 && embmd != null && embmd.getOwnerMember() != null && embmd.getOwnerMember().equals(mmd.getName())) NucleusLogger.PERSISTENCE.debug("Field=" + mmd.getFullFieldName() + " not currently supported as embedded into the owning object");
if (DataNucleusEnhancer.LOGGER.isDebugEnabled()) DataNucleusEnhancer.LOGGER.debug(LOCALISER.msg("Enhancer.AddMethod", "boolean " + pkClassName + ".equals(Object obj)")); mv.visitFieldInsn(Opcodes.GETFIELD, className_ASM, mmd.getName(), ASMUtils.getTypeDescriptorForType(mmd.getTypeName())); mv.visitVarInsn(Opcodes.ALOAD, 2); mv.visitFieldInsn(Opcodes.GETFIELD, className_ASM, mmd.getName(), ASMUtils.getTypeDescriptorForType(mmd.getTypeName())); mv.visitFieldInsn(Opcodes.GETFIELD, className_ASM, mmd.getName(), ASMUtils.getTypeDescriptorForType(mmd.getTypeName())); mv.visitVarInsn(Opcodes.ALOAD, 2); mv.visitFieldInsn(Opcodes.GETFIELD, className_ASM, mmd.getName(), ASMUtils.getTypeDescriptorForType(mmd.getTypeName())); String typeNameDesc = "L" + typeName_ASM + ";"; mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitFieldInsn(Opcodes.GETFIELD, className_ASM, mmd.getName(), typeNameDesc); mv.visitVarInsn(Opcodes.ALOAD, 2); mv.visitFieldInsn(Opcodes.GETFIELD, className_ASM, mmd.getName(), typeNameDesc); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, typeName_ASM, "equals", "(Ljava/lang/Object;)Z");
public FKListStore(AbstractMemberMetaData ownerMmd, DatastoreManager storeMgr, ClassLoaderResolver clr) { super(ownerMmd, storeMgr, clr); orderMapping = elementTable.getExternalMapping(ownerMemberMetaData, MappingConsumer.MAPPING_TYPE_EXTERNAL_INDEX); if (ownerMemberMetaData.getOrderMetaData() != null && !ownerMemberMetaData.getOrderMetaData().isIndexedList()) { indexedList = false; } if (!storeMgr.storageVersionAtLeast(StorageVersion.READ_OWNED_CHILD_KEYS_FROM_PARENTS) && orderMapping == null && indexedList) { // Early storage version requires that indexedList has an order mapping in the element throw new NucleusUserException(LOCALISER.msg("056041", ownerMemberMetaData.getAbstractClassMetaData().getFullClassName(), ownerMemberMetaData.getName(), elementType)); } }
AbstractMemberMetaData lastMmd = mmds.get(mmds.size()-1); EmbeddedMetaData embmd = mmds.get(0).getEmbeddedMetaData(); if (mmds.size() == 1 && embmd != null && embmd.getOwnerMember() != null && embmd.getOwnerMember().equals(mmd.getName())) NucleusLogger.PERSISTENCE.debug("Field=" + mmd.getFullFieldName() + " not currently supported (embedded), storing as null"); return;
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, wrapperClassName_ASM, wrapperConverterMethod, "()" + type_desc); mv.visitFieldInsn(Opcodes.PUTFIELD, className_ASM, mmd.getName(), type_desc); mv.visitFieldInsn(Opcodes.PUTFIELD, className_ASM, mmd.getName(), ASMUtils.getTypeDescriptorForType(mmd.getTypeName())); mv.visitMethodInsn(Opcodes.INVOKESTATIC, typeName_ASM, "valueOf", "(Ljava/lang/String;)L" + typeName_ASM + ";"); mv.visitFieldInsn(Opcodes.PUTFIELD, className_ASM, mmd.getName(), "L" + typeName_ASM + ";"); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/util/Currency", "getInstance", "(Ljava/lang/String;)Ljava/util/Currency;"); mv.visitFieldInsn(Opcodes.PUTFIELD, className_ASM, mmd.getName(), "Ljava/util/Currency;"); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/util/TimeZone", "getTimeZone", "(Ljava/lang/String;)Ljava/util/TimeZone;"); mv.visitFieldInsn(Opcodes.PUTFIELD, className_ASM, mmd.getName(), "Ljava/util/TimeZone;"); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/util/UUID", "fromString", "(Ljava/lang/String;)Ljava/util/UUID;"); mv.visitFieldInsn(Opcodes.PUTFIELD, className_ASM, mmd.getName(), "Ljava/util/UUID;"); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J"); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, typeName_ASM, "<init>", "(J)V"); mv.visitFieldInsn(Opcodes.PUTFIELD, className_ASM, mmd.getName(), ASMUtils.getTypeDescriptorForType(mmd.getTypeName())); mv.visitFieldInsn(Opcodes.PUTFIELD, className_ASM, mmd.getName(), "Ljava/util/Calendar;");
AbstractMemberMetaData lastMmd = mmds.get(mmds.size()-1); EmbeddedMetaData embmd = mmds.get(0).getEmbeddedMetaData(); if (mmds.size() == 1 && embmd != null && embmd.getOwnerMember() != null && embmd.getOwnerMember().equals(mmd.getName())) NucleusLogger.PERSISTENCE.debug("Field=" + mmd.getFullFieldName() + " not currently supported (embedded), storing as null"); return;
/** * Method called at the end of visiting the getXXX method. * This is used to add the aaaGetXXX method with the same code as is present originally in the getXXX method. */ public void visitEnd() { visitor.visitEnd(); if (DataNucleusEnhancer.LOGGER.isDebugEnabled()) { String msg = ClassMethod.getMethodAdditionMessage(enhancer.getGetMethodPrefixMethodName() + mmd.getName(), mmd.getType(), null, null); DataNucleusEnhancer.LOGGER.debug(LOCALISER.msg("Enhancer.AddMethod", msg)); } if (!mmd.isAbstract()) { // Property is not abstract so generate the getXXX method to use the aaaGetXXX we just added generateGetXXXMethod(mv, mmd, enhancer.getASMClassName(), enhancer.getClassDescriptor(), false, ASMClassEnhancer.useFrames()); } }
fmd.getName(), fieldTypeDesc); String jdoMethodName = "get" + ASMUtils.getTypeNameForJDOMethod(fmd.getType()) + "Field"; String argTypeDesc = fieldTypeDesc; "()Lorg/datanucleus/util/DetachListener;"); visitor.visitVarInsn(Opcodes.ALOAD, 0); visitor.visitLdcInsn(fmd.getName()); visitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "org/datanucleus/util/DetachListener", "undetachedFieldAccess", visitor.visitLdcInsn(LOCALISER.msg("Enhancer.DetachedFieldAccess", fmd.getName())); visitor.visitMethodInsn(Opcodes.INVOKESPECIAL, enhancer.getDetachedFieldAccessExceptionAsmClassName(), "<init>", "(Ljava/lang/String;)V"); visitor.visitFieldInsn(Opcodes.GETFIELD, getClassEnhancer().getASMClassName(), fmd.getName(), fieldTypeDesc); ASMUtils.addReturnForType(visitor, fmd.getType());
sm.unloadField(sm.getClassMetaData().getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber).getName()); NucleusLogger.DATASTORE.debug("Field " + sm.getClassMetaData().getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber).getFullFieldName() + " with value " + StringUtils.toJVMIDString(pc) + " and id=" + id + " has no StateManager so attaching one"); ObjectProviderFactory.newForHollowPreConstructed(ec, id, pc);