Skip to content

Commit

Permalink
Setting class loader key for CDI extension classes in embedded EJB
Browse files Browse the repository at this point in the history
Signed-off-by: Arjan Tijms <arjan.tijms@omnifish.ee>
  • Loading branch information
arjantijms committed May 29, 2023
1 parent 080d2d7 commit ecd1a2d
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 34 deletions.
@@ -1,4 +1,5 @@
/*
* Copyright (c) 2022, 2023 Contributors to the Eclipse Foundation.
* Copyright (c) 2009, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
Expand Down Expand Up @@ -74,6 +75,8 @@ public class EJBContainerProviderImpl implements EJBContainerProvider {
{"org.glassfish.", "com.sun.enterprise.", "org.eclipse.", "org.jboss.weld."};
private static final String[] ATTRIBUTE_VALUES_OK = {"sample", "test"};

private static final String IS_EJB_CONTAINER = "org.glassfish.ejb.embedded.active";


// Use Bundle from another package
private static final Logger _logger =
Expand All @@ -90,6 +93,7 @@ public class EJBContainerProviderImpl implements EJBContainerProvider {

public EJBContainerProviderImpl() {}

@Override
public EJBContainer createEJBContainer(Map<?, ?> properties) throws EJBException {
if (properties == null || properties.get(EJBContainer.PROVIDER) == null ||
properties.get(EJBContainer.PROVIDER).equals(GF_PROVIDER_NAME)) {
Expand All @@ -102,6 +106,7 @@ public EJBContainer createEJBContainer(Map<?, ?> properties) throws EJBException
boolean ok = false;
Locations l = getLocations(properties);
try {
System.setProperty(IS_EJB_CONTAINER, "true");
createContainer(properties, l);
Set<DeploymentElement> modules = addModules(properties, l);
if (!DeploymentElement.hasEJBModule(modules)) {
Expand All @@ -125,6 +130,7 @@ public EJBContainer createEJBContainer(Map<?, ?> properties) throws EJBException
_logger.info("[EJBContainerProviderImpl] Error cleaning up..." + t1);
}
container = null;
System.setProperty(IS_EJB_CONTAINER, null);
}
}
}
Expand Down Expand Up @@ -302,7 +308,7 @@ private DeploymentElement getRequestedEJBModuleOrLibrary(File file, Map<String,
EjbDeploymentDescriptorFile eddf =
new EjbDeploymentDescriptorFile();
eddf.setXMLValidation(false);
EjbBundleDescriptor bundleDesc = (EjbBundleDescriptor) eddf.read(is);
EjbBundleDescriptor bundleDesc = eddf.read(is);
ModuleDescriptor moduleDesc = bundleDesc.getModuleDescriptor();
moduleDesc.setArchiveUri(fileName);
moduleName = moduleDesc.getModuleName();
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2022, 2022 Contributors to the Eclipse Foundation.
* Copyright (c) 2022, 2023 Contributors to the Eclipse Foundation.
* Copyright (c) 2009, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
Expand All @@ -17,12 +17,31 @@

package org.glassfish.weld;

import com.sun.enterprise.deploy.shared.ArchiveFactory;
import com.sun.enterprise.deployment.EjbDescriptor;

import jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtension;
import jakarta.enterprise.inject.build.compatible.spi.SkipIfPortableExtensionPresent;
import jakarta.enterprise.inject.spi.Extension;
import static com.sun.enterprise.util.Utility.isAnyEmpty;
import static com.sun.enterprise.util.Utility.isAnyNull;
import static com.sun.enterprise.util.Utility.isEmpty;
import static java.lang.System.getSecurityManager;
import static java.security.AccessController.doPrivileged;
import static java.util.Collections.emptyList;
import static java.util.logging.Level.FINE;
import static java.util.stream.Collectors.toList;
import static org.glassfish.cdi.CDILoggerInfo.CREATING_DEPLOYMENT_ARCHIVE;
import static org.glassfish.cdi.CDILoggerInfo.EXCEPTION_SCANNING_JARS;
import static org.glassfish.cdi.CDILoggerInfo.GET_BEAN_DEPLOYMENT_ARCHIVES;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_ADD_NEW_BDA_TO_ROOTS;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_ADD_TO_EXISTING;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_CHECKING;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_CHECKING_SUBBDA;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_CREATE_NEW_BDA;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_RETURNING_NEWLY_CREATED_BDA;
import static org.glassfish.deployment.common.InstalledLibrariesResolver.getInstalledLibraries;
import static org.glassfish.weld.WeldDeployer.WELD_BOOTSTRAP;
import static org.glassfish.weld.connector.WeldUtils.JAR_SUFFIX;
import static org.glassfish.weld.connector.WeldUtils.META_INF_BEANS_XML;
import static org.glassfish.weld.connector.WeldUtils.SEPARATOR_CHAR;
import static org.glassfish.weld.connector.WeldUtils.isImplicitBeanArchive;
import static org.jboss.weld.bootstrap.spi.BeanDiscoveryMode.NONE;

import java.io.IOException;
import java.net.URI;
Expand Down Expand Up @@ -59,38 +78,20 @@
import org.jboss.weld.bootstrap.spi.helpers.MetadataImpl;
import org.jboss.weld.lite.extension.translator.LiteExtensionTranslator;

import static com.sun.enterprise.util.Utility.isAnyEmpty;
import static com.sun.enterprise.util.Utility.isAnyNull;
import static com.sun.enterprise.util.Utility.isEmpty;
import static java.lang.System.getSecurityManager;
import static java.security.AccessController.doPrivileged;
import static java.util.Collections.emptyList;
import static java.util.logging.Level.FINE;
import static java.util.stream.Collectors.toList;
import static org.glassfish.cdi.CDILoggerInfo.CREATING_DEPLOYMENT_ARCHIVE;
import static org.glassfish.cdi.CDILoggerInfo.EXCEPTION_SCANNING_JARS;
import static org.glassfish.cdi.CDILoggerInfo.GET_BEAN_DEPLOYMENT_ARCHIVES;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_ADD_NEW_BDA_TO_ROOTS;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_ADD_TO_EXISTING;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_CHECKING;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_CHECKING_SUBBDA;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_CREATE_NEW_BDA;
import static org.glassfish.cdi.CDILoggerInfo.LOAD_BEAN_DEPLOYMENT_ARCHIVE_RETURNING_NEWLY_CREATED_BDA;
import static org.glassfish.deployment.common.InstalledLibrariesResolver.getInstalledLibraries;
import static org.glassfish.weld.WeldDeployer.WELD_BOOTSTRAP;
import static org.glassfish.weld.connector.WeldUtils.JAR_SUFFIX;
import static org.glassfish.weld.connector.WeldUtils.META_INF_BEANS_XML;
import static org.glassfish.weld.connector.WeldUtils.SEPARATOR_CHAR;
import static org.glassfish.weld.connector.WeldUtils.isImplicitBeanArchive;
import static org.jboss.weld.bootstrap.spi.BeanDiscoveryMode.NONE;
import com.sun.enterprise.deploy.shared.ArchiveFactory;
import com.sun.enterprise.deployment.EjbDescriptor;

import jakarta.enterprise.inject.build.compatible.spi.BuildCompatibleExtension;
import jakarta.enterprise.inject.build.compatible.spi.SkipIfPortableExtensionPresent;
import jakarta.enterprise.inject.spi.Extension;

/**
* Represents a deployment of a CDI (Weld) application.
*/
public class DeploymentImpl implements CDI11Deployment {

private static final Logger LOG = CDILoggerInfo.getLogger();
private static final String IS_EMBEDDED_EJB_CONTAINER = "org.glassfish.ejb.embedded.active";

// Keep track of our BDAs for this deployment
private List<RootBeanDeploymentArchive> rarRootBdas;
Expand Down Expand Up @@ -190,7 +191,16 @@ public BeanDeploymentArchive loadBeanDeploymentArchive(Class<?> beanClass) {
}
}

BeanDeploymentArchive extensionBeanDeploymentArchive = extensionBDAMap.get(beanClass.getClassLoader());
ClassLoader classLoaderKey = null;
if (System.getProperty(IS_EMBEDDED_EJB_CONTAINER) != null) {
// In the embedded EJB container, all extension classes go to the same BDA.
// This is needed since we don't have separate class loaders per archive there.
classLoaderKey = this.getClass().getClassLoader();
} else {
classLoaderKey = beanClass.getClassLoader();
}

BeanDeploymentArchive extensionBeanDeploymentArchive = extensionBDAMap.get(classLoaderKey);
if (extensionBeanDeploymentArchive != null) {
return extensionBeanDeploymentArchive;
}
Expand Down

0 comments on commit ecd1a2d

Please sign in to comment.