Package org.jboss.errai.bus.server.service

Examples of org.jboss.errai.bus.server.service.ErraiServiceConfiguratorImpl


*/
public class LoadExtensions implements BootstrapExecution {
    private Logger log = LoggerFactory.getLogger(LoadExtensions.class);

    public void execute(final BootstrapContext context) {
        final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();

        boolean autoScanModules = true;

        final Set<String> loadedComponents = new HashSet<String>();

        /*** Extensions  ***/
        if (config.hasProperty("errai.auto_load_extensions")) {
            autoScanModules = Boolean.parseBoolean(config.getProperty("errai.auto_load_extensions"));
        }
        if (autoScanModules) {

            log.info("beging searching for Errai extensions ...");

            final ErraiConfig erraiConfig = new ErraiConfig() {
                public void addBinding(Class<?> type, ResourceProvider provider) {
                    config.getExtensionBindings().put(type, provider);
                }

                public void addResourceProvider(String name, ResourceProvider provider) {
                    config.getResourceProviders().put(name, provider);
                }

                public void addSerializableType(Class<?> type) {
                    log.info("Marked " + type + " as serializable.");
                    loadedComponents.add(type.getName());
                    config.getSerializableTypes().add(type);
                }
            };

            // Search for Errai extensions.
            MetaDataScanner scanner = context.getScanner();

            Set<Class<?>> extensionComponents = scanner.getTypesAnnotatedWith(ExtensionComponent.class);
            for (Class<?> loadClass : extensionComponents) {
                if (ErraiConfigExtension.class.isAssignableFrom(loadClass)) {
                    // We have an annotated ErraiConfigExtension.  So let's configure it.
                    final Class<? extends ErraiConfigExtension> clazz =
                            loadClass.asSubclass(ErraiConfigExtension.class);


                    log.info("found extension " + clazz.getName());

                    try {

                        final Runnable create = new Runnable() {
                            public void run() {
                                AbstractModule module = new AbstractModule() {
                                    @Override
                                    protected void configure() {
                                        bind(ErraiConfigExtension.class).to(clazz);
                                        bind(ErraiServiceConfigurator.class).toInstance(config);
                                        bind(MessageBus.class).toInstance(context.getBus());

                                        // Add any extension bindings.
                                        for (Map.Entry<Class<?>, ResourceProvider> entry : config.getExtensionBindings().entrySet()) {
                                            bind(entry.getKey()).toProvider(new GuiceProviderProxy(entry.getValue()));
                                        }
                                    }
                                };
                                Guice.createInjector(module)
                                        .getInstance(ErraiConfigExtension.class)
                                        .configure(erraiConfig);
                            }
                        };

                        try {
                            create.run();
                        }
                        catch (CreationException e) {
                            log.info("extension " + clazz.getName() + " cannot be bound yet, deferring ...");
                            context.defer(create);
                        }

                    }
                    catch (Throwable e) {
                        throw new ErraiBootstrapFailure("could not initialize extension: " + loadClass.getName(), e);
                    }
                }
            }

            for (Class bindingType : config.getExtensionBindings().keySet()) {
                log.info("added extension binding: " + bindingType.getName());
            }

            log.info("total extension binding: " + config.getExtensionBindings().keySet().size());

        } else {
            log.info("auto-loading of extensions disabled.");
        }
    }
View Full Code Here


* @author: Heiko Braun <hbraun@redhat.com>
* @date: May 3, 2010
*/
class RegisterEntities implements BootstrapExecution {
    public void execute(BootstrapContext context) {
        final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();
        JSONEncoder.setSerializableTypes(config.getSerializableTypes());
    }
View Full Code Here

* @date: May 3, 2010
* @see org.jboss.errai.bus.server.io.JSONEncoder
*/
class RegisterTypes implements BootstrapExecution {
    public void execute(BootstrapContext context) {
        final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();

        // TODO: get rid of the singleton
        JSONEncoder.setSerializableTypes(config.getSerializableTypes());
    }
View Full Code Here

class DefaultComponents implements BootstrapExecution {
    private Logger log = LoggerFactory.getLogger(DefaultComponents.class);

