Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ public class PersistenceConfig {

public static final String DB_UNIT_ENV = "DATABASE_UNIT";

public static final String DB_DRIVER_ENV = "DATABASE_DRIVER_CLASS";

public static final String DB_URL_ENV = "DATABASE_URL";

public static final String DB_USER_ENV = "DATABASE_USER";
Expand All @@ -20,13 +22,16 @@ public class PersistenceConfig {

private String url;

private String driver;

private String username;

private String password;

public PersistenceConfig() {

EnvUtils.getEnv(DB_UNIT_ENV, this::setUnitName);
EnvUtils.getEnv(DB_DRIVER_ENV, this::setDriver);
EnvUtils.getEnv(DB_URL_ENV, this::setUrl);
EnvUtils.getEnv(DB_USER_ENV, this::setUsername);
EnvUtils.getEnv(DB_PASS_ENV, this::setPassword);
Expand Down Expand Up @@ -63,4 +68,14 @@ public String getPassword() {
public void setPassword(String password) {
this.password = password;
}

public String getDriver() {
return driver;
}

public void setDriver(String driver) {
this.driver = driver;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.kumuluz.ee.jpa.common.resources.PersistenceContextResourceFactory;
import com.kumuluz.ee.jpa.common.resources.PersistenceUnitHolder;
import com.kumuluz.ee.jpa.common.resources.PersistenceUnitResourceFactory;
import java.util.Map;
import java.util.TreeMap;
import org.jboss.weld.injection.spi.JpaInjectionServices;
import org.jboss.weld.injection.spi.ResourceReferenceFactory;

Expand All @@ -20,29 +22,40 @@
@Priority(1)
public class JpaService implements JpaInjectionServices {

@Override
public ResourceReferenceFactory<EntityManager> registerPersistenceContextInjectionPoint
(InjectionPoint injectionPoint) {

PersistenceContext pc = injectionPoint.getAnnotated().getAnnotation(PersistenceContext
.class);
private ResourceReferenceFactory<EntityManager> defaultPersistenceContextResourceFactory;
private ResourceReferenceFactory<EntityManagerFactory> defaultPersistenceUnitResourceFactory;

EntityManagerFactory factory = PersistenceUnitHolder.getInstance()
.getEntityManagerFactory(pc.unitName());
private final Map<String, PersistenceContextResourceFactory> pcResourceFactories = new TreeMap<>();
private final Map<String, PersistenceUnitResourceFactory> puResourceFactories = new TreeMap<>();

return new PersistenceContextResourceFactory(factory);
@Override
public ResourceReferenceFactory<EntityManager> registerPersistenceContextInjectionPoint(InjectionPoint injectionPoint) {

PersistenceContext pc = injectionPoint.getAnnotated().getAnnotation(PersistenceContext.class);

if ("".equals(pc.unitName())) {
if (defaultPersistenceContextResourceFactory == null) {
defaultPersistenceContextResourceFactory = new PersistenceContextResourceFactory(PersistenceUnitHolder.getInstance()
.getEntityManagerFactory(pc.unitName()).createEntityManager());
}
return defaultPersistenceContextResourceFactory;
}
return persistenceContextResourceFactory(pc.unitName());
}

@Override
public ResourceReferenceFactory<EntityManagerFactory> registerPersistenceUnitInjectionPoint
(InjectionPoint injectionPoint) {
public ResourceReferenceFactory<EntityManagerFactory> registerPersistenceUnitInjectionPoint(InjectionPoint injectionPoint) {

PersistenceUnit pu = injectionPoint.getAnnotated().getAnnotation(PersistenceUnit.class);

EntityManagerFactory factory = PersistenceUnitHolder.getInstance()
.getEntityManagerFactory(pu.unitName());

return new PersistenceUnitResourceFactory(factory);
if ("".equals(pu.unitName())) {
if (defaultPersistenceUnitResourceFactory == null) {
defaultPersistenceUnitResourceFactory = new PersistenceUnitResourceFactory(PersistenceUnitHolder.getInstance()
.getEntityManagerFactory(pu.unitName()));
}
return defaultPersistenceUnitResourceFactory;
}
return persistenceUnitResourceFactory(pu.unitName());
}

@Override
Expand All @@ -60,4 +73,26 @@ public EntityManagerFactory resolvePersistenceUnit(InjectionPoint injectionPoint
@Override
public void cleanup() {
}

private ResourceReferenceFactory<EntityManager> persistenceContextResourceFactory(final String unitName) {
if (pcResourceFactories.containsKey(unitName)) {
return pcResourceFactories.get(unitName);
}
final EntityManagerFactory factory = PersistenceUnitHolder.getInstance()
.getEntityManagerFactory(unitName);
final PersistenceContextResourceFactory pcrfactory = new PersistenceContextResourceFactory(factory.createEntityManager());
pcResourceFactories.put(unitName, pcrfactory);
return pcrfactory;
}

private ResourceReferenceFactory<EntityManagerFactory> persistenceUnitResourceFactory(final String unitName) {
if (puResourceFactories.containsKey(unitName)) {
return puResourceFactories.get(unitName);
}
final EntityManagerFactory factory = PersistenceUnitHolder.getInstance()
.getEntityManagerFactory(unitName);
final PersistenceUnitResourceFactory purfactory = new PersistenceUnitResourceFactory(factory);
puResourceFactories.put(unitName, purfactory);
return purfactory;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
*/
public class PersistenceContextResource implements ResourceReference<EntityManager> {

private EntityManager em;
private final EntityManager em;

public PersistenceContextResource(EntityManager em) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,22 @@
import org.jboss.weld.injection.spi.ResourceReferenceFactory;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

/**
* @author Tilen Faganel
* @since 1.0.0
*/
public class PersistenceContextResourceFactory implements ResourceReferenceFactory<EntityManager> {

private EntityManagerFactory emf;
private final EntityManager em;

public PersistenceContextResourceFactory(javax.persistence.EntityManagerFactory emf) {

this.emf = emf;
public PersistenceContextResourceFactory(javax.persistence.EntityManager em) {
this.em = em;
}

@Override
public ResourceReference<EntityManager> createResource() {

return new PersistenceContextResource(emf.createEntityManager());
return new PersistenceContextResource(em);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,21 @@ public class PersistenceUnitHolder {

private List<PersistenceConfig> configs;

private Map<String, EntityManagerFactory> factories = new HashMap<>();
private final Map<String, EntityManagerFactory> factories = new HashMap<>();

private EntityManagerFactory defaultEntityMangerFactory;

private static final PersistenceUnitHolder instance = new PersistenceUnitHolder();

public synchronized EntityManagerFactory getEntityManagerFactory(String unitName) {

if (unitName == null || "".equals(unitName)) {
return defaultEntityManagerFactory();
}
return findNamedUnitEntityManagerFactory(unitName);
}

private EntityManagerFactory findNamedUnitEntityManagerFactory(String unitName) {
EntityManagerFactory factory = factories.get(unitName);

if (factory == null) {
Expand All @@ -33,6 +42,7 @@ public synchronized EntityManagerFactory getEntityManagerFactory(String unitName
config.ifPresent(c -> {

Optional.ofNullable(c.getUrl()).ifPresent(u -> properties.put("javax.persistence.jdbc.url", u));
Optional.ofNullable(c.getDriver()).ifPresent(d -> properties.put("javax.persistence.jdbc.driver", d));
Optional.ofNullable(c.getUsername()).ifPresent(u -> properties.put("javax.persistence.jdbc.user", u));
Optional.ofNullable(c.getPassword()).ifPresent(p -> properties.put("javax.persistence.jdbc.password", p));
});
Expand All @@ -54,4 +64,26 @@ public static PersistenceUnitHolder getInstance() {

return instance;
}

private EntityManagerFactory defaultEntityManagerFactory() {
if (defaultEntityMangerFactory == null) {
Properties properties = new Properties();

Optional<PersistenceConfig> config = configs.stream()
.findFirst();

config.ifPresent(c -> {

Optional.ofNullable(c.getUrl()).ifPresent(u -> properties.put("javax.persistence.jdbc.url", u));
Optional.ofNullable(c.getDriver()).ifPresent(d -> properties.put("javax.persistence.jdbc.driver", d));
Optional.ofNullable(c.getUsername()).ifPresent(u -> properties.put("javax.persistence.jdbc.user", u));
Optional.ofNullable(c.getPassword()).ifPresent(p -> properties.put("javax.persistence.jdbc.password", p));

defaultEntityMangerFactory = Persistence.createEntityManagerFactory(c.getUnitName(), properties);
});

}
return defaultEntityMangerFactory;

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
*/
public class PersistenceUnitResource implements ResourceReference<EntityManagerFactory> {

private EntityManagerFactory emf;
private final EntityManagerFactory emf;

public PersistenceUnitResource(EntityManagerFactory emf) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
public class PersistenceUnitResourceFactory implements
ResourceReferenceFactory<EntityManagerFactory> {

private EntityManagerFactory emf;
private final EntityManagerFactory emf;

public PersistenceUnitResourceFactory(EntityManagerFactory emf) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
@EeComponentDef(name = "EclipseLink", type = EeComponentType.JPA)
public class JpaComponent implements Component {

private Logger log = Logger.getLogger(JpaComponent.class.getSimpleName());
private static final Logger log = Logger.getLogger(JpaComponent.class.getSimpleName());

@Override
public void init(KumuluzServerWrapper server, EeConfig eeConfig) {
Expand Down