/**
  * Perform Spring-based scanning for entity classes, registering them as annotated classes with
  * this {@code Configuration}.
  *
  * @param packagesToScan one or more Java package names
  * @throws HibernateException if scanning fails for any reason
  */
 public void scanPackages(String... packagesToScan) throws HibernateException {
   try {
     for (String pkg : packagesToScan) {
       String pattern =
           ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
               + ClassUtils.convertClassNameToResourcePath(pkg)
               + RESOURCE_PATTERN;
       Resource[] resources = resourcePatternResolver.getResources(pattern);
       MetadataReaderFactory readerFactory =
           new CachingMetadataReaderFactory(resourcePatternResolver);
       for (Resource resource : resources) {
         if (resource.isReadable()) {
           MetadataReader reader = readerFactory.getMetadataReader(resource);
           String className = reader.getClassMetadata().getClassName();
           if (matchesFilter(reader, readerFactory)) {
             addAnnotatedClasses(resourcePatternResolver.getClassLoader().loadClass(className));
           }
         }
       }
     }
   } catch (IOException ex) {
     throw new MappingException("Failed to scan classpath for unlisted classes", ex);
   } catch (ClassNotFoundException ex) {
     throw new MappingException("Failed to load annotated classes from classpath", ex);
   }
 }
 /**
  * Perform Spring-based scanning for entity classes.
  *
  * @see #setPackagesToScan
  */
 private SpringPersistenceUnitInfo buildDefaultPersistenceUnitInfo() {
   SpringPersistenceUnitInfo scannedUnit = new SpringPersistenceUnitInfo();
   scannedUnit.setPersistenceUnitName(this.defaultPersistenceUnitName);
   scannedUnit.excludeUnlistedClasses();
   if (this.packagesToScan != null) {
     for (String pkg : this.packagesToScan) {
       try {
         String pattern =
             ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
                 + ClassUtils.convertClassNameToResourcePath(pkg)
                 + ENTITY_CLASS_RESOURCE_PATTERN;
         Resource[] resources = this.resourcePatternResolver.getResources(pattern);
         MetadataReaderFactory readerFactory =
             new CachingMetadataReaderFactory(this.resourcePatternResolver);
         for (Resource resource : resources) {
           if (resource.isReadable()) {
             MetadataReader reader = readerFactory.getMetadataReader(resource);
             String className = reader.getClassMetadata().getClassName();
             if (matchesFilter(reader, readerFactory)) {
               scannedUnit.addManagedClassName(className);
             }
           }
         }
       } catch (IOException ex) {
         throw new PersistenceException("Failed to scan classpath for unlisted classes", ex);
       }
     }
   }
   if (this.mappingResources != null) {
     for (String mappingFileName : this.mappingResources) {
       scannedUnit.addMappingFileName(mappingFileName);
     }
   }
   return scannedUnit;
 }
