Package org.jboss.example.client

Source Code of org.jboss.example.client.Client

package org.jboss.example.client;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.ParseException;
import java.util.Date;
import java.util.Set;

import org.jboss.dependency.spi.ControllerContext;
import org.jboss.deployers.client.spi.Deployment;
import org.jboss.deployers.plugins.main.MainDeployerImpl;
import org.jboss.deployers.spi.DeploymentException;
import org.jboss.deployers.vfs.spi.client.VFSDeploymentFactory;
import org.jboss.example.service.Address;
import org.jboss.example.service.Employee;
import org.jboss.example.service.HRManager;
import org.jboss.example.service.util.SalaryStrategy;
import org.jboss.kernel.spi.dependency.KernelController;
import org.jboss.kernel.spi.registry.KernelBus;
import org.jboss.virtual.VFS;
import org.jboss.virtual.VirtualFile;

/**
* A simple client that starts JBoss Microcontainer and then 
* uses the command line as a User Interface to pass requests
* to the Human Resources service either directly or via the bus.
*
* @author <a href="mailto:mark.newton@jboss.org">Mark Newton</a>
*/
public class Client {
   
  private boolean useBus = false;
  private URL deployerBeansUrl, hrServiceBeansUrl;
  private UserInterface userInterface;
  private HRManager manager;
  private MainDeployerImpl mainDeployer;
  private Deployment deployment;
 
  private EmbeddedBootstrap bootstrap;
  private KernelController controller;
  private KernelBus bus;

  private final static String MAIN_DEPLOYER = "MainDeployer";
  private final static String DEPLOYMENT = "org.jboss.deployers.client.spi.Deployment";
  private final static String HRSERVICE = "HRService";
  private final static String EMPLOYEE = "org.jboss.example.service.Employee";

  public static void main(String[] args) throws Exception {
    if ((args.length == 1 && !args[0].equals("bus")) || args.length > 1) {
      System.out.println("Usage: ./run.sh [bus]");
      System.exit(1);
    }

    Client client = new Client(args.length == 1);
    client.setUserInterface(new ConsoleInput(client));
    }

  public Client(final boolean useBus) throws Exception {
    this.useBus = useBus;
   
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    deployerBeansUrl = cl.getResource("deployer-beans.xml");
    hrServiceBeansUrl = cl.getResource("hrService-beans.xml");
   
    if (hrServiceBeansUrl == null) {
      hrServiceBeansUrl = cl.getResource("hrService-beans.properties");
    }
   
    if (hrServiceBeansUrl == null) {
      hrServiceBeansUrl = cl.getResource("lib/humanResourcesService-1.0.0.jar");
    }
   
    if (hrServiceBeansUrl == null) {
      hrServiceBeansUrl = cl.getResource("otherLib/humanResourcesService-1.0.0.jar");
    }
   
    // Create VFSDeployment to use with aspectized deployers
    File hrServiceBeans = new File(hrServiceBeansUrl.getFile());
    VirtualFile root = VFS.getRoot(hrServiceBeans.toURI());     
    VFSDeploymentFactory deploymentFactory = VFSDeploymentFactory.getInstance();
      deployment = deploymentFactory.createVFSDeployment(root);
   
    // Start JBoss Microcontainer
    bootstrap = new EmbeddedBootstrap();
    bootstrap.run();
   
    controller = bootstrap.getKernel().getController();
    bus = bootstrap.getKernel().getBus();   
   }
 
  public void setUserInterface(UserInterface userInterface) {
    this.userInterface = userInterface;
  }
 
  void deploy() {
    bootstrap.deploy(deployerBeansUrl)
    if (!useBus && mainDeployer == null) {
      ControllerContext context = controller.getInstalledContext(MAIN_DEPLOYER);
      if (context != null) { mainDeployer = (MainDeployerImpl) context.getTarget(); }     
    }
  }
 
  void undeploy() {
    bootstrap.undeploy(deployerBeansUrl);
  }
 
  void deployService() throws DeploymentException {
    if (useBus) {
      if (invoke(MAIN_DEPLOYER, "getDeployment", new Object[] {deployment.getName()}, new String[] {"java.lang.String"}) != null) {
        System.out.println("Service is already deployed.");
        return;
      }     
     
      invoke(MAIN_DEPLOYER, "addDeployment", new Object[] {deployment}, new String[] {DEPLOYMENT});
      invoke(MAIN_DEPLOYER, "process", new Object[] {}, new String[] {});
    } else {
      if (mainDeployer.getDeployment(deployment.getName()) != null) {
        System.out.println("Service is already deployed.");
        return;
      }
     
          mainDeployer.addDeployment(deployment);
          mainDeployer.process();
         
          if (manager == null) {
        ControllerContext hrServiceCtx = controller.getInstalledContext(HRSERVICE);
        if (hrServiceCtx != null) { manager = (HRManager) hrServiceCtx.getTarget(); }           
          }
    }
  }

