Package org.apache.hivemind.service

Examples of org.apache.hivemind.service.ClassFab


        // Now we're good to go.

        String name = ClassFabUtils.generateClassName(serviceInterface);

        ClassFab cf = _classFactory.newClass(name, Object.class);

        addInfrastructure(cf, targetService, serviceInterface, propertyName, readMethodName);

        addMethods(
                cf,
                factoryParameters.getServiceId(),
                serviceInterface,
                propertyName,
                targetService);

        Class proxyClass = cf.createClass();

        try
        {
            return ConstructorUtils.invokeConstructor(proxyClass, new Object[]
            { targetService });
View Full Code Here


    private Class constructImplementationClass(Class commandInterface)
    {
        String name = ClassFabUtils.generateClassName(commandInterface);

        ClassFab cf = _classFactory.newClass(name, Object.class);

        addInfrastructure(cf, commandInterface);

        addMethods(cf, commandInterface);

        return cf.createClass();
    }
View Full Code Here

    Class buildImplementationClass(ServiceImplementationFactoryParameters factoryParameters,
            String name)
    {
        Class serviceInterface = factoryParameters.getServiceInterface();

        ClassFab cf = _classFactory.newClass(name, Object.class);

        cf.addInterface(serviceInterface);

        cf.addField("_registry", StrategyRegistry.class);

        cf.addConstructor(new Class[]
        { StrategyRegistry.class }, null, "_registry = $1;");

        // TODO: Should we add a check for $1 == null?

        cf.addMethod(Modifier.PRIVATE, new MethodSignature(serviceInterface, "_getStrategy",
                new Class[]
                { Object.class }, null), "return (" + serviceInterface.getName()
                + ") _registry.getStrategy($1.getClass());");

        MethodIterator i = new MethodIterator(serviceInterface);

        while (i.hasNext())
        {
            MethodSignature sig = i.next();

            if (proper(sig))
            {
                addAdaptedMethod(cf, sig);
            }
            else
            {
                ClassFabUtils.addNoOpMethod(cf, sig);

                factoryParameters.getErrorLog().error(
                        StrategyMessages.improperServiceMethod(sig),
                        HiveMind.getLocation(factoryParameters.getFirstParameter()),
                        null);
            }

        }

        if (!i.getToString())
            ClassFabUtils.addToStringMethod(cf, StrategyMessages.toString(factoryParameters
                    .getServiceId(), serviceInterface));

        return cf.createClass();
    }
View Full Code Here

       
        Class homeInterface = module.resolveType(homeInterfaceClassName);

        String proxyClassName = ClassFabUtils.generateClassName(serviceInterface);

        ClassFab classFab =
            _classFactory.newClass(
                proxyClassName,
                AbstractEJBProxy.class);

        classFab.addInterface(serviceInterface);

        classFab.addField("_remote", serviceInterface);

        addClearCachedMethod(classFab);

        addLookupMethod(classFab, homeInterface, serviceInterface, jndiName);

        addServiceMethods(classFab, serviceInterface, factoryParameters.getServiceId(), jndiName);

        addConstructor(classFab);

        Class proxyClass = classFab.createClass();

        return invokeConstructor(proxyClass, proxyParameters.getNameLookup(_nameLookup));
    }