Пример #3
0
  public Set<Class> doScan(String basePackage) {
    Set<Class> classes = new HashSet<Class>();
    try {
      String packageSearchPath =
          ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
              + ClassUtils.convertClassNameToResourcePath(
                  SystemPropertyUtils.resolvePlaceholders(basePackage))
              + DEFAULT_RESOURCE_PATTERN;
      Resource[] resources = this.resourcePatternResolver.getResources(packageSearchPath);

      for (int i = 0; i < resources.length; i++) {
        Resource resource = resources[i];
        if (resource.isReadable()) {
          MetadataReader metadataReader = this.metadataReaderFactory.getMetadataReader(resource);
          if ((includeFilters.size() == 0 && excludeFilters.size() == 0)
              || matches(metadataReader)) {
            try {
              classes.add(Class.forName(metadataReader.getClassMetadata().getClassName()));
            } catch (ClassNotFoundException e) {
              e.printStackTrace();
            }
          }
        }
      }
    } catch (IOException ex) {
      throw new BeanDefinitionStoreException("I/O failure during classpath scanning", ex);
    }
    return classes;
  }
  @Test
  public void testPlainInterface() throws Exception {
    MetadataReader metadataReader = factory.getMetadataReader("org.test.spring.PlainInterface");

    ClassMetadata metadata = metadataReader.getClassMetadata();
    assertEquals("org.test.spring.PlainInterface", metadata.getClassName());
    assertEquals(0, metadata.getInterfaceNames().length);

    assertFalse(metadata.hasEnclosingClass());
    assertNull(metadata.getEnclosingClassName());

    assertTrue(metadata.hasSuperClass());
    assertEquals("java.lang.Object", metadata.getSuperClassName());
  }
  @Test
  public void testSubtypeOfGenericSupertype() throws Exception {
    MetadataReader metadataReader = factory.getMetadataReader("org.test.spring.GenericSubtype");

    ClassMetadata metadata = metadataReader.getClassMetadata();
    assertEquals("org.test.spring.GenericSubtype", metadata.getClassName());
    assertEquals(0, metadata.getInterfaceNames().length);

    assertFalse(metadata.hasEnclosingClass());
    assertNull(metadata.getEnclosingClassName());

    assertTrue(metadata.hasSuperClass());
    assertEquals("org.test.spring.GenericSupertype", metadata.getSuperClassName());
  }
 /**
  * Perform Spring-based scanning for entity classes, registering them as annotated classes with
  * this {@code Configuration}.
  *
  * @param packagesToScan one or more Java package names
  * @throws HibernateException if scanning fails for any reason
  */
 public LocalSessionFactoryBuilder scanPackages(String... packagesToScan)
     throws HibernateException {
   Set<String> entityClassNames = new TreeSet<String>();
   Set<String> converterClassNames = new TreeSet<String>();
   Set<String> packageNames = new TreeSet<String>();
   try {
     for (String pkg : packagesToScan) {
       String pattern =
           ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
               + ClassUtils.convertClassNameToResourcePath(pkg)
               + RESOURCE_PATTERN;
       Resource[] resources = this.resourcePatternResolver.getResources(pattern);
       MetadataReaderFactory readerFactory =
           new CachingMetadataReaderFactory(this.resourcePatternResolver);
       for (Resource resource : resources) {
         if (resource.isReadable()) {
           MetadataReader reader = readerFactory.getMetadataReader(resource);
           String className = reader.getClassMetadata().getClassName();
           if (matchesEntityTypeFilter(reader, readerFactory)) {
             entityClassNames.add(className);
           } else if (converterTypeFilter != null
               && converterTypeFilter.match(reader, readerFactory)) {
             converterClassNames.add(className);
           } else if (className.endsWith(PACKAGE_INFO_SUFFIX)) {
             packageNames.add(
                 className.substring(0, className.length() - PACKAGE_INFO_SUFFIX.length()));
           }
         }
       }
     }
   } catch (IOException ex) {
     throw new MappingException("Failed to scan classpath for unlisted classes", ex);
   }
   try {
     ClassLoader cl = this.resourcePatternResolver.getClassLoader();
     for (String className : entityClassNames) {
       addAnnotatedClass(cl.loadClass(className));
     }
     for (String className : converterClassNames) {
       ConverterRegistrationDelegate.registerConverter(this, cl.loadClass(className));
     }
     for (String packageName : packageNames) {
       addPackage(packageName);
     }
   } catch (ClassNotFoundException ex) {
     throw new MappingException("Failed to load annotated classes from classpath", ex);
   }
   return this;
 }
  @Test
  public void testSubClassOfBinaryType() throws Exception {
    MetadataReader metadataReader =
        factory.getMetadataReader("org.test.spring.SubClassOfBinaryType");

    ClassMetadata metadata = metadataReader.getClassMetadata();
    assertEquals("org.test.spring.SubClassOfBinaryType", metadata.getClassName());
    assertEquals(0, metadata.getInterfaceNames().length);

    assertFalse(metadata.hasEnclosingClass());
    assertNull(metadata.getEnclosingClassName());

    assertTrue(metadata.hasSuperClass());
    assertEquals("org.springframework.core.SpringVersion", metadata.getSuperClassName());
  }
  @Test
  public void testSubClass() throws Exception {
    MetadataReader metadataReader =
        factory.getMetadataReader("org.test.spring.SubClassWithoutAnnotation");

    ClassMetadata metadata = metadataReader.getClassMetadata();
    assertEquals("org.test.spring.SubClassWithoutAnnotation", metadata.getClassName());
    assertEquals(0, metadata.getInterfaceNames().length);

    assertFalse(metadata.hasEnclosingClass());
    assertNull(metadata.getEnclosingClassName());

    assertTrue(metadata.hasSuperClass());
    assertEquals("org.test.spring.SimpleConfigurationClass", metadata.getSuperClassName());
  }
  @Test
  public void testSimpleClass() throws Exception {
    MetadataReader metadataReader = factory.getMetadataReader("org.test.spring.NoAnnotations");

    ClassMetadata metadata = metadataReader.getClassMetadata();
    assertEquals("org.test.spring.NoAnnotations", metadata.getClassName());
    assertEquals(0, metadata.getInterfaceNames().length);

    assertFalse(metadata.hasEnclosingClass());
    assertNull(metadata.getEnclosingClassName());

    assertTrue(metadata.hasSuperClass());
    assertEquals("java.lang.Object", metadata.getSuperClassName());

    assertTrue(metadata instanceof JdtConnectedMetadata);
    IType type = JdtUtils.getJavaType(project, "org.test.spring.NoAnnotations");
    assertEquals(type, ((JdtConnectedMetadata) metadata).getJavaElement());
  }
 private Class<?> loadClass(
     ClassLoader loader, MetadataReaderFactory readerFactory, Resource resource) {
   try {
     MetadataReader reader = readerFactory.getMetadataReader(resource);
     return ClassUtils.forName(reader.getClassMetadata().getClassName(), loader);
   } catch (ClassNotFoundException ex) {
     handleFailure(resource, ex);
     return null;
   } catch (LinkageError ex) {
     handleFailure(resource, ex);
     return null;
   } catch (Throwable ex) {
     if (this.logger.isWarnEnabled()) {
       this.logger.warn("Unexpected failure when loading class resource " + resource, ex);
     }
     return null;
   }
 }
    public Collection<SourceClass> getMemberClasses() throws IOException {
      Object sourceToProcess = this.source;
      if (sourceToProcess instanceof Class<?>) {
        Class<?> sourceClass = (Class<?>) sourceToProcess;
        try {
          Class<?>[] declaredClasses = sourceClass.getDeclaredClasses();
          List<SourceClass> members = new ArrayList<SourceClass>(declaredClasses.length);
          for (Class<?> declaredClass : declaredClasses) {
            members.add(asSourceClass(declaredClass));
          }
          return members;
        } catch (NoClassDefFoundError err) {
          // getDeclaredClasses() failed because of non-resolvable dependencies
          // -> fall back to ASM below
          sourceToProcess = metadataReaderFactory.getMetadataReader(sourceClass.getName());
        }
      }

      // ASM-based resolution - safe for non-resolvable classes as well
      MetadataReader sourceReader = (MetadataReader) sourceToProcess;
      String[] memberClassNames = sourceReader.getClassMetadata().getMemberClassNames();
      List<SourceClass> members = new ArrayList<SourceClass>(memberClassNames.length);
      for (String memberClassName : memberClassNames) {
        try {
          members.add(asSourceClass(memberClassName));
        } catch (IOException ex) {
          // Let's skip it if it's not resolvable - we're just looking for candidates
          if (logger.isDebugEnabled()) {
            logger.debug(
                "Failed to resolve member class ["
                    + memberClassName
                    + "] - not considering it as a configuration class candidate");
          }
        }
      }
      return members;
    }
Пример #12
0
  public static void main(String[] args) throws Exception {
    try {
      ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();

      AnnotationConfiguration config =
          new AnnotationConfiguration()
              .configure(new File("D:/gjxt/source/news/config/hibernate/hibernate.cfg.xml"));
      config.setProperty("output", "C:\\ddl.txt");

      String[] packagesToScan = {"com.team.cmc.domain.model"};
      for (String pkg : packagesToScan) {
        String pattern =
            ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
                + ClassUtils.convertClassNameToResourcePath(pkg)
                + "/**/*.class";
        Resource[] resources = resourcePatternResolver.getResources(pattern);
        MetadataReaderFactory readerFactory =
            new CachingMetadataReaderFactory(resourcePatternResolver);
        for (Resource resource : resources) {
          if (resource.isReadable()) {
            MetadataReader reader = readerFactory.getMetadataReader(resource);
            String className = reader.getClassMetadata().getClassName();
            if (matchesFilter(reader, readerFactory)) {
              config.addAnnotatedClass(
                  resourcePatternResolver.getClassLoader().loadClass(className));
            }
          }
        }
      }

      SessionFactory sessionFactory = config.buildSessionFactory();
      session = sessionFactory.openSession();
      tx = session.beginTransaction();

      SchemaExport schemaExport = new SchemaExport(config);
      schemaExport.setOutputFile("c:\\a.txt");
      schemaExport.create(true, true);

      System.out.println("Table created.");

      tx.commit();

      //
      // config = new Configuration().configure(new File(
      // "src/hibernate.cfg.xml"));
      //
      // System.out.println("Creating tables...");
      //
      // SessionFactory sessionFactory = config.configure()
      // .buildSessionFactory();
      // session = sessionFactory.openSession();
      // tx = session.beginTransaction();
      //
      // SchemaExport schemaExport = new SchemaExport(config);
      // schemaExport.create(true, true);
      //
      // System.out.println("Table created.");
      //
      // tx.commit();

    } catch (HibernateException e) {
      e.printStackTrace();
      try {
        tx.rollback();
      } catch (HibernateException e1) {
        e1.printStackTrace();
      }
    } finally {

    }
  }
 @Override
 public boolean match(MetadataReader mdr, MetadataReaderFactory arg1) throws IOException {
   ComponentScan cs = TestConfiguration.class.getAnnotation(ComponentScan.class);
   return SpringUtils.includedInBasePackageClasses(mdr.getClassMetadata().getClassName(), cs);
 }
 /**
  * @author:shaochuan.wangsc
  * @date:2010-3-24
  */
 private void scan(WebModuleConfigurer webModuleConfigurer) {
   try {
     String pattern =
         ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
             + ClassUtils.convertClassNameToResourcePath(
                 webModuleConfigurer.getModuleBasePackage())
             + webModuleConfigurer.getContextPackage()
             + RESOURCE_PATTERN;
     Resource[] resources = this.resourcePatternResolver.getResources(pattern);
     MetadataReaderFactory readerFactory =
         new CachingMetadataReaderFactory(this.resourcePatternResolver);
     //
     for (Resource resource : resources) {
       if (resource.isReadable()) {
         MetadataReader reader = readerFactory.getMetadataReader(resource);
         ClassMetadata classMetadata = reader.getClassMetadata();
         //
         if (classMetadata.isConcrete()) {
           String className = classMetadata.getClassName();
           if (!(BeanUtils.isWidget(className) || BeanUtils.isController(className))) {
             continue;
           }
           //
           AutowireCapableBeanFactory beanFactory =
               applicationContext.getAutowireCapableBeanFactory();
           Object clazz =
               beanFactory.createBean(
                   classLoader.loadClass(className),
                   AutowireCapableBeanFactory.AUTOWIRE_NO,
                   false);
           //
           if (clazz instanceof FreeMarkerWidget) {
             String widget = className.replace(webModuleConfigurer.getModuleBasePackage(), "");
             widget = ClassUtils.convertClassNameToResourcePath(widget);
             widget = BeanUtils.stripEndString(widget, BeanUtils.WIDGET_BEAN_SUFFIX);
             String widgetKey = BeanUtils.makeControllerOrWidgetMappingKey(widget);
             webModuleConfigurer.getWidgetMap().put(widgetKey, (FreeMarkerWidget) clazz);
             widgets.put(widgetKey, (FreeMarkerWidget) clazz);
           }
           //
           if (clazz instanceof Controller) {
             String controller = className.replace(webModuleConfigurer.getModuleBasePackage(), "");
             controller = ClassUtils.convertClassNameToResourcePath(controller);
             controller = BeanUtils.stripEndString(controller, BeanUtils.CONTROLLER_BEAN_SUFFIX);
             String controllerKey = BeanUtils.makeControllerOrWidgetMappingKey(controller);
             String controllerRule =
                 webModuleConfigurer.getContextPackage() + CONTROLLERS_PACKAGE + SLASH;
             if (controllerKey.startsWith(controllerRule)) {
               //
               controllerKey =
                   controllerKey.replaceFirst(controllerRule, webModuleConfigurer.getContext());
               //
               if ("/index".equals(controllerKey)) {
                 webModuleConfigurer.getControllerMap().put("/", (Controller) clazz);
                 controllers.put("/", (Controller) clazz);
                 defaultListableBeanFactory.registerSingleton("/", (Controller) clazz);
               }
               //
               String controller_key = BeanUtils.processControllerKey(controllerKey);
               String controller_keyv = controller_key + webModuleConfigurer.getUriExtension();
               //
               webModuleConfigurer.getControllerMap().put(controller_keyv, (Controller) clazz);
               controllers.put(controller_keyv, (Controller) clazz);
               defaultListableBeanFactory.registerSingleton(controller_keyv, (Controller) clazz);
             }
           }
         }
       }
     }
   } catch (IOException e) {
     logger.error("Failed to scan classpath for unlisted classes", e);
     throw new RuntimeException("Failed to scan classpath for unlisted classes", e);
   } catch (ClassNotFoundException e) {
     logger.error("Failed to load classes from classpath", e);
     throw new RuntimeException("Failed to load classes from classpath", e);
   }
 }
 @Override
 public boolean match(MetadataReader mdr, MetadataReaderFactory arg1) throws IOException {
   String clsname = mdr.getClassMetadata().getClassName();
   ComponentScan cs = IntegrationTestConfiguration.class.getAnnotation(ComponentScan.class);
   return includedInBasePackageClasses(clsname, cs);
 }