@SuppressWarnings("unchecked") private <V> V initializeConfigurationInstance( ServiceComposite serviceComposite, UnitOfWork uow, ServiceDescriptor serviceModel, String identity) throws InstantiationException { Module module = api.moduleOf(serviceComposite); Usecase usecase = UsecaseBuilder.newUsecase("Configuration:" + me.identity().get()); UnitOfWork buildUow = module.newUnitOfWork(usecase); EntityBuilder<V> configBuilder = buildUow.newEntityBuilder(serviceModel.<V>configurationType(), identity); // Check for defaults String s = identity + ".properties"; Class<?> type = first(api.serviceDescriptorFor(serviceComposite).types()); // Load defaults from classpath root if available if (type.getResource(s) == null && type.getResource("/" + s) != null) { s = "/" + s; } InputStream asStream = type.getResourceAsStream(s); if (asStream != null) { try { PropertyMapper.map(asStream, (Composite) configBuilder.instance()); } catch (IOException e1) { InstantiationException exception = new InstantiationException("Could not read underlying Properties file."); exception.initCause(e1); throw exception; } } try { configBuilder.newInstance(); buildUow.complete(); // Try again return (V) findConfigurationInstanceFor(serviceComposite, uow); } catch (Exception e1) { InstantiationException ex = new InstantiationException( "Could not instantiate configuration, and no Properties file was found (" + s + ")"); ex.initCause(e1); throw ex; } }
public Object createProxy() { final SimpleInterceptorFactoryContext factoryContext = new SimpleInterceptorFactoryContext(); factoryContext.getContextData().put(Component.class, component); factoryContext.getContextData().put(ComponentView.class, View.this); factoryContext.getContextData().put(ComponentViewInstance.class, this); final Map<Method, InterceptorFactory> clientInterceptorFactories = ViewService.this.clientInterceptorFactories; final Map<Method, Interceptor> clientEntryPoints = new IdentityHashMap<Method, Interceptor>(clientInterceptorFactories.size()); for (Method method : clientInterceptorFactories.keySet()) { clientEntryPoints.put( method, clientInterceptorFactories.get(method).create(factoryContext)); } final Interceptor postConstructInterceptor = clientPostConstruct.create(factoryContext); try { Object object = proxyFactory.newInstance( new ProxyInvocationHandler(clientEntryPoints, component, View.this, this)); InterceptorContext interceptorContext = new InterceptorContext(); interceptorContext.putPrivateData(ComponentView.class, View.this); interceptorContext.putPrivateData(ComponentViewInstance.class, this); interceptorContext.putPrivateData(Component.class, component); try { postConstructInterceptor.processInvocation(interceptorContext); } catch (Exception e) { InstantiationException exception = new InstantiationException("Post-construct lifecycle failed"); exception.initCause(e); throw exception; } return object; } catch (InstantiationException e) { InstantiationError error = new InstantiationError(e.getMessage()); Throwable cause = e.getCause(); if (cause != null) error.initCause(cause); throw error; } catch (IllegalAccessException e) { IllegalAccessError error = new IllegalAccessError(e.getMessage()); Throwable cause = e.getCause(); if (cause != null) error.initCause(cause); throw error; } }