DatastoreManager getStoreManager() { return (DatastoreManager) ec.getStoreManager(); }
public static String determineKind(AbstractClassMetaData acmd, ExecutionContext ec) { MappedStoreManager storeMgr = (MappedStoreManager) ec.getStoreManager(); return determineKind(acmd, storeMgr, ec.getClassLoaderResolver()); }
/** * Accessor for the current DatastoreService for this ExecutionContext. * Each PM/EM has its own DatastoreService. * @param ec ExecutionContext * @return The DatastoreService */ public DatastoreService getDatastoreService(ExecutionContext ec) { ManagedConnection mconn = ec.getStoreManager().getConnection(ec); return ((EmulatedXAResource) mconn.getXAResource()).getDatastoreService(); }
/** * Accessor for the current DatastoreTransaction for this ExecutionContext. * Each PM/EM has its own DatastoreService, and consequently can have a current DatastoreTransaction. * @param ec ExecutionContext * @return The DatastoreTransaction if active, or null */ public DatastoreTransaction getDatastoreTransaction(ExecutionContext ec) { ManagedConnection mconn = ec.getStoreManager().getConnection(ec); return ((EmulatedXAResource) mconn.getXAResource()).getCurrentTransaction(); }
/** * Convenience accessor for the {@link KeyRegistry} associated with the current datasource connection. * @param ec ExecutionContext * @return The KeyRegistry */ public static KeyRegistry getKeyRegistry(ExecutionContext ec) { StoreManager storeManager = ec.getStoreManager(); ManagedConnection mconn = storeManager.getConnection(ec); return ((EmulatedXAResource) mconn.getXAResource()).getKeyRegistry(); }
(ForceStoreManager) ec.getStoreManager(), columns); for (ColumnImpl col : cols) { if (!"id".equals(col.getForceApiName())) {
/** * Append the fields in the default fetch group for the entity in the relationship to the query. * * @param helper the expression builder with the in progress query * @param col the column data for the relationship field * @param prefix the prefix to add to the relationship field */ public void appendRelationshipFields(ExpressionBuilderHelper helper, ColumnImpl col, String prefix) { // Add all the fields for this table List<ColumnImpl> columns = new ArrayList<ColumnImpl>(); int count = 0; String newPrefix = prefix != null ? prefix + col.getForceApiRelationshipName() + "." : col.getForceApiRelationshipName() + "."; for (int num : helper.acmd.getDFGMemberPositions()) { columns.clear(); List<ColumnImpl> cols = helper.table.getColumnsFor(helper.acmd, helper.acmd.getMetaDataForManagedMemberAtAbsolutePosition(num), (ForceStoreManager) ec.getStoreManager(), columns); for (ColumnImpl c : cols) { if (c.appendSelectString(helper, helper.acmd, num, count > 0, newPrefix)) { count++; } } } }
/** * Append the fields in the default fetch group for the entity in the relationship to the query. * * @param helper the expression builder with the in progress query * @param col the column data for the relationship field * @param prefix the prefix to add to the relationship field */ public void appendRelationshipFields(ExpressionBuilderHelper helper, ColumnImpl col, String prefix) { // Add all the fields for this table List<ColumnImpl> columns = new ArrayList<ColumnImpl>(); int count = 0; String newPrefix = prefix != null ? prefix + col.getForceApiRelationshipName() + "." : col.getForceApiRelationshipName() + "."; for (int num : helper.acmd.getDFGMemberPositions()) { columns.clear(); List<ColumnImpl> cols = helper.table.getColumnsFor(helper.acmd, helper.acmd.getMetaDataForManagedMemberAtAbsolutePosition(num), (ForceStoreManager) ec.getStoreManager(), columns); for (ColumnImpl c : cols) { if (c.appendSelectString(helper, helper.acmd, num, count > 0, newPrefix)) { count++; } } } }
/** * Method to actually perform the deletion of Entity(s) from the datastore. * @param ec ExecutionContext * @param keys Keys to delete */ public static void deleteEntitiesFromDatastore(ExecutionContext ec, List<Key> keys) { DatastoreService ds = ((DatastoreManager)ec.getStoreManager()).getDatastoreService(ec); if (NucleusLogger.DATASTORE_NATIVE.isDebugEnabled()) { NucleusLogger.DATASTORE_NATIVE.debug("Deleting entities with keys " + StringUtils.collectionToString(keys)); } if (ec.getStatistics() != null) { ec.getStatistics().incrementNumWrites(); } DatastoreTransaction txn = ((DatastoreManager)ec.getStoreManager()).getDatastoreTransaction(ec); if (txn == null) { if (keys.size() == 1) { ds.delete(keys.get(0)); } else { ds.delete(keys); } } else { Transaction innerTxn = txn.getInnerTxn(); if (keys.size() == 1) { ds.delete(innerTxn, keys.get(0)); } else { ds.delete(innerTxn, keys); } } }
public static List<Entity> getEntitiesFromDatastore(DatastoreService ds, List<Key> keys, ExecutionContext ec) { DatastoreTransaction txn = ((DatastoreManager)ec.getStoreManager()).getDatastoreTransaction(ec);
/** * Constructor. * @param op ObjectProvider for the object being handled. * @param datastoreEntity Entity to represent this object * @param fieldNumbers Field numbers that will be processed (optional, null means all fields). */ protected DatastoreFieldManager(ObjectProvider op, Entity datastoreEntity, int[] fieldNumbers) { this.ec = op.getExecutionContext(); this.datastoreEntity = datastoreEntity; this.fieldManagerStateStack.addFirst(new FieldManagerState(op)); DatastoreManager storeManager = (DatastoreManager) ec.getStoreManager(); this.typeConversionUtils = storeManager.getTypeConversionUtils(); // Sanity check String expectedKind = EntityUtils.determineKind(op.getClassMetaData(), ec); if (!expectedKind.equals(datastoreEntity.getKind())) { throw new NucleusException( "ObjectProvider is for <" + expectedKind + "> but key is for <" + datastoreEntity.getKind() + ">. One way this can happen is if you attempt to fetch an object of one type using" + " a Key of a different type.").setFatal(); } }
@Override public void setSubclasses(boolean subclasses) { // TODO Enable this! // We support only queries that also return subclasses if all subclasses belong to the same kind. if (subclasses) { DatastoreManager storeMgr = (DatastoreManager) ec.getStoreManager(); ClassLoaderResolver clr = ec.getClassLoaderResolver(); AbstractClassMetaData acmd = storeMgr.getMetaDataManager().getMetaDataForClass(getCandidateClass(), clr); if (!MetaDataUtils.isNewOrSuperclassTableInheritanceStrategy(acmd)) { throw new NucleusFatalUserException( "The App Engine datastore only supports queries that return subclass entities with the " + "SINGLE_TABLE interitance mapping strategy."); } } super.setSubclasses(subclasses); } }
@Override public void setSubclasses(boolean subclasses) { // TODO Enable this! // We support only queries that also return subclasses if all subclasses belong to the same kind. if (subclasses) { DatastoreManager storeMgr = (DatastoreManager) ec.getStoreManager(); ClassLoaderResolver clr = ec.getClassLoaderResolver(); AbstractClassMetaData acmd = storeMgr.getMetaDataManager().getMetaDataForClass(getCandidateClass(), clr); if (!MetaDataUtils.isNewOrSuperclassTableInheritanceStrategy(acmd)) { throw new NucleusFatalUserException( "The App Engine datastore only supports queries that return subclass entities with the " + "superclass-table interitance mapping strategy."); } } super.setSubclasses(subclasses); } }
TableImpl joinTable = ((ForceStoreManager) forceQuery.getExecutionContext().getStoreManager()).getTable(cmd);
/** * Convenience method to return the Entity for this <b>managed</b> JDO object. * @param pc The JDO object (managed by the provided PM) * @param pm The Persistence Manager * @return The Entity (if accessible) */ public Entity getEntityFromJPA(Object pc, EntityManager em) { ExecutionContext ec = ((JPAEntityManager)em).getExecutionContext(); ObjectProvider op = ec.findObjectProvider(pc); if (op != null) { DatastoreManager storeMgr = (DatastoreManager) ec.getStoreManager(); DatastoreTransaction txn = storeMgr.getDatastoreTransaction(ec); if (txn != null) { Entity entity = (Entity)op.getAssociatedValue(txn); if (entity != null) { return entity; } else { Key key = EntityUtils.getPkAsKey(op); return EntityUtils.getEntityFromDatastore(storeMgr.getDatastoreServiceForReads(ec), op, key); } } else { Key key = EntityUtils.getPkAsKey(op); return EntityUtils.getEntityFromDatastore(storeMgr.getDatastoreServiceForReads(ec), op, key); } } else { // TODO Cater for detached objects throw new UnsupportedOperationException("Not yet supported getting Entity for detached/unmanaged object"); } }
/** * Convenience method to return the Entity for this <b>managed</b> JDO object. * @param pc The JDO object (managed by the provided PM) * @param pm The Persistence Manager * @return The Entity (if accessible) */ public Entity getEntityFromJDO(Object pc, PersistenceManager pm) { ExecutionContext ec = ((JDOPersistenceManager)pm).getExecutionContext(); ObjectProvider op = ec.findObjectProvider(pc); if (op != null) { DatastoreManager storeMgr = (DatastoreManager) ec.getStoreManager(); DatastoreTransaction txn = storeMgr.getDatastoreTransaction(ec); if (txn != null) { Entity entity = (Entity)op.getAssociatedValue(txn); if (entity != null) { return entity; } else { Key key = EntityUtils.getPkAsKey(op); return EntityUtils.getEntityFromDatastore(storeMgr.getDatastoreServiceForReads(ec), op, key); } } else { Key key = EntityUtils.getPkAsKey(op); return EntityUtils.getEntityFromDatastore(storeMgr.getDatastoreServiceForReads(ec), op, key); } } else { // TODO Cater for detached objects throw new UnsupportedOperationException("Not yet supported getting Entity for detached/unmanaged object"); } }
ForceManagedConnection mconn = (ForceManagedConnection) ec.getStoreManager().getConnection(ec); try { long startTime = System.currentTimeMillis();
private void updateOneToOneBidirectionalOwnerObjectForField( ObjectProvider op, AbstractMemberMetaData fmd, Entity owningEntity) { MappedStoreManager storeMgr = (MappedStoreManager) op.getExecutionContext().getStoreManager(); ExecutionContext ec = op.getExecutionContext(); ClassLoaderResolver clr = ec.getClassLoaderResolver(); AbstractMemberMetaData[] relatedMmds = fmd.getRelatedMemberMetaData(clr); String fullClassName = ((AbstractClassMetaData) relatedMmds[0].getParent()).getFullClassName(); DatastoreClass refTable = storeMgr.getDatastoreClass(fullClassName, clr); JavaTypeMapping refMapping = refTable.getMemberMapping(fmd.getMappedBy()); if (refMapping.isNullable()) { // Null out the relationship to the object being deleted. refMapping.setObject(ec, owningEntity, new int[1], op.getObject()); // TODO If the object being deleted is this objects parent, do we delete this? // TODO(maxr): Do I need to manually request an update now? } }
private void appendMappedByExpression(ExpressionBuilderHelper h, InvokeExpression expr) { TupleName fieldName = getMappedExpression(h, expr); /** * The key is defined by @MapKey on the Map field and defaulted to "id" */ String columnToAdd = "id"; AbstractClassMetaData acmd = fieldName.getTuple().size() > 1 ? ec.getMetaDataManager() .getMetaDataForClass(h.compilation.getSymbolTable().getSymbol(fieldName.getShortNamePrefix()) .getValueType(), ec.getClassLoaderResolver()) : h.acmd; AbstractMemberMetaData ammd = acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd.getKeyMetaData() != null) { AbstractClassMetaData cmd = PersistenceUtils.getMemberElementClassMetaData(ammd, ec.getClassLoaderResolver(), ec.getMetaDataManager()); if (cmd != null) { TableImpl joinedTable = ((ForceStoreManager) ec.getStoreManager()).getTable(cmd); ColumnImpl col = joinedTable.getColumnByJavaName(ammd.getKeyMetaData().getMappedBy()); if (col != null) { columnToAdd = col.getFieldName(); } } } h.sb.append(columnToAdd); }
private void appendMappedByExpression(ExpressionBuilderHelper h, InvokeExpression expr) { TupleName fieldName = getMappedExpression(h, expr); /** * The key is defined by @MapKey on the Map field and defaulted to "id" */ String columnToAdd = "id"; AbstractClassMetaData acmd = fieldName.getTuple().size() > 1 ? ec.getMetaDataManager() .getMetaDataForClass(h.compilation.getSymbolTable().getSymbol(fieldName.getShortNamePrefix()) .getValueType(), ec.getClassLoaderResolver()) : h.acmd; AbstractMemberMetaData ammd = acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd.getKeyMetaData() != null) { AbstractClassMetaData cmd = PersistenceUtils.getMemberElementClassMetaData(ammd, ec.getClassLoaderResolver(), ec.getMetaDataManager()); if (cmd != null) { TableImpl joinedTable = ((ForceStoreManager) ec.getStoreManager()).getTable(cmd); ColumnImpl col = joinedTable.getColumnByJavaName(ammd.getKeyMetaData().getMappedBy()); if (col != null) { columnToAdd = col.getFieldName(); } } } h.sb.append(columnToAdd); }