Null checks should be reverted please as said on the list.

About the critical part of the diff can you say a word here why it is
needed? War and ear behave differently and i fear now we can break some
working undeployments so trying to avoid to break it for the 7.0.3 - we
were quite stable and close to release.

---------- Message transféré ----------
De : <[email protected]>
Date : 3 mars 2017 21:25
Objet : [3/3] tomee git commit: Check for null and clean WebBeansContext
later
À : <[email protected]>
Cc :

Check for null and clean WebBeansContext later
>
>
> Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
> Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/9b7b4657
> Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/9b7b4657
> Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/9b7b4657
>
> Branch: refs/heads/master
> Commit: 9b7b46570cf43afa9bb904e1615794400124539a
> Parents: de09ee0
> Author: AndyGee <[email protected]>
> Authored: Fri Mar 3 21:24:42 2017 +0100
> Committer: AndyGee <[email protected]>
> Committed: Fri Mar 3 21:24:42 2017 +0100
>
> ----------------------------------------------------------------------
>  .../openejb/assembler/classic/Assembler.java    | 166 ++++++++++---------
>  1 file changed, 85 insertions(+), 81 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/tomee/blob/9b7b4657/
> container/openejb-core/src/main/java/org/apache/openejb/
> assembler/classic/Assembler.java
> ----------------------------------------------------------------------
> diff --git a/container/openejb-core/src/main/java/org/apache/openejb/
> assembler/classic/Assembler.java b/container/openejb-core/src/
> main/java/org/apache/openejb/assembler/classic/Assembler.java
> index cdf7ed2..9af8153 100644
> --- a/container/openejb-core/src/main/java/org/apache/openejb/
> assembler/classic/Assembler.java
> +++ b/container/openejb-core/src/main/java/org/apache/openejb/
> assembler/classic/Assembler.java
> @@ -377,8 +377,8 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                  final Object filter = loader.loadClass("org.apache.
> openejb.bval.BValCdiFilter").newInstance();
>                  loader.loadClass("org.apache.bval.cdi.BValExtension")
>                          .getMethod(
> -                            "setAnnotatedTypeFilter",
> -                            loader.loadClass("org.apache.
> bval.cdi.BValExtension$AnnotatedTypeFilter"))
> +                                "setAnnotatedTypeFilter",
> +                                loader.loadClass("org.apache.
> bval.cdi.BValExtension$AnnotatedTypeFilter"))
>                          .invoke(null, filter);
>              } catch (final Throwable th) {
>                  // ignore, bval not compatible or not present
> @@ -579,7 +579,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>          final ContainerSystem component = systemInstance.getComponent(
> ContainerSystem.class);
>          if (component != null) {
>              postConstructResources(rIds, 
> ParentClassLoaderFinder.Helper.get(),
> component.getJNDIContext(), null);
> -        }else{
> +        } else {
>              throw new RuntimeException("ContainerSystem has not been
> initialzed");
>          }
>
> @@ -1320,8 +1320,8 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>
>      private static List<CommonInfoObject> 
> listCommonInfoObjectsForAppInfo(final
> AppInfo appInfo) {
>          final List<CommonInfoObject> vfs = new
> ArrayList<CommonInfoObject>(
> -            appInfo.clients.size() + appInfo.connectors.size() +
> -                appInfo.ejbJars.size() + appInfo.webApps.size());
> +                appInfo.clients.size() + appInfo.connectors.size() +
> +                        appInfo.ejbJars.size() + appInfo.webApps.size());
>          for (final ClientInfo clientInfo : appInfo.clients) {
>              vfs.add(clientInfo);
>          }
> @@ -1468,12 +1468,12 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                              final MethodContext methodContext =
> entry.getValue();
>                              for (final ScheduleData scheduleData :
> methodContext.getSchedules()) {
>                                  timerStore.createCalendarTimer(
> timerService,
> -                                    (String)
> beanContext.getDeploymentID(),
> -                                    null,
> -                                    entry.getKey(),
> -                                    scheduleData.getExpression(),
> -                                    scheduleData.getConfig(),
> -                                    true);
> +                                        (String)
> beanContext.getDeploymentID(),
> +                                        null,
> +                                        entry.getKey(),
> +                                        scheduleData.getExpression(),
> +                                        scheduleData.getConfig(),
> +                                        true);
>                              }
>                          }
>                          beanContext.setEjbTimerService(timerService);
> @@ -1501,11 +1501,11 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                      }
>
>                      beanContext.set(
> -                        BeanContext.ProxyClass.class,
> -                        new BeanContext.ProxyClass(
> -                            beanContext,
> -                            interfaces.toArray(new
> Class<?>[interfaces.size()])
> -                        ));
> +                            BeanContext.ProxyClass.class,
> +                            new BeanContext.ProxyClass(
> +                                    beanContext,
> +                                    interfaces.toArray(new
> Class<?>[interfaces.size()])
> +                            ));
>                  }
>              }
>              // process application exceptions
> @@ -1583,7 +1583,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                      if 
> (container.getBeanContext(deployment.getDeploymentID())
> == null) {
>                          container.deploy(deployment);
>                          if (!((String) deployment.getDeploymentID()).
> endsWith(".Comp")
> -                            && !deployment.isHidden()) {
> +                                && !deployment.isHidden()) {
>                              logger.info("createApplication.createdEjb",
> deployment.getDeploymentID(), deployment.getEjbName(),
> container.getContainerID());
>                          }
>                          if (logger.isDebugEnabled()) {
> @@ -1604,7 +1604,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                      final Container container = deployment.getContainer();
>                      container.start(deployment);
>                      if (!((String) deployment.getDeploymentID()).
> endsWith(".Comp")
> -                        && !deployment.isHidden()) {
> +                            && !deployment.isHidden()) {
>                          logger.info("createApplication.startedEjb",
> deployment.getDeploymentID(), deployment.getEjbName(),
> container.getContainerID());
>                      }
>                  } catch (final Throwable t) {
> @@ -1659,10 +1659,10 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>              try {
>                  final MBean annotation = clazz.getAnnotation(MBean.
> class);
>                  final ObjectName leaf = annotation == null ||
> annotation.objectName().isEmpty() ? new ObjectNameBuilder("openejb.
> user.mbeans")
> -                    .set("application", id)
> -                    .set("group", clazz.getPackage().getName())
> -                    .set("name", clazz.getSimpleName())
> -                    .build() : new ObjectName(annotation.objectName());
> +                        .set("application", id)
> +                        .set("group", clazz.getPackage().getName())
> +                        .set("name", clazz.getSimpleName())
> +                        .build() : new ObjectName(annotation.
> objectName());
>
>                  server.registerMBean(new DynamicMBeanWrapper(wc,
> instance), leaf);
>                  appMbeans.put(mbeanClass, leaf.getCanonicalName());
> @@ -1680,8 +1680,8 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>          WebBeansContext webBeansContext = appContext.get(
> WebBeansContext.class);
>          if (webBeansContext == null) {
>              webBeansContext = appContext.getWebBeansContext();
> -        }else{
> -            if (null == appContext.getWebBeansContext()){
> +        } else {
> +            if (null == appContext.getWebBeansContext()) {
>                  appContext.setWebBeansContext(webBeansContext);
>              }
>              return;
> @@ -1926,7 +1926,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>          Object object;
>          try {
>              object = LazyResource.class.isInstance(inObject) &&
> LazyResource.class.cast(inObject).isInitialized() ?
> -                LazyResource.class.cast(inObject).getObject() : inObject;
> +                    LazyResource.class.cast(inObject).getObject() :
> inObject;
>          } catch (final NamingException e) {
>              object = inObject; // in case it impl DestroyableResource
>          }
> @@ -2039,7 +2039,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>              final Iterator<ResourceInfo> iterator;
>              if (configuration != null) {
>                  iterator = configuration.facilities.resources.iterator();
> -            }else{
> +            } else {
>                  throw new Exception("OpenEjbConfiguration has not been
> initialized");
>              }
>              while (iterator.hasNext()) {
> @@ -2110,48 +2110,37 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>              deployedApplications.remove(appInfo.path);
>              logger.info("destroyApplication.start", appInfo.path);
>
> -            final Context globalContext = containerSystem.
> getJNDIContext();
>              final AppContext appContext = containerSystem.getAppContext(
> appInfo.appId);
> -            final ClassLoader classLoader = appContext.getClassLoader();
> -
> -            SystemInstance.get().fireEvent(new
> AssemblerBeforeApplicationDestroyed(appInfo, appContext));
>
>              //noinspection ConstantConditions
>              if (null == appContext) {
>                  logger.warning("Application id '" + appInfo.appId + "'
> not found in: " + Arrays.toString(containerSystem.getAppContextKeys()));
>                  return;
> -            } else {
> -                final WebBeansContext webBeansContext =
> appContext.getWebBeansContext();
> -                if (webBeansContext != null) {
> -                    final ClassLoader old = Thread.currentThread().
> getContextClassLoader();
> -                    Thread.currentThread().setContextClassLoader(
> classLoader);
> -                    try {
> -                        final ServletContext context =
> appContext.isStandaloneModule() && 
> appContext.getWebContexts().iterator().hasNext()
> ?
> -                                appContext.getWebContexts().
> iterator().next().getServletContext() : null;
> -                        webBeansContext.getService(
> ContainerLifecycle.class).stopApplication(context);
> -                    } finally {
> -                        Thread.currentThread().
> setContextClassLoader(old);
> -                    }
> -                }
> -                final Map<String, Object> cb = appContext.getBindings();
> -                for (final Entry<String, Object> value : cb.entrySet()) {
> -                    String path = value.getKey();
> -                    if (path.startsWith("global")) {
> -                        path = "java:" + path;
> -                    }
> -                    if (!path.startsWith("java:global")) {
> -                        continue;
> -                    }
> +            }
> +
> +            SystemInstance.get().fireEvent(new
> AssemblerBeforeApplicationDestroyed(appInfo, appContext));
> +
> +            final Context globalContext = containerSystem.
> getJNDIContext();
>
> -                    unbind(globalContext, path);
> -                    unbind(globalContext, "openejb/global/" +
> path.substring("java:".length()));
> -                    unbind(globalContext, path.substring("java:global".
> length()));
> +            final Map<String, Object> cb = appContext.getBindings();
> +            for (final Entry<String, Object> value : cb.entrySet()) {
> +                String path = value.getKey();
> +                if (path.startsWith("global")) {
> +                    path = "java:" + path;
>                  }
> -                if (appInfo.appId != null && !appInfo.appId.isEmpty() &&
> !"openejb".equals(appInfo.appId)) {
> -                    unbind(globalContext, "global/" + appInfo.appId);
> -                    unbind(globalContext, appInfo.appId);
> +                if (!path.startsWith("java:global")) {
> +                    continue;
>                  }
> +
> +                unbind(globalContext, path);
> +                unbind(globalContext, "openejb/global/" +
> path.substring("java:".length()));
> +                unbind(globalContext, path.substring("java:global".
> length()));
>              }
> +            if (appInfo.appId != null && !appInfo.appId.isEmpty() &&
> !"openejb".equals(appInfo.appId)) {
> +                unbind(globalContext, "global/" + appInfo.appId);
> +                unbind(globalContext, appInfo.appId);
> +            }
> +
>
>              final EjbResolver globalResolver = new EjbResolver(null,
> EjbResolver.Scope.GLOBAL);
>              for (final AppInfo info : deployedApplications.values()) {
> @@ -2245,6 +2234,8 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>              for (final WebContext webContext :
> appContext.getWebContexts()) {
>                  containerSystem.removeWebContext(webContext);
>              }
> +
> +            final ClassLoader classLoader = appContext.getClassLoader();
>              TldScanner.forceCompleteClean(classLoader);
>
>              // Clear out naming for all components first
> @@ -2294,7 +2285,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                  }
>              } catch (final NamingException e) {
>                  undeployException.getCauses().add(new Exception("Unable
> to prune openejb/Deployments and openejb/local namespaces, this could cause
> future deployments to fail.",
> -                    e));
> +                        e));
>              }
>
>              deployments.clear();
> @@ -2412,6 +2403,19 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                  }
>              }
>
> +            final WebBeansContext webBeansContext =
> appContext.getWebBeansContext();
> +            if (webBeansContext != null) {
> +                final ClassLoader old = Thread.currentThread().
> getContextClassLoader();
> +                Thread.currentThread().setContextClassLoader(
> classLoader);
> +                try {
> +                    final ServletContext context =
> appContext.isStandaloneModule() && 
> appContext.getWebContexts().iterator().hasNext()
> ?
> +                            appContext.getWebContexts().
> iterator().next().getServletContext() : null;
> +                    webBeansContext.getService(ContainerLifecycle.class).
> stopApplication(context);
> +                } finally {
> +                    Thread.currentThread().setContextClassLoader(old);
> +                }
> +            }
> +
>              for (final String id : appInfo.containerIds) {
>                  removeContainer(id);
>              }
> @@ -2461,7 +2465,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                  }
>
>                  final LazyObjectReference<?> ref =
> LazyObjectReference.class.cast(binding.getObject());
> -                if (! ref.isInitialized()) {
> +                if (!ref.isInitialized()) {
>                      globalContext.unbind(name);
>                      removeResourceInfo(name);
>                      return;
> @@ -2529,7 +2533,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>          final ClassLoaderEnricher component = SystemInstance.get().
> getComponent(ClassLoaderEnricher.class);
>          if (component != null) {
>              jars.addAll(Arrays.asList(component.
> applicationEnrichment()));
> -        }else {
> +        } else {
>              logger.warning("Unable to find open-jpa-integration jar");
>          }
>
> @@ -2578,7 +2582,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                          allIsIntheClasspath = false;
>                          if (logger.isDebugEnabled()) {
>                              logger.debug(url.toExternalForm() + " (" +
> URLs.toFile(url)
> -                                + ") is not in the classloader so we'll
> create a dedicated classloader for this app");
> +                                    + ") is not in the classloader so
> we'll create a dedicated classloader for this app");
>                          }
>                          break;
>                      }
> @@ -2622,7 +2626,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>              initialContext = new InitialContext(contextInfo.properties);
>          } catch (final NamingException ne) {
>              throw new OpenEJBException(String.
> format("JndiProvider(id=\"%s\") could not be created.  Failed to create
> the InitialContext using the supplied properties",
> -                contextInfo.id), ne);
> +                    contextInfo.id), ne);
>          }
>
>          try {
> @@ -2801,7 +2805,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>      public void createResource(final Collection<ServiceInfo> infos, final
> ResourceInfo serviceInfo) throws OpenEJBException {
>          final boolean usesCdiPwdCipher = usesCdiPwdCipher(serviceInfo);
>          final Object service = "true".equalsIgnoreCase(
> String.valueOf(serviceInfo.properties.remove("Lazy"))) ||
> usesCdiPwdCipher ?
> -            newLazyResource(infos, serviceInfo) :
> +                newLazyResource(infos, serviceInfo) :
>                  doCreateResource(infos, serviceInfo);
>          if (usesCdiPwdCipher && 
> !serviceInfo.properties.contains("InitializeAfterDeployment"))
> {
>              serviceInfo.properties.put("InitializeAfterDeployment",
> "true");
> @@ -2812,7 +2816,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>              bindResource(alias, service, false);
>          }
>          if (serviceInfo.originAppName != null &&
> !serviceInfo.originAppName.isEmpty() && !"/".equals(serviceInfo.
> originAppName)
> -            && !serviceInfo.id.startsWith("global")) {
> +                && !serviceInfo.id.startsWith("global")) {
>              final String baseJndiName = serviceInfo.id.substring(
> serviceInfo.originAppName.length() + 1);
>              serviceInfo.aliases.add(baseJndiName);
>              final ContextualJndiReference ref = new
> ContextualJndiReference(baseJndiName);
> @@ -2924,16 +2928,16 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                  final Object encoding = serviceInfo.properties.remove(
> "DefinitionEncoding");
>                  try { // we catch classcast etc..., if it fails it is not
> important
>                      final InputStream is = new ByteArrayInputStream(
> serviceInfo.properties.getProperty("Definition")
> -                        .getBytes(encoding != null ? encoding.toString()
> : "ISO-8859-1"));
> +                            .getBytes(encoding != null ?
> encoding.toString() : "ISO-8859-1"));
>                      final Properties p = new SuperProperties();
>                      IO.readProperties(is, p);
>                      for (final Entry<Object, Object> entry :
> p.entrySet()) {
>                          final String key = entry.getKey().toString();
>                          if (!props.containsKey(key)
> -                            // never override from Definition, just use
> it to complete the properties set
> -                            &&
> -                            !(key.equalsIgnoreCase("url") &&
> -                                props.containsKey("JdbcUrl"))) { // with
> @DataSource we can get both, see org.apache.openejb.config.
> ConvertDataSourceDefinitions.rawDefinition()
> +                                // never override from Definition, just
> use it to complete the properties set
> +                                &&
> +                                !(key.equalsIgnoreCase("url") &&
> +                                        props.containsKey("JdbcUrl"))) {
> // with @DataSource we can get both, see org.apache.openejb.config.
> ConvertDataSourceDefinitions.rawDefinition()
>                              props.put(key, entry.getValue());
>                          }
>                      }
> @@ -3004,10 +3008,10 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                  threadPool = Executors.newCachedThreadPool(new
> DaemonThreadFactory(serviceInfo.id + "-worker-"));
>              } else {
>                  threadPool = new ExecutorBuilder()
> -                    .size(threadPoolSize)
> -                    .prefix(serviceInfo.id)
> -                    .threadFactory(new DaemonThreadFactory(serviceInfo.id
> + "-worker-"))
> -                    .build(new Options(serviceInfo.properties,
> SystemInstance.get().getOptions()));
> +                        .size(threadPoolSize)
> +                        .prefix(serviceInfo.id)
> +                        .threadFactory(new DaemonThreadFactory(serviceInfo.id
> + "-worker-"))
> +                        .build(new Options(serviceInfo.properties,
> SystemInstance.get().getOptions()));
>                  logger.info("Thread pool size for '" + serviceInfo.id +
> "' is (" + threadPoolSize + ")");
>              }
>
> @@ -3037,8 +3041,8 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>              final BootstrapContext bootstrapContext;
>              if (transactionManager instanceof GeronimoTransactionManager)
> {
>                  bootstrapContext = new GeronimoBootstrapContext(
> GeronimoWorkManager.class.cast(workManager),
> -                    (GeronimoTransactionManager) transactionManager,
> -                    (GeronimoTransactionManager) transactionManager);
> +                        (GeronimoTransactionManager) transactionManager,
> +                        (GeronimoTransactionManager) transactionManager);
>              } else if (transactionManager instanceof XATerminator) {
>                  bootstrapContext = new SimpleBootstrapContext(workManager,
> (XATerminator) transactionManager);
>              } else {
> @@ -3103,7 +3107,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>              // init cm if needed
>              final Object eagerInit = unset.remove("eagerInit");
>              if (eagerInit != null && eagerInit instanceof String &&
> "true".equalsIgnoreCase((String) eagerInit)
> -                && connectionManager instanceof
> AbstractConnectionManager) {
> +                    && connectionManager instanceof
> AbstractConnectionManager) {
>                  try {
>                      ((AbstractConnectionManager)
> connectionManager).doStart();
>                      try {
> @@ -3448,7 +3452,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                  final Assembler assembler = SystemInstance.get().
> getComponent(Assembler.class);
>                  if (assembler != null) {
>                      logger = assembler.logger;
> -                }else {
> +                } else {
>                      System.err.println("Assembler has not been
> initialized");
>                  }
>              }
> @@ -3583,7 +3587,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                      final Assembler assembler = SystemInstance.get().
> getComponent(Assembler.class);
>                      if (assembler != null) {
>                          assembler.logger.info("assembler.noAgent");
> -                    }else {
> +                    } else {
>                          System.err.println("destroy: Assembler not
> initialized: JAVA AGENT NOT INSTALLED");
>                      }
>                  }
> @@ -3737,7 +3741,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                      final Assembler component = SystemInstance.get().
> getComponent(Assembler.class);
>                      if (component != null) {
>                          component.logger.error(e.getMessage(), e);
> -                    }else {
> +                    } else {
>                          System.err.println("" + e.getMessage());
>                      }
>                  }
> @@ -3759,7 +3763,7 @@ public class Assembler extends AssemblerTool
> implements org.apache.openejb.spi.A
>                  final ContainerSystem component = SystemInstance.get().
> getComponent(ContainerSystem.class);
>                  if (component != null) {
>                      return component.getJNDIContext().lookup(name);
> -                }else {
> +                } else {
>                      throw new Exception("ContainerSystem is not
> initialized");
>                  }
>              } catch (final Exception e) {
>
>

Reply via email to