Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Code Block
    protected static GenericBeanDefinition createModuleBeanDefinition(String className, Object params, String role){

       GenericBeanDefinition result = new GenericBeanDefinition();
       result.setScope(BeanDefinition.SCOPE_SINGLETON);
       result.setBeanClassName(className);
       result.setAttribute("id", role);
       result.setAttribute("name", role);
       result.setAttribute("init-method", "initModule");
       result.setAttribute("destroy-method", "shutdownModule");
       result.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR);
       result.setParentName(Module.class.getName());

       ConstructorArgumentValues cArgs = new ConstructorArgumentValues();
       cArgs.addIndexedArgumentValue(0, params,MODULE_CONSTRUCTOR_PARAM1_CLASS);
       //BeanReference theserverRef server= constructornew arg (index 1) is autowired with the Server bean in contextRuntimeBeanReference(MODULE_CONSTRUCTOR_PARAM2_CLASS);
       cArgs.addIndexedArgumentValue(1, serverRef);
       cArgs.addIndexedArgumentValue(2, role,MODULE_CONSTRUCTOR_PARAM3_CLASS);
       result.setConstructorArgumentValues(cArgs);
       return result;
   }

 

    protected static GenericBeanDefinition createModuleConfigurationBeanDefinition(String role){
       GenericBeanDefinition result = new GenericBeanDefinition();
       result.setScope(BeanDefinition.SCOPE_SINGLETON);
       result.setBeanClassName(ModuleConfiguration.class.getName());
       String name = role+"Configuration";
       result.setAttribute("id", name);
       result.setAttribute("name", name);
       result.setFactoryBeanName(ServerConfiguration.class.getName());
       result.setFactoryMethodName("getModuleConfiguration");

       ConstructorArgumentValues cArgs = new ConstructorArgumentValues();
       cArgs.addGenericArgumentValue(role);
       result.setConstructorArgumentValues(cArgs);
       return result;
   }

 

    protected static GenericBeanDefinition createDatastoreConfigurationBeanDefinition(String id){

       GenericBeanDefinition result = new GenericBeanDefinition();
       result.setScope(BeanDefinition.SCOPE_SINGLETON);
       result.setBeanClassName(DatastoreConfiguration.class.getName());
       result.setAttribute("id", id);
       result.setAttribute("name", id);
       result.setFactoryBeanName(ServerConfiguration.class.getName());
       result.setFactoryMethodName("getDatastoreConfiguration");

       ConstructorArgumentValues cArgs = new ConstructorArgumentValues();
       cArgs.addGenericArgumentValue(id);


       result.setConstructorArgumentValues(cArgs);
       return result;

    }



...

Server impls can override a newly added method to load custom Bean definitions.  For example, RebuildServer loads definitions of the default Rebuilder implementations.  The trippi TriplestoreConnector class and the ModelBasedTripleGenerator class have some plain java refactorings (addition of setters and getters) to support extension and/or override of existing functionality (See also FCREPO-743 ).  These bean definitions can be loaded from the Spring config directory, or can just be scanned classes:

Code Block

    @Override
    protected void registerBeanDefinitions()
        throws ServerInitializationException{
        for (String rebuilder:REBUILDERS){
            try{
                ScannedGenericBeanDefinition beanDefinition =
                    Server.getScannedBeanDefinition(rebuilder);
                beanDefinition.setAutowireCandidate(true);
                beanDefinition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_NAME);
                beanDefinition.setAttribute("id", rebuilder);
                beanDefinition.setAttribute("name", rebuilder);
                beanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
                registerBeanDefinition(rebuilder, beanDefinition);
            }
            catch (IOException e){
                throw new ServerInitializationException(e.toString(),e);
            }
        }
    }

Non-module beans can be refactored to avoid reliance on the Server impl to locate information:

...