Package cn.org.rapid_framework.flex.messaging.services

Source Code of cn.org.rapid_framework.flex.messaging.services.JaveBeanRemotingDestinationBootstrapService

/*
* Copyright 2008 [CompanyName], Inc. All rights reserved.
* Website: http://www.pomer.org.cn/
*/
package cn.org.rapid_framework.flex.messaging.services;

import java.lang.reflect.Modifier;
import java.rmi.server.RemoteObject;
import java.util.ArrayList;
import java.util.List;

import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;

import cn.org.rapid_framework.util.ScanClassUtils;

import flex.messaging.config.ConfigMap;
import flex.messaging.services.AbstractBootstrapService;
import flex.messaging.services.Service;
import flex.messaging.services.ServiceException;
import flex.messaging.services.remoting.RemotingDestination;

/**
*
* @author badqiu,Linlin Yu
*
*/
public class JaveBeanRemotingDestinationBootstrapService extends AbstractBootstrapService {

  private String destChannel;
  private String destSecurityConstraint;
  private String destScope;
  private String destAdapter;
  private String destFactory;
  private String serviceId;
 
  private String packageToScan = null;
 
  @Override
  public void initialize(String id, ConfigMap properties) {
      serviceId = properties.getPropertyAsString("service-id", "remoting-service");
     
    destFactory = properties.getProperty("dest-factory");
    destAdapter = properties.getProperty("dest-adapter");
    destScope = properties.getProperty("dest-scope");
    destChannel = properties.getPropertyAsString("dest-channel","my-amf");
    destSecurityConstraint = properties.getProperty("dest-security-constraint");
   
    packageToScan = properties.getProperty("package-to-scan");
    if(packageToScan == null || "".equals(packageToScan.trim())) {
      throw createServiceException("'package-to-scan' property must be specify");
    }
   
    Service remotingService = broker.getService(serviceId);
    if(remotingService == null) {
      throw createServiceException("not found Service with serviceId:"+serviceId);
    }

    createJavaBeanDestinations(remotingService);

  }
 
  private ServiceException createServiceException(String message) {
    ServiceException ex = new ServiceException();
    ex.setMessage(message);
    return ex;
  }

  private void createJavaBeanDestinations(Service remotingService) {
    List<String> addedBeanNames = new ArrayList();
    List<Class> roJavaBeans = getRemoteObjectJavaBean();
    for (Class clazz : roJavaBeans) {
      createJavaBeanDestination(remotingService,clazz);
      addedBeanNames.add(StringUtils.uncapitalize(ClassUtils.getShortName(clazz)));
    }
    System.out.println("[Auto Export JavaBean to BlazeDS RemotingDestination],beans="+ addedBeanNames);
  }
 
  protected void createJavaBeanDestination(Service service, Class clazz) {
    String destinationId = StringUtils.uncapitalize(ClassUtils.getShortName(clazz));
    RemotingDestination destination = (RemotingDestination) service.createDestination(destinationId);

    destination.setSource(clazz.getName());
   
    if(destFactory != null)
      destination.setFactory(destFactory);
        if(destAdapter != null)
          destination.createAdapter(destAdapter);
        if(destScope != null)
          destination.setScope(destScope);
        if(destSecurityConstraint != null)
          destination.setSecurityConstraint(destSecurityConstraint);
        if(destChannel != null)
          destination.addChannel(destChannel);
   
        service.addDestination(destination);
  }

  @Override
  public void start() {
    // no op
  }

  @Override
  public void stop() {
    // no op
  }

  private List<Class> getRemoteObjectJavaBean() {
    ResourcePatternResolver rl = new PathMatchingResourcePatternResolver();
    List<Class> result = new ArrayList();
    try {
      List<String> classNames = ScanClassUtils.scanPackages(packageToScan);
      for(String className : classNames) {
        Class type = Class.forName(className);
        if (isRemoteObject(type)) {
          result.add(type);
        }
      }
    } catch (Exception e) {
      throw new IllegalStateException("scan JavaBean RemoteObject error",e);
    }
    return result;
  }

  private boolean isRemoteObject(Class clazz) {
    if (clazz.isAnnotationPresent(RemoteObject.class)
        && !clazz.isInterface() && !isAbstract(clazz)
        && !clazz.isAnonymousClass() && !clazz.isMemberClass()) {
      return true;
    }
    return false;
  }

  boolean isAbstract(Class type) {
    return (type.getModifiers() ^ Modifier.ABSTRACT) == 0;
  }
 
  public static void main(String[] args) {
    JaveBeanRemotingDestinationBootstrapService b = new JaveBeanRemotingDestinationBootstrapService();
    List<Class> lst = b.getRemoteObjectJavaBean();
    for (Class class1 : lst) {
      System.out.println(class1.getName());
    }
  }

}
TOP

Related Classes of cn.org.rapid_framework.flex.messaging.services.JaveBeanRemotingDestinationBootstrapService

TOP
Copyright © 2018 www.massapi.com. 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.