/** * Loads props and properties from the classpath. */ public Props loadFromClasspath(final String... patterns) { ClassScanner.create() .registerEntryConsumer(entryData -> { String usedEncoding = JoddCore.encoding; if (StringUtil.endsWithIgnoreCase(entryData.name(), ".properties")) { usedEncoding = StringPool.ISO_8859_1; } final String encoding = usedEncoding; UncheckedException.runAndWrapException(() -> load(entryData.openInputStream(), encoding)); }) .includeResources(true) .ignoreException(true) .excludeCommonJars() .excludeAllEntries(true) .includeEntries(patterns) .scanDefaultClasspath() .start(); return this; }
/** * Configures {@link jodd.petite.PetiteContainer} with specified class path. */ public void configure() { long elapsed = System.currentTimeMillis(); final ClassScanner classScanner = new ClassScanner(); classScanner.detectEntriesMode(true); classScanner.scanDefaultClasspath(); classScannerConsumers.accept(classScanner); registerAsConsumer(classScanner); try { classScanner.start(); } catch (Exception ex) { throw new PetiteException("Scan classpath error", ex); } elapsed = System.currentTimeMillis() - elapsed; log.info("Petite configured in " + elapsed + " ms. Total beans: " + container.beansCount()); }
/** * Scans {@link jodd.util.ClassLoaderUtil#getDefaultClasspath() default class path}. */ public void scanDefaultClasspath() { scan(ClassLoaderUtil.getDefaultClasspath()); }
/** * Loads properties from classpath file(s). Properties are specified using wildcards. */ public static Properties loadFromClasspath(final Properties p, String... rootTemplate) { ClassScanner scanner = new ClassScanner() { @Override protected void onEntry(EntryData entryData) throws IOException { p.load(entryData.openInputStream()); } }; scanner.setIncludeResources(true); scanner.setIgnoreException(true); scanner.setExcludeAllEntries(true); scanner.setIncludedEntries(rootTemplate); scanner.scanDefaultClasspath(); return p; }
public AutomagicMadvocConfigurator() { actionClassSuffix = "Action"; classScanner = new ClassScanner(); classScanner.detectEntriesMode(true); classScanner.scanDefaultClasspath(); registerAsConsumer(classScanner); }
/** * Loads properties from classpath file(s). Properties are specified using wildcards. */ public static Properties loadFromClasspath(final Properties p, final String... rootTemplate) { ClassScanner.create() .registerEntryConsumer(entryData -> UncheckedException.runAndWrapException(() -> p.load(entryData.openInputStream()))) .includeResources(true) .ignoreException(true) .excludeAllEntries(true) .includeEntries(rootTemplate) .scanDefaultClasspath(); return p; }
classScanner.excludeCommonEntries(); classScanner.excludeCommonJars(); classScanner.excludeJars(excludedJars.toArray(new String[0])); classScanner.excludeAllEntries(false); classScanner.excludeAllEntries(true); includedEntries.add("jodd.*"); .detectEntriesMode(true) .includeEntries(includedEntries.toArray(new String[0])) .includeJars(includedJars.toArray(new String[0])) .ignoreException(ignoreExceptions) .scanDefaultClasspath(); appClasses.forEach(clazz -> classScanner.scan(ClassPathURLs.of(null, clazz)));
classScanner.registerEntryConsumer(classPathEntry -> { if (!classPathEntry.isTypeSignatureInUse(PETITE_BEAN_ANNOTATION_BYTES)) { return;
@Test void testWebJars() { URL url = ClassLoaderUtil.getResourceUrl("/META-INF/resources/webjars/jquery"); File containerFile = FileUtil.toContainerFile(url); final Value<String> jqueryName = Value.of(null); ClassScanner classScanner = new ClassScanner() { @Override protected void onEntry(ClassPathEntry entryData) { if (entryData.name().endsWith("jquery.js")) { jqueryName.set(entryData.name()); } } }; classScanner.includeResources(true); classScanner.scan(containerFile); classScanner.start(); assertNotNull(url); assertEquals("/META-INF/resources/webjars/jquery/2.2.4/jquery.js", jqueryName.get()); } }
@Test @DisabledOnJava(value = 9, description = "Automagic configuration only works with MR-JAR jars as they don't work in exploded mode.") void testContainer() { PetiteContainer pc = new PetiteContainer(); AutomagicPetiteConfigurator petiteConfigurator = new AutomagicPetiteConfigurator(pc); petiteConfigurator.withScanner(classScanner -> classScanner .excludeAllEntries(true) .includeEntries("jodd.petite.fixtures.*") .excludeEntries("jodd.petite.fixtures.data.*", "jodd.petite.fixtures.tst3.*", "jodd.petite.fixtures.tst.Ses") .excludeEntries( "jodd.petite.fixtures.data.*", "jodd.petite.fixtures.tst6.*", "jodd.petite.fixtures.tst.Ses", "*Public*", "*Secret*", "*$*", "jodd.petite.proxy.*", "jodd.petite.fixtures.rainbow.*")); petiteConfigurator.configure(); assertEquals(1, pc.beansCount()); assertEquals(1, pc.scopesCount()); assertEquals(0, Foo.instanceCounter); Foo foo = pc.getBean("foo"); assertNotNull(foo); }
/** * Create new class scanner. */ public static ClassScanner create() { return new ClassScanner(); }
@Override public void init() { final long startTime = System.currentTimeMillis(); try { log.info("Scanning..."); classScanner.start(); } catch (Exception ex) { throw new MadvocException("Scan classpath error", ex); } madvocComponents.forEach(Runnable::run); log.info("Scanning is complete."); elapsed = System.currentTimeMillis() - startTime; }
@BeforeEach void setupPetiteContainer() { final PetiteConfig petiteConfig = PetiteHelper.createPetiteConfig(); final ProxyProxetta proxyProxetta = PetiteHelper.createProxyProxetta(); petiteContainer = new ProxettaAwarePetiteContainer(proxyProxetta, petiteConfig); final AutomagicPetiteConfigurator petiteConfigurator = new AutomagicPetiteConfigurator(petiteContainer); petiteConfigurator.withScanner(scanner -> scanner.includeEntries(this.getClass().getPackage().getName() + ".*")); petiteConfigurator.configure(); }
classScanner.excludeCommonEntries(); classScanner.excludeCommonJars(); classScanner.excludeJars(excludedJars.toArray(new String[0])); classScanner.excludeAllEntries(false); classScanner.excludeAllEntries(true); includedEntries.add("jodd.*"); .detectEntriesMode(true) .includeEntries(includedEntries.toArray(new String[0])) .includeJars(includedJars.toArray(new String[0])) .ignoreException(ignoreExceptions) .scanDefaultClasspath(); appClasses.forEach(clazz -> classScanner.scan(ClassPathURLs.of(null, clazz)));
/** * Loads properties from classpath file(s). Properties are specified using wildcards. */ public static Properties loadFromClasspath(final Properties p, final String... rootTemplate) { ClassScanner.create() .registerEntryConsumer(entryData -> UncheckedException.runAndWrapException(() -> p.load(entryData.openInputStream()))) .includeResources(true) .ignoreException(true) .excludeAllEntries(true) .includeEntries(rootTemplate) .scanDefaultClasspath(); return p; }
/** * Registers a class consumer that registers only those annotated with {@link DbTable}. * Because of performance purposes, classes are not dynamically loaded; instead, their * file content is examined. */ public void registerAsConsumer(final ClassScanner classScanner) { classScanner.registerEntryConsumer(classPathEntry -> { if (!classPathEntry.isTypeSignatureInUse(DB_TABLE_ANNOTATION_BYTES)) { return; } final Class<?> beanClass; try { beanClass = classPathEntry.loadClass(); } catch (ClassNotFoundException cnfex) { throw new DbOomException("Entry class not found: " + classPathEntry.name(), cnfex); } if (beanClass == null) { return; } final DbTable dbTable = beanClass.getAnnotation(DbTable.class); if (dbTable == null) { return; } if (registerAsEntities) { dbEntityManager.registerEntity(beanClass); } else { dbEntityManager.registerType(beanClass); } }); }
/** * Create new class scanner. */ public static ClassScanner create() { return new ClassScanner(); }
/** * Loads props and properties from the classpath. */ public Props loadFromClasspath(final String... patterns) { ClassScanner.create() .registerEntryConsumer(entryData -> { String usedEncoding = JoddCore.encoding; if (StringUtil.endsWithIgnoreCase(entryData.name(), ".properties")) { usedEncoding = StringPool.ISO_8859_1; } final String encoding = usedEncoding; UncheckedException.runAndWrapException(() -> load(entryData.openInputStream(), encoding)); }) .includeResources(true) .ignoreException(true) .excludeCommonJars() .excludeAllEntries(true) .includeEntries(patterns) .scanDefaultClasspath() .start(); return this; }
/** * Configures {@link DbEntityManager} with specified class path. */ public void configure() { long elapsed = System.currentTimeMillis(); final ClassScanner classScanner = new ClassScanner(); classScanner.detectEntriesMode(true); classScanner.scanDefaultClasspath(); classScannerConsumers.accept(classScanner); registerAsConsumer(classScanner); try { classScanner.start(); } catch (Exception ex) { throw new DbOomException("Scan classpath error", ex); } elapsed = System.currentTimeMillis() - elapsed; if (log.isInfoEnabled()) { log.info("DbEntityManager configured in " + elapsed + "ms. Total entities: " + dbEntityManager.getTotalNames()); } }
/** * Parses class name that matches madvoc-related names. */ protected void registerAsConsumer(final ClassScanner classScanner) { classScanner.registerEntryConsumer(classPathEntry -> { final String entryName = classPathEntry.name(); if (entryName.endsWith(actionClassSuffix)) { try { acceptActionClass(classPathEntry.loadClass()); } catch (Exception ex) { log.debug("Invalid Madvoc action, ignoring: " + entryName); } } else if (classPathEntry.isTypeSignatureInUse(MADVOC_COMPONENT_ANNOTATION)) { try { acceptMadvocComponentClass(classPathEntry.loadClass()); } catch (Exception ex) { log.debug("Invalid Madvoc component ignoring: {}" + entryName); } } }); }