    public void execute(final BootstrapContext context) {

        final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();
        final NoopModelAdapter adapter = new NoopModelAdapter();

        final ResourceProvider<ModelAdapter> modelAdapterProvider = new ResourceProvider<ModelAdapter>() {
            public ModelAdapter get() {
                return adapter;
            }
        };

        /*** ModelAdapter ***/
        config.getExtensionBindings().put(ModelAdapter.class, modelAdapterProvider);
        final MessageProvider modelAdapterProxy = new MessageProvider()
        {
            final MessageProvider delegate = JSONMessageServer.PROVIDER;

            public Message get() {
                return new MessageModelWrapper(delegate.get(),
                        (ModelAdapter) config.getExtensionBindings().get(ModelAdapter.class).get()
                );
            }
        };
        MessageBuilder.setMessageProvider(modelAdapterProxy);

        /*** Authentication Adapter ***/

        if (config.hasProperty("errai.authentication_adapter")) {
            try {
                final Class<? extends AuthenticationAdapter> authAdapterClass = Class.forName(config.getProperty("errai.authentication_adapter"))
                        .asSubclass(AuthenticationAdapter.class);

                log.info("authentication adapter configured: " + authAdapterClass.getName());

                final Runnable create = new Runnable() {
                    public void run() {
                        final AuthenticationAdapter authAdapterInst = Guice.createInjector(new AbstractModule() {
                            @Override
                            protected void configure() {
                                bind(AuthenticationAdapter.class).to(authAdapterClass);
                                bind(ErraiServiceConfigurator.class).toInstance(context.getConfig());
                                bind(MessageBus.class).toInstance(context.getBus());
                                bind(ServerMessageBus.class).toInstance(context.getBus());
                            }
                        }).getInstance(AuthenticationAdapter.class);

                        config.getExtensionBindings().put(AuthenticationAdapter.class, new ResourceProvider() {
                            public Object get() {
                                return authAdapterInst;
                            }
                        });
                    }
                };

                try {
                    create.run();
                }
                catch (Throwable e) {
                    log.info("authentication adapter " + authAdapterClass.getName() + " cannot be bound yet, deferring ...");
                    context.defer(create);
                }

            }
            catch (ErraiBootstrapFailure e) {
                throw e;
            }
            catch (Exception e) {
                throw new ErraiBootstrapFailure("cannot configure authentication adapter", e);
            }
        }


        /*** Dispatcher ***/

        RequestDispatcher dispatcher = createInjector(new AbstractModule() {

            @Override
            protected void configure() {
                Class<? extends RequestDispatcher> dispatcherImplementation = SimpleDispatcher.class;
               
                if (config.hasProperty(ErraiServiceConfigurator.ERRAI_DISPATCHER_IMPLEMENTATION)) {
                    try {
                        dispatcherImplementation = Class.forName(config.getProperty(ErraiServiceConfigurator.ERRAI_DISPATCHER_IMPLEMENTATION))
                                .asSubclass(RequestDispatcher.class);
                    }
                    catch (Exception e) {
                        throw new ErraiBootstrapFailure("could not load request dispatcher implementation class", e);
                    }
                }

                log.info("using dispatcher implementation: " + dispatcherImplementation.getName());

                bind(RequestDispatcher.class).to(dispatcherImplementation);
                bind(ErraiService.class).toInstance(context.getService());
                bind(MessageBus.class).toInstance(context.getBus());
                bind(ErraiServiceConfigurator.class).toInstance(config);
            }
        }).getInstance(RequestDispatcher.class);

        context.getService().setDispatcher(dispatcher);

        /*** Session Provider ***/

        SessionProvider sessionProvider = createInjector(new AbstractModule() {
            @Override
            protected void configure() {
                Class<? extends SessionProvider> sessionProviderImplementation = HttpSessionProvider.class;

                if (config.hasProperty(ErraiServiceConfigurator.ERRAI_SESSION_PROVIDER_IMPLEMENTATION)) {
                    try {
                        sessionProviderImplementation = Class.forName(config.getProperty(ErraiServiceConfigurator.ERRAI_SESSION_PROVIDER_IMPLEMENTATION))
                                .asSubclass(SessionProvider.class);
                    }
                    catch (Exception e) {
                        throw new ErraiBootstrapFailure("could not load session provider implementation class", e);
                    }
View Full Code Here

*/
class DiscoverServices implements BootstrapExecution {
    private Logger log = LoggerFactory.getLogger(DiscoverServices.class);

    public void execute(final BootstrapContext context) {
        final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();

        if (isAutoScanEnabled(config)) {
            log.debug("begin meta data scanning ...");

            // meta data scanner
View Full Code Here

*/
public class ServiceProcessor implements MetaDataProcessor {
    private Logger log = LoggerFactory.getLogger(ServiceProcessor.class);

    public void process(final BootstrapContext context, MetaDataScanner reflections) {
        final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();
        final Set<Class<?>> services = reflections.getTypesAnnotatedWithExcluding(Service.class, MetaDataScanner.CLIENT_PKG_REGEX);

        for (Class<?> loadClass : services) {
            Object svc = null;

            Service svcAnnotation = loadClass.getAnnotation(Service.class);
            if(null==svcAnnotation)
            {
                // Diagnose Errai-111
                StringBuffer sb = new StringBuffer();
                sb.append("Service annotation cannot be loaded. (See https://jira.jboss.org/browse/ERRAI-111)\n");
                sb.append(loadClass.getSimpleName()).append(" loader: ").append(loadClass.getClassLoader()).append("\n");
                sb.append("@Service loader:").append(Service.class.getClassLoader()).append("\n");
                log.warn(sb.toString());
                continue;
            }
           
            String svcName = svcAnnotation.value();

            // If no name is specified, just use the class name as the service by default.
            if ("".equals(svcName)) {
                svcName = loadClass.getSimpleName();
            }

            Map<String, Method> commandPoints = new HashMap<String, Method>();
            for (final Method method : loadClass.getDeclaredMethods()) {
                if (method.isAnnotationPresent(Command.class)) {
                    Command command = method.getAnnotation(Command.class);
                    for (String cmdName : command.value()) {
                        if (cmdName.equals("")) cmdName = method.getName();
                        commandPoints.put(cmdName, method);
                    }
                }
            }

            Class remoteImpl = getRemoteImplementation(loadClass);
            if (remoteImpl != null) {
                createRPCScaffolding(remoteImpl, loadClass, context);
            } else if (MessageCallback.class.isAssignableFrom(loadClass)) {
                final Class<? extends MessageCallback> clazz = loadClass.asSubclass(MessageCallback.class);

                //loadedComponents.add(loadClass.getName());


                log.info("discovered service: " + clazz.getName());
                try {
                    svc = Guice.createInjector(new AbstractModule() {
                        @Override
                        protected void configure() {
                            bind(MessageCallback.class).to(clazz);
                            bind(MessageBus.class).toInstance(context.getBus());
                            bind(RequestDispatcher.class).toInstance(context.getService().getDispatcher());

                            // Add any extension bindings.
                            for (Map.Entry<Class<?>, ResourceProvider> entry : config.getExtensionBindings().entrySet()) {
                                bind(entry.getKey()).toProvider(new GuiceProviderProxy(entry.getValue()));
                            }
                        }
                    }).getInstance(MessageCallback.class);
                }
                catch (Throwable t) {
                    t.printStackTrace();
                }


                if (commandPoints.isEmpty()) {
                    // Subscribe the service to the bus.
                    context.getBus().subscribe(svcName, (MessageCallback) svc);
                }

                RolesRequiredRule rule = null;
                if (clazz.isAnnotationPresent(RequireRoles.class)) {
                    rule = new RolesRequiredRule(clazz.getAnnotation(RequireRoles.class).value(), context.getBus());
                } else if (clazz.isAnnotationPresent(RequireAuthentication.class)) {
                    rule = new RolesRequiredRule(new HashSet<Object>(), context.getBus());
                }
                if (rule != null) {
                    context.getBus().addRule(svcName, rule);
                }
            }

            if (svc == null) {
                svc = Guice.createInjector(new AbstractModule() {
                    @Override
                    protected void configure() {
                        bind(MessageBus.class).toInstance(context.getBus());
                        bind(RequestDispatcher.class).toInstance(context.getService().getDispatcher());

                        // Add any extension bindings.
                        for (Map.Entry<Class<?>, ResourceProvider> entry : config.getExtensionBindings().entrySet()) {
                            bind(entry.getKey()).toProvider(new GuiceProviderProxy(entry.getValue()));
                        }
                    }
                }).getInstance(loadClass);
            }
View Full Code Here

        return null;
    }

    private static void createRPCScaffolding(final Class remoteIface, final Class<?> type, final BootstrapContext context) {

        final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();
        final Injector injector = Guice.createInjector(new AbstractModule() {
            @Override
            protected void configure() {
                bind(MessageBus.class).toInstance(context.getBus());
                bind(RequestDispatcher.class).toInstance(context.getService().getDispatcher());

                // Add any extension bindings.
                for (Map.Entry<Class<?>, ResourceProvider> entry : config.getExtensionBindings().entrySet()) {
                    bind(entry.getKey()).toProvider(new GuiceProviderProxy(entry.getValue()));
                }
            }
        });
View Full Code Here

*/
public class ApplicationCompProcessor implements MetaDataProcessor {
    private Logger log = LoggerFactory.getLogger(ApplicationCompProcessor.class);

    public void process(final BootstrapContext context, MetaDataScanner reflections) {
        final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();
        final Set<Class<?>> components = reflections.getTypesAnnotatedWith(ApplicationComponent.class);

        for (Class<?> loadClass : components) {
            log.info("discovered application component: " + loadClass.getName());

            try {
                Object inst = Guice.createInjector(new AbstractModule() {
                    @Override
                    protected void configure() {
                        bind(MessageBus.class).toInstance(context.getBus());
                        bind(RequestDispatcher.class).toInstance(context.getService().getDispatcher());

                        // Add any extension bindings.
                        for (Map.Entry<Class<?>, ResourceProvider> entry : config.getExtensionBindings().entrySet()) {
                            bind(entry.getKey()).toProvider(new GuiceProviderProxy(entry.getValue()));
                        }
                    }
                }).getInstance(loadClass);

View Full Code Here

*/
public class EntityProcessor implements MetaDataProcessor {
  private Logger log = LoggerFactory.getLogger(EntityProcessor.class);

  public void process(BootstrapContext context, MetaDataScanner scanner) {
    final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();
    final Set<Class<?>> entities = scanner.getTypesAnnotatedWith(ExposeEntity.class);

    for (Class<?> loadClass : entities) {
      log.info("Marked " + loadClass + " as serializable.");
      config.getSerializableTypes().add(loadClass);
      markIfEnumType(loadClass);
    }

    Properties props = scanner.getProperties("ErraiApp.properties");
    if (props != null) {
      log.info("Checking ErraiApp.properties for configured types ...");

      Iterator<Object> it = props.keySet().iterator();
      while (it.hasNext()) {
        String key = (String)it.next();
        if (key.equals(ErraiServiceConfigurator.CONFIG_ERRAI_SERIALIZABLE_TYPE)) {
          for (String s : props.getProperty(key).split(" ")) {
            try {
              Class<?> cls = Class.forName(s.trim());
              log.info("Marked " + cls + " as serializable.");
              config.getSerializableTypes().add(cls);
              markIfEnumType(cls);

            }
            catch (Exception e) {
              throw new ErraiBootstrapFailure(e);
View Full Code Here

*/
public class ServiceProcessor implements MetaDataProcessor {
  private Logger log = LoggerFactory.getLogger(ServiceProcessor.class);

  public void process(final BootstrapContext context, MetaDataScanner reflections) {
    final ErraiServiceConfiguratorImpl config = (ErraiServiceConfiguratorImpl) context.getConfig();
    final Set<Class<?>> services = reflections.getTypesAnnotatedWithExcluding(Service.class, MetaDataScanner.CLIENT_PKG_REGEX);

    for (Class<?> loadClass : services) {
      Object svc = null;

      Service svcAnnotation = loadClass.getAnnotation(Service.class);
      if (null == svcAnnotation) {
        // Diagnose Errai-111
        StringBuffer sb = new StringBuffer();
        sb.append("Service annotation cannot be loaded. (See https://jira.jboss.org/browse/ERRAI-111)\n");
        sb.append(loadClass.getSimpleName()).append(" loader: ").append(loadClass.getClassLoader()).append("\n");
        sb.append("@Service loader:").append(Service.class.getClassLoader()).append("\n");
        log.warn(sb.toString());
        continue;
      }

      boolean local = loadClass.isAnnotationPresent(Local.class);

      String svcName = svcAnnotation.value();

      // If no name is specified, just use the class name as the service by default.
      if ("".equals(svcName)) {
        svcName = loadClass.getSimpleName();
      }

      Map<String, Method> commandPoints = new HashMap<String, Method>();
      for (final Method method : loadClass.getDeclaredMethods()) {
        if (method.isAnnotationPresent(Command.class)) {
          Command command = method.getAnnotation(Command.class);
          for (String cmdName : command.value()) {
            if (cmdName.equals("")) cmdName = method.getName();
            commandPoints.put(cmdName, method);
          }
        }
      }

      Class remoteImpl = getRemoteImplementation(loadClass);
      if (remoteImpl != null) {
        createRPCScaffolding(remoteImpl, loadClass, context);
      }
      else if (MessageCallback.class.isAssignableFrom(loadClass)) {
        final Class<? extends MessageCallback> clazz = loadClass.asSubclass(MessageCallback.class);

        //loadedComponents.add(loadClass.getName());


        log.info("discovered service: " + clazz.getName());
        try {
          svc = Guice.createInjector(new AbstractModule() {
            @Override
            protected void configure() {
              bind(MessageCallback.class).to(clazz);
              bind(MessageBus.class).toInstance(context.getBus());
              bind(RequestDispatcher.class).toInstance(context.getService().getDispatcher());
              bind(TaskManager.class).toInstance(TaskManagerFactory.get());

              // Add any extension bindings.
              for (Map.Entry<Class<?>, ResourceProvider> entry : config.getExtensionBindings().entrySet()) {
                bind(entry.getKey()).toProvider(new GuiceProviderProxy(entry.getValue()));
              }
            }
          }).getInstance(MessageCallback.class);
        }
        catch (Throwable t) {
          t.printStackTrace();
        }


        if (commandPoints.isEmpty()) {
          // Subscribe the service to the bus.
          context.getBus().subscribe(svcName, (MessageCallback) svc);
        }

        RolesRequiredRule rule = null;
        if (clazz.isAnnotationPresent(RequireRoles.class)) {
          rule = new RolesRequiredRule(clazz.getAnnotation(RequireRoles.class).value(), context.getBus());
        }
        else if (clazz.isAnnotationPresent(RequireAuthentication.class)) {
          rule = new RolesRequiredRule(new HashSet<Object>(), context.getBus());
        }
        if (rule != null) {
          context.getBus().addRule(svcName, rule);
        }
      }

      if (svc == null) {
        svc = Guice.createInjector(new AbstractModule() {
          @Override
          protected void configure() {
            bind(MessageBus.class).toInstance(context.getBus());
            bind(RequestDispatcher.class).toInstance(context.getService().getDispatcher());
            bind(TaskManager.class).toInstance(TaskManagerFactory.get());

            // Add any extension bindings.
            for (Map.Entry<Class<?>, ResourceProvider> entry : config.getExtensionBindings().entrySet()) {
              bind(entry.getKey()).toProvider(new GuiceProviderProxy(entry.getValue()));
            }
          }
        }).getInstance(loadClass);
      }
View Full Code Here

TOP

Related Classes of org.jboss.errai.bus.server.service.ErraiServiceConfiguratorImpl

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.