Search in sources :

Example 1 with ProxyMetadataSource

use of org.jboss.as.server.deployment.reflect.ProxyMetadataSource in project wildfly by wildfly.

the class DefaultComponentViewConfigurator method configure.

public void configure(final DeploymentPhaseContext context, final ComponentDescription description, final ComponentConfiguration configuration) throws DeploymentUnitProcessingException {
    final DeploymentUnit deploymentUnit = context.getDeploymentUnit();
    final Module module = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.MODULE);
    final ProxyMetadataSource proxyReflectionIndex = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.PROXY_REFLECTION_INDEX);
    //views
    for (ViewDescription view : description.getViews()) {
        Class<?> viewClass;
        try {
            viewClass = module.getClassLoader().loadClass(view.getViewClassName());
        } catch (ClassNotFoundException e) {
            throw EeLogger.ROOT_LOGGER.cannotLoadViewClass(e, view.getViewClassName(), configuration);
        }
        final ViewConfiguration viewConfiguration;
        final ProxyConfiguration proxyConfiguration = new ProxyConfiguration();
        if (viewClass.getName().startsWith("java.")) {
            proxyConfiguration.setProxyName("org.jboss.proxy.java.lang." + viewClass.getSimpleName() + "$$$view" + PROXY_ID.incrementAndGet());
        } else {
            proxyConfiguration.setProxyName(viewClass.getName() + "$$$view" + PROXY_ID.incrementAndGet());
        }
        proxyConfiguration.setClassLoader(module.getClassLoader());
        proxyConfiguration.setProtectionDomain(viewClass.getProtectionDomain());
        proxyConfiguration.setMetadataSource(proxyReflectionIndex);
        if (view.isSerializable()) {
            proxyConfiguration.addAdditionalInterface(Serializable.class);
            if (view.isUseWriteReplace()) {
                proxyConfiguration.addAdditionalInterface(WriteReplaceInterface.class);
            }
        }
        //we define it in the modules class loader to prevent permgen leaks
        if (viewClass.isInterface()) {
            proxyConfiguration.setSuperClass(Object.class);
            proxyConfiguration.addAdditionalInterface(viewClass);
            viewConfiguration = view.createViewConfiguration(viewClass, configuration, new ProxyFactory(proxyConfiguration));
        } else {
            proxyConfiguration.setSuperClass(viewClass);
            viewConfiguration = view.createViewConfiguration(viewClass, configuration, new ProxyFactory(proxyConfiguration));
        }
        for (final ViewConfigurator configurator : view.getConfigurators()) {
            configurator.configure(context, configuration, view, viewConfiguration);
        }
        configuration.getViews().add(viewConfiguration);
    }
    configuration.getStartDependencies().add(new DependencyConfigurator<ComponentStartService>() {

        @Override
        public void configureDependency(final ServiceBuilder<?> serviceBuilder, ComponentStartService service) throws DeploymentUnitProcessingException {
            for (final Map.Entry<ServiceName, ServiceBuilder.DependencyType> entry : description.getDependencies().entrySet()) {
                serviceBuilder.addDependency(entry.getValue(), entry.getKey());
            }
        }
    });
}
Also used : DeploymentUnitProcessingException(org.jboss.as.server.deployment.DeploymentUnitProcessingException) ProxyFactory(org.jboss.invocation.proxy.ProxyFactory) ProxyMetadataSource(org.jboss.as.server.deployment.reflect.ProxyMetadataSource) ServiceBuilder(org.jboss.msc.service.ServiceBuilder) ProxyConfiguration(org.jboss.invocation.proxy.ProxyConfiguration) Module(org.jboss.modules.Module) DeploymentUnit(org.jboss.as.server.deployment.DeploymentUnit)

Aggregations

DeploymentUnit (org.jboss.as.server.deployment.DeploymentUnit)1 DeploymentUnitProcessingException (org.jboss.as.server.deployment.DeploymentUnitProcessingException)1 ProxyMetadataSource (org.jboss.as.server.deployment.reflect.ProxyMetadataSource)1 ProxyConfiguration (org.jboss.invocation.proxy.ProxyConfiguration)1 ProxyFactory (org.jboss.invocation.proxy.ProxyFactory)1 Module (org.jboss.modules.Module)1 ServiceBuilder (org.jboss.msc.service.ServiceBuilder)1