View Full Code Here

    private void tryAddNoOpMethod(Class returnClass, String expectedBody)
    {
        MethodSignature sig = new MethodSignature(returnClass, "run", null, null);

        MockControl control = newControl(ClassFab.class);
        ClassFab cf = (ClassFab) control.getMock();
        MethodFab mf = (MethodFab) newMock(MethodFab.class);

        cf.addMethod(Modifier.PUBLIC, sig, expectedBody);
        control.setReturnValue(mf);

        replayControls();

        ClassFabUtils.addNoOpMethod(cf, sig);
View Full Code Here

    private Class createSingletonProxyClass()
    {
        ProxyBuilder proxyBuilder = new ProxyBuilder("LazyConstructionProxy", getModule(), getConfigurationType(),
                getConfigurationType(), true);

        ClassFab classFab = proxyBuilder.getClassFab();


        // This will initally be the inner proxy, then switch over to the
        // service implementation.

        classFab.addField("_inner", getConfigurationType());
        classFab.addMethod(
                Modifier.PUBLIC | Modifier.SYNCHRONIZED | Modifier.FINAL,
                new MethodSignature(void.class, "_setInner", new Class[]
                { getConfigurationType() }, null),
                "{ _inner = $1; }");

        BodyBuilder builder = new BodyBuilder();
        builder.begin();

        builder.addln("return _inner;");
        builder.end();

        classFab.addMethod(Modifier.PRIVATE, new MethodSignature(getConfigurationType(), "_getInner",
                null, null), builder.toString());

        proxyBuilder.addServiceMethods("_getInner()", false);

        // The toString calls the toString method of the configuration if it is
        // created already
        // TODO: Implement like described
//        String proxyToStringMessage = "<LazyConstructionProxy for "
//            + getExtensionPointId() + "(" + configurationInterface.getName() + ")>";
        builder.clear();
        builder.begin();
        builder.addln(" return _inner.toString();");
        builder.end();

        MethodSignature toStringSignature = new MethodSignature(String.class, "toString", null,
                null);
        if (!classFab.containsMethod(toStringSignature)) {
            classFab.addMethod(Modifier.PUBLIC, toStringSignature, builder.toString());
        }

        return classFab.createClass();
    }
View Full Code Here

    private Class createInnerProxyClass(Class deferredProxyClass)
    {
        ProxyBuilder builder = new ProxyBuilder("InnerProxy", getModule(), getConfigurationType(),
                getConfigurationType(), false);

        ClassFab classFab = builder.getClassFab();

        classFab.addField("_deferredProxy", deferredProxyClass);
        classFab.addField("_configuration", getConfigurationType());
        classFab.addField("_configurationPoint", ConfigurationPointImpl.class);

        BodyBuilder body = new BodyBuilder();

        // The constructor remembers the outer proxy and registers itself
        // with the outer proxy.

        body.begin();

        body.addln("this($1);");
        body.addln("_deferredProxy = $2;");
        body.addln("_configurationPoint = $3;");
        body.addln("_deferredProxy._setInner(this);");

        body.end();

        classFab.addConstructor(new Class[]
        { String.class, deferredProxyClass, ConfigurationPointImpl.class }, null, body.toString());

        // Method _configuration() will look up the configuration,
        // then update the deferred proxy to go directly to the
        // configuration, bypassing itself!

        body.clear();
        body.begin();

        body.add("if (_configuration == null)");
        body.begin();

        body.add("_configuration = (");
        body.add(getConfigurationType().getName());
        body.addln(") _configurationPoint.constructConfiguration();");

        body.add("_deferredProxy._setInner(_configuration);");

        body.end();

        body.add("return _configuration;");

        body.end();

        classFab.addMethod(
                Modifier.PRIVATE | Modifier.FINAL | Modifier.SYNCHRONIZED,
                new MethodSignature(getConfigurationType(), "_configuration", null, null),
                body.toString());

        builder.addServiceMethods("_configuration()");

        // Build the implementation of interface SingletonInnerProxy

        body.clear();
        body.begin();

        body.add("_configuration();");

        body.end();

        classFab.addMethod(Modifier.PUBLIC | Modifier.FINAL, new MethodSignature(void.class,
                "_instantiateServiceImplementation", null, null), body.toString());

        classFab.addInterface(SingletonInnerProxy.class);

        return classFab.createClass();
    }
View Full Code Here

    {
        Class serviceInterfaceClass = stack.getServiceInterface();
       
        String name = ClassFabUtils.generateClassName(serviceInterfaceClass);

        ClassFab classFab = _factory.newClass(name, Object.class);

        classFab.addInterface(serviceInterfaceClass);

        createInfrastructure(stack, classFab);

        addServiceMethods(stack, classFab, parameters);

        return classFab.createClass();
    }
View Full Code Here

     * Tests adding a void method, also tests creation of a toString() method.
     */
    public void testAddVoidMethod()
    {
        MockControl cfc = newControl(ClassFab.class);
        ClassFab cf = (ClassFab) cfc.getMock();

        MethodSignature sig = new MethodSignature(void.class, "run", null, null);

        BodyBuilder builder = new BodyBuilder();
        builder.begin();
        builder.addln("for (int i = 0; i < _commands.length; i++)");
        builder.addln("_commands[i].run($$);");
        builder.end();

        cf.addMethod(Modifier.PUBLIC, sig, builder.toString());
        cfc.setReturnValue(newMethodFab());

        replayControls();

        ChainBuilderImpl cb = new ChainBuilderImpl();
View Full Code Here

    }

    public void testAddNonVoidMethod()
    {
        MockControl cfc = newControl(ClassFab.class);
        ClassFab cf = (ClassFab) cfc.getMock();

        MethodSignature sig = new MethodSignature(boolean.class, "execute", new Class[]
        { String.class }, null);

        BodyBuilder builder = new BodyBuilder();
        builder.begin();
        builder.addln("boolean result = false;");
        builder.addln("for (int i = 0; i < _commands.length; i++)");
        builder.begin();
        builder.addln("result = _commands[i].execute($$);");
        builder.addln("if (result != false) break;");
        builder.end();
        builder.addln("return result;");
        builder.end();

        cf.addMethod(Modifier.PUBLIC, sig, builder.toString());
        cfc.setReturnValue(newMethodFab());

        replayControls();

        ChainBuilderImpl cb = new ChainBuilderImpl();
View Full Code Here

TOP

Related Classes of org.apache.hivemind.service.ClassFab

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.