Skip to content

Commit

Permalink
Fixes for issue #456 and #453
Browse files Browse the repository at this point in the history
  • Loading branch information
kkmishra committed Jan 31, 2014
1 parent 221cd52 commit 9d00b7f
Show file tree
Hide file tree
Showing 409 changed files with 4,093 additions and 5,853 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.impetus.kundera.configure.Configurator;
import com.impetus.kundera.configure.PersistenceUnitConfigurationException;
import com.impetus.kundera.loader.CoreLoader;
import com.impetus.kundera.persistence.EntityManagerFactoryImpl;

/**
Expand All @@ -51,35 +49,39 @@ public class KunderaPersistence implements PersistenceProvider
*/
public KunderaPersistence()
{
// Load Core
logger.info("Loading Core");
new CoreLoader().load();

this.providerUtil = new KunderaPersistenceProviderUtil(this);
this.cache = new PersistenceUtilHelper.MetadataCache();
}

@Override
public final EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map)
{
return createEntityManagerFactory(info.getPersistenceUnitName(), map);
synchronized (this)
{
try
{
EntityManagerFactory emf = new EntityManagerFactoryImpl(info, map);

return emf;
}
catch (PersistenceUnitConfigurationException pcex)
{
// Means it is not for kundera persistence!
logger.error("EnrityManagerFactory not created, returning null.");
return null;
}
}
}

@Override
public synchronized final EntityManagerFactory createEntityManagerFactory(String persistenceUnit, Map map)
{
// TODO: This may be a comma separated PU list, synchronizing on this
// list may not be intended
if (persistenceUnit == null)
{
throw new KunderaException("Persistence unit should not be null");
}
synchronized (this)
{
try
{
initializeKundera(persistenceUnit, map);

EntityManagerFactory emf = new EntityManagerFactoryImpl(persistenceUnit, map);

return emf;
Expand All @@ -93,26 +95,6 @@ public synchronized final EntityManagerFactory createEntityManagerFactory(String
}
}

/**
* One time initialization at Application and Client level.
*
* @param persistenceUnit
* Persistence Unit/ Comma separated persistence units
*/
private void initializeKundera(String persistenceUnit, Map props)
{
// Invoke Application MetaData
if (logger.isInfoEnabled())
{
logger.info("Loading Application MetaData and Initializing Client(s) For Persistence Unit(s) {}.",
persistenceUnit);
}

String[] persistenceUnits = persistenceUnit.split(Constants.PERSISTENCE_UNIT_SEPARATOR);

new Configurator(props, persistenceUnits).configure();
}

/**
* Returns Persistence Provider util
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
import javax.persistence.PersistenceUnitUtil;
import javax.persistence.spi.LoadState;

import com.impetus.kundera.metadata.KunderaMetadataManager;
import com.impetus.kundera.metadata.model.EntityMetadata;
import com.impetus.kundera.property.PropertyAccessorHelper;

/**
Expand Down Expand Up @@ -61,13 +59,13 @@ public boolean isLoaded(Object entity)
public Object getIdentifier(Object entity)
{
Class<?> entityClass = entity.getClass();
EntityMetadata entityMetadata = KunderaMetadataManager.getEntityMetadata(entityClass);

if (entityMetadata == null)
{
throw new IllegalArgumentException(entityClass + " is not an entity");
}
return PropertyAccessorHelper.getId(entity, entityMetadata);
// EntityMetadata entityMetadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entityClass);
//
// if (entityMetadata == null)
// {
// throw new IllegalArgumentException(entityClass + " is not an entity");
// }
return PropertyAccessorHelper.getId(entity, /*entityMetadata*/null);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.impetus.kundera.metadata.model.EntityMetadata;
import com.impetus.kundera.metadata.model.Relation;
import com.impetus.kundera.metadata.model.Relation.ForeignKey;
import com.impetus.kundera.persistence.EntityManagerFactoryImpl.KunderaMetadata;
import com.impetus.kundera.property.PropertyAccessorHelper;

/**
Expand All @@ -50,9 +51,16 @@ public abstract class ClientBase
protected String persistenceUnit;

protected boolean isUpdate;

protected ClientMetadata clientMetadata;

protected final KunderaMetadata kunderaMetadata;

protected ClientBase(final KunderaMetadata kunderaMetadata)
{
this.kunderaMetadata = kunderaMetadata;
}

/*
* (non-Javadoc)
*
Expand Down Expand Up @@ -82,7 +90,7 @@ public void persist(Node node)
{
Object entity = node.getData();
Object id = node.getEntityId();
EntityMetadata metadata = KunderaMetadataManager.getEntityMetadata(node.getDataClass());
EntityMetadata metadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, node.getDataClass());
isUpdate = node.isUpdate();
List<RelationHolder> relationHolders = getRelationHolders(node);
onPersist(metadata, entity, id, relationHolders);
Expand Down Expand Up @@ -221,11 +229,11 @@ else if (node.getChildren() != null)
protected abstract void onPersist(EntityMetadata entityMetadata, Object entity, Object id,
List<RelationHolder> rlHolders);


// protected abstract Map<String, Object> preparePersistentObject(EntityMetadata entityMetadata, Object entity, Object id,
// List<RelationHolder> rlHolders);

// protected abstract Map<String, Object>
// preparePersistentObject(EntityMetadata entityMetadata, Object entity,
// Object id,
// List<RelationHolder> rlHolders);

public ClientMetadata getClientMetadata()
{
return this.clientMetadata;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
import com.impetus.kundera.PersistenceProperties;
import com.impetus.kundera.loader.ClientFactory;
import com.impetus.kundera.loader.GenericClientFactory;
import com.impetus.kundera.metadata.model.KunderaMetadata;
import com.impetus.kundera.metadata.model.PersistenceUnitMetadata;
import com.impetus.kundera.persistence.EntityManagerFactoryImpl.KunderaMetadata;

/**
* Resolver class for client. It instantiates client factory and discover
Expand All @@ -51,9 +51,9 @@ public final class ClientResolver
* the persistence unit
* @return the client factory
*/
public static ClientFactory getClientFactory(String persistenceUnit, Map<String, Object> puProperties)
public static ClientFactory getClientFactory(String persistenceUnit, Map<String, Object> puProperties,final KunderaMetadata kunderaMetadata)
{
ClientFactory clientFactory = instantiateClientFactory(persistenceUnit, puProperties);
ClientFactory clientFactory = instantiateClientFactory(persistenceUnit, puProperties, kunderaMetadata);
clientFactories.put(persistenceUnit, clientFactory);
return clientFactory;
}
Expand All @@ -66,11 +66,12 @@ public static ClientFactory getClientFactory(String persistenceUnit, Map<String,
* @param clientFactory
* @return new instance of clientFactory
*/
private static ClientFactory instantiateClientFactory(String persistenceUnit, Map<String, Object> puProperties)
private static ClientFactory instantiateClientFactory(String persistenceUnit, Map<String, Object> puProperties,
final KunderaMetadata kunderaMetadata)
{
ClientFactory clientFactory = null;
logger.info("Initializing client factory for: " + persistenceUnit);
PersistenceUnitMetadata persistenceUnitMetadata = KunderaMetadata.INSTANCE.getApplicationMetadata()
PersistenceUnitMetadata persistenceUnitMetadata = kunderaMetadata.getApplicationMetadata()
.getPersistenceUnitMetadata(persistenceUnit);
String kunderaClientFactory = puProperties != null ? (String) puProperties
.get(PersistenceProperties.KUNDERA_CLIENT_FACTORY) : null;
Expand Down Expand Up @@ -104,6 +105,15 @@ private static ClientFactory instantiateClientFactory(String persistenceUnit, Ma
}

m.invoke(clientFactory, puProperties);

m = GenericClientFactory.class.getDeclaredMethod("setKunderaMetadata", KunderaMetadata.class);
if (!m.isAccessible())
{
m.setAccessible(true);
}

m.invoke(clientFactory, kunderaMetadata);

}
catch (InstantiationException e)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@

import com.impetus.kundera.PersistenceProperties;
import com.impetus.kundera.configure.ClientProperties.DataStore;
import com.impetus.kundera.metadata.KunderaMetadataManager;
import com.impetus.kundera.metadata.model.PersistenceUnitMetadata;
import com.impetus.kundera.utils.KunderaCoreUtils;
import com.thoughtworks.xstream.XStream;
Expand All @@ -50,9 +49,10 @@ public abstract class AbstractPropertyReader

protected Map externalProperties;

public AbstractPropertyReader(Map externalProperties)
public AbstractPropertyReader(Map externalProperties, final PersistenceUnitMetadata puMetadata)
{
this.externalProperties = externalProperties;
this.puMetadata = puMetadata;
}

/**
Expand All @@ -64,7 +64,6 @@ public void read(String pu)
{
String propertyFileName = externalProperties != null ? (String) externalProperties
.get(PersistenceProperties.KUNDERA_CLIENT_PROPERTY) : null;
puMetadata = KunderaMetadataManager.getPersistenceUnitMetadata(pu);
if (propertyFileName == null)
{
propertyFileName = puMetadata != null ? puMetadata
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import java.util.Map;

import com.impetus.kundera.persistence.EntityManagerFactoryImpl.KunderaMetadata;

public abstract class AbstractSchemaConfiguration
{

Expand All @@ -11,10 +13,14 @@ public abstract class AbstractSchemaConfiguration
/** Holding persistenceUnit properties */
protected Map externalPropertyMap;

public AbstractSchemaConfiguration(final String[] persistenceUnits,final Map externalPropertyMap)
protected KunderaMetadata kunderaMetadata;

public AbstractSchemaConfiguration(final String[] persistenceUnits, final Map externalPropertyMap,
final KunderaMetadata kunderaMetadata)
{
this.persistenceUnits= persistenceUnits;
this.persistenceUnits = persistenceUnits;
this.externalPropertyMap = externalPropertyMap;
this.kunderaMetadata = kunderaMetadata;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.slf4j.LoggerFactory;

import com.impetus.kundera.client.ClientResolver;
import com.impetus.kundera.persistence.EntityManagerFactoryImpl.KunderaMetadata;
import com.impetus.kundera.utils.KunderaCoreUtils;

/**
Expand All @@ -40,9 +41,10 @@ public class ClientFactoryConfiguraton extends AbstractSchemaConfiguration imple
* @param persistenceUnits
* persistence units.
*/
public ClientFactoryConfiguraton(Map externalProperties, String... persistenceUnits)
public ClientFactoryConfiguraton(Map externalProperties, final KunderaMetadata kunderaMetadata,
String... persistenceUnits)
{
super(persistenceUnits, externalProperties);
super(persistenceUnits, externalProperties, kunderaMetadata);
}

@Override
Expand All @@ -57,7 +59,7 @@ public void configure()
Map<String, Object> puProperty = KunderaCoreUtils.getExternalProperties(pu, externalPropertyMap,
persistenceUnits);

ClientResolver.getClientFactory(pu, puProperty).load(pu, puProperty);
ClientResolver.getClientFactory(pu, puProperty, kunderaMetadata).load(pu, puProperty);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import com.impetus.kundera.client.ClientResolver;
import com.impetus.kundera.loader.ClientFactory;
import com.impetus.kundera.persistence.EntityManagerFactoryImpl.KunderaMetadata;
import com.impetus.kundera.utils.KunderaCoreUtils;

public class ClientMetadataBuilder
Expand All @@ -20,14 +21,16 @@ public class ClientMetadataBuilder

private SchemaConfiguration schemaConfiguration;

public ClientMetadataBuilder(Map mapOfPuProperties, String... persistenceUnits)
public ClientMetadataBuilder(Map mapOfPuProperties, final KunderaMetadata kunderaMetadata,
String... persistenceUnits)
{
this.persistenceUnits = persistenceUnits;
this.mapExternalProperties = mapOfPuProperties;
this.schemaConfiguration = new SchemaConfiguration(mapOfPuProperties, persistenceUnits);
this.schemaConfiguration = new SchemaConfiguration(mapOfPuProperties, kunderaMetadata, persistenceUnits);
}

public void buildClientFactoryMetadata(Map<String, ClientFactory> clientFactories)
public void buildClientFactoryMetadata(Map<String, ClientFactory> clientFactories,
final KunderaMetadata kunderaMetadata)
{
for (String pu : persistenceUnits)
{
Expand All @@ -36,7 +39,7 @@ public void buildClientFactoryMetadata(Map<String, ClientFactory> clientFactorie
Map<String, Object> puProperty = KunderaCoreUtils.getExternalProperties(pu, mapExternalProperties,
persistenceUnits);

ClientFactory clientFactory = ClientResolver.getClientFactory(pu, puProperty);
ClientFactory clientFactory = ClientResolver.getClientFactory(pu, puProperty, kunderaMetadata);
clientFactories.put(pu, clientFactory);
}

Expand Down

0 comments on commit 9d00b7f

Please sign in to comment.