  void undeployService() throws DeploymentException {   
    if (useBus) {
      if (invoke(MAIN_DEPLOYER, "getDeployment", new Object[] {deployment.getName()}, new String[] {"java.lang.String"}) == null) {
        System.out.println("Service is already undeployed.");
        return;
      }     
     
      invoke(MAIN_DEPLOYER, "removeDeployment", new Object[] {deployment}, new String[] {DEPLOYMENT});
      invoke(MAIN_DEPLOYER, "process", new Object[] {}, new String[] {});
    } else {
      if (mainDeployer.getDeployment(deployment.getName()) == null) {
        System.out.println("Service is already undeployed.");
        return;
      }
     
      mainDeployer.removeDeployment(deployment);
        mainDeployer.process();
    }
  }

  private Object invoke(String serviceName, String methodName, Object[] args, String[] types) {
    Object result = null;
    try {
      result = bus.invoke(serviceName, methodName, args, types);
    } catch (Throwable t) {
      t.printStackTrace();
   
    return result;
  }
 
  boolean addEmployee() throws ParseException, NumberFormatException, IllegalArgumentException, IOException {
    Employee newEmployee = userInterface.getEmployee();   
    Address address = userInterface.getAddress();
    Date dateOfBirth = userInterface.getDateOfBirth();   
    newEmployee.setAddress(address);
    newEmployee.setDateOfBirth(dateOfBirth);
   
    if (useBus)
      return (Boolean) invoke(HRSERVICE, "addEmployee", new Object[] {newEmployee}, new String[] {EMPLOYEE});
    else
      return manager.addEmployee(newEmployee);     
  }
 
  @SuppressWarnings("unchecked")
  Set<Employee> listEmployees() {     
    if (useBus)
      return (Set<Employee>) invoke(HRSERVICE, "getEmployees", new Object[] {}, new String[] {});
    else
      return manager.getEmployees();
  }
 
  void removeEmployee() throws IllegalArgumentException, IOException {     
    Employee employee = userInterface.getEmployee();
   
    if (useBus)
      invoke(HRSERVICE, "removeEmployee", new Object[] {employee}, new String[] {EMPLOYEE});
    else
      manager.removeEmployee(employee);
  }
 
  Integer getSalary() throws IllegalArgumentException, IOException {
    Employee employee = userInterface.getEmployee();

    if (useBus)
      return(Integer) invoke(HRSERVICE, "getSalary", new Object[] {employee}, new String[] {EMPLOYEE});
    else
      return manager.getSalary(employee);
  }
 
  void setSalary() throws NumberFormatException, IllegalArgumentException, IOException {
    Employee employee = userInterface.getEmployee()
    Integer salary = userInterface.getSalary();   
   
    Employee actualEmployee;
    if (useBus) {
      actualEmployee = (Employee) invoke(HRSERVICE, "getEmployee", new Object[] {employee.getFirstName(), employee.getLastName()}, new String[] {"java.lang.String","java.lang.String"})
      invoke(HRSERVICE, "setSalary", new Object[] {actualEmployee, salary}, new String[] {EMPLOYEE, "java.lang.Integer"})
    } else {
      actualEmployee = manager.getEmployee(employee.getFirstName(), employee.getLastName());
      manager.setSalary(actualEmployee, salary);     
    }     
  }
 
  boolean toggleHiringFreeze() {
    boolean hiringFreeze;
    if (useBus) {
      hiringFreeze = (Boolean) invoke(HRSERVICE, "isHiringFreeze", new Object[] {}, new String[] {})
      invoke(HRSERVICE, "setHiringFreeze", new Object[] {!hiringFreeze}, new String[] {"boolean"})
    } else {
      hiringFreeze = manager.isHiringFreeze();
      manager.setHiringFreeze(!hiringFreeze);
    }
    return !hiringFreeze;
  }
 
  @SuppressWarnings("unchecked")
  String printStatus() {
    boolean hiringFreeze;
    int totalEmployees;
    SalaryStrategy salaryStrategy;
   
    if (useBus) {
      hiringFreeze = (Boolean) invoke(HRSERVICE, "isHiringFreeze", new Object[] {}, new String[] {});
      Set<Employee> employees = (Set<Employee>) invoke(HRSERVICE, "getEmployees", new Object[] {}, new String[] {});
      totalEmployees = employees.size();       
      salaryStrategy = (SalaryStrategy) invoke(HRSERVICE, "getSalaryStrategy", new Object[] {}, new String[] {});
    } else {
      hiringFreeze = manager.isHiringFreeze();
      totalEmployees = manager.getEmployees().size();
      salaryStrategy = manager.getSalaryStrategy();   
   
   
    StringBuffer buffer = new StringBuffer();
    buffer.append("Total number of employees: " + totalEmployees);
    buffer.append("\nHiring Freeze: " + hiringFreeze)
    buffer.append("\nSalary Strategy: ");
    if (salaryStrategy == null) {
      buffer.append("None");
    } else {
      buffer.append(salaryStrategy.toString());
    }
    return buffer.toString();
  }
}
TOP

Related Classes of org.jboss.example.client.Client

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.