/** * Build and return this managed class string representation. * * @param descriptor managed class descriptor. * @return this managed class string representation. */ private String buildStringRepresentation(Config descriptor) { StringBuilder builder = new StringBuilder(); builder.append(descriptor.getName()); builder.append(':'); if (implementationClass != null) { builder.append(implementationClass.getName()); builder.append(':'); } for (Class<?> interfaceClass : interfaceClasses) { builder.append(interfaceClass.getName()); builder.append(':'); } builder.append(instanceType); builder.append(':'); builder.append(instanceScope); builder.append(':'); builder.append(remotelyAccessible ? "NET" : "LOCAL"); if (implementationURL != null) { builder.append(':'); builder.append(implementationURL); } return builder.toString(); }
@Override public void config(Config config) throws ConfigException { super.config(config); // by convention configuration object name is the web application name appName = config.getName(); privateDir = server.getAppDir(appName); if (!privateDir.exists()) { privateDir.mkdir(); } Config loginConfig = config.getChild("login"); if (loginConfig != null) { loginRealm = loginConfig.getProperty("realm", appName); loginPage = loginConfig.getProperty("page"); if (loginPage != null && !loginPage.startsWith("/")) { loginPage = Strings.concat('/', appName, '/', loginPage); } } }
/** * Construct application configuration instance with information from given servlet context. * * @param context Servlet context bound to application, * @param properties context properties defining variables to inject on descriptors. * @throws ConfigException if application descriptor is not well formed or invalid. */ public TinyConfigBuilder(ServletContext context, Properties properties) throws ConfigException { config = new Config(getAppName(context.getContextPath())); File contextDir = new File(context.getRealPath("")); File webinfDir = new File(contextDir, "WEB-INF"); Loader loader = new Loader(config, properties); // first load library descriptor loadXML(Classes.getResourceAsStream("lib-descriptor.xml"), loader); // load application specific configuration document(s) File file = new File(webinfDir, "app.xml"); try { loadXML(new FileInputStream(file), loader); } catch (FileNotFoundException e) { log.debug("Application |%s| has no descriptor. No application specific configuration.", config.getName()); new ConfigException(e); } }
/** * Loads this managed class state from class descriptor then delegates {@link #scanAnnotations()}. Annotations scanning is * performed only if this managed class type requires implementation, see {@link InstanceType#requiresImplementation()}. * * @param container parent container, * @param descriptor class descriptor from <code>managed-class</code> section. * @throws ConfigException if configuration is invalid. */ public ManagedClass(Container container, Config descriptor) throws ConfigException { this.container = container; // if configuration section is missing this.config field remains null this.config = descriptor.getRoot().getChild(descriptor.getName()); // loading order matters; do not change it this.instanceScope = loadInstanceScope(descriptor); this.instanceType = loadInstanceType(descriptor); this.implementationClass = loadImplementationClass(descriptor); this.interfaceClasses = loadInterfaceClasses(descriptor); this.implementationURL = loadImplementationURL(descriptor); // get declared constructor return null if no implementation class this.constructor = getDeclaredConstructor(this.implementationClass); // scan dependencies return empty collection if no implementation class this.dependencies = scanDependencies(this.implementationClass); if (this.instanceType.requiresImplementation()) { scanAnnotations(); initializeStaticFields(); } this.key = Integer.toString(KEY_SEED.getAndIncrement()); this.string = buildStringRepresentation(descriptor); }
throw new ConfigException("Invalid POJO class element. Missing <class> attribute."); Config configSection = config.getChild(pojoClassElement.getName()); Class<?> pojoClass = Classes.forOptionalName(pojoClassName); if (pojoClass == null) {