All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.tsl2.nano.service.util.RemoteServiceRunner Maven / Gradle / Ivy

/*
 * File: $HeadURL$
 * Id  : $Id$
 * 
 * created by: Thomas Schneider
 * created on: Feb 2014
 * 
 * Copyright: (c) Thomas Schneider, all rights reserved
 */
package de.tsl2.nano.service.util;

import java.io.Serializable;
import java.util.Hashtable;
import java.util.LinkedList;

import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import de.tsl2.nano.action.IStatus;
import de.tsl2.nano.core.ManagedException;
import de.tsl2.nano.core.cls.BeanClass;
import de.tsl2.nano.core.execution.ICRunnable;
import de.tsl2.nano.core.execution.IRunnable;
import de.tsl2.nano.serviceaccess.ServiceFactory;
import de.tsl2.nano.serviceaccess.aas.ConsoleCallbackHandler;
import de.tsl2.nano.serviceaccess.aas.principal.UserPrincipal;

/**
 * Initializes the {@link ServiceFactory} , does a login and starts the given usecase.
 * 

* Usecases have to implement {@link IRunnable}. Optional arguments may be given additionally. * * @author Thomas Schneider * @version $Revision$ */ public class RemoteServiceRunner { /** * mini service locator. overwrite this method, if you want to login to a special user, to get the roles, the user * entity and the mandator entity. another way would be to create the service inside your setUp method. to do a real * login, use the method {@linkplain ServiceFactory#login(String, ClassLoader, String, String)}.

* NOT FINISHED YET! * * @param service type * @param serviceInterface service * @return service implementation */ protected static T getService(Class serviceInterface) { if (!ServiceFactory.isInitialized()) { ServiceFactory.createInstance(BaseServiceTest.class.getClassLoader()); ServiceFactory.instance().createSession(null, null, null, new LinkedList(), new LinkedList(), null); //init the server side ServiceFactory.getGenService().initServerSideFactories(); } return ServiceFactory.instance().getService(serviceInterface); } /** * start usecase * * @param useCaseInterface usecase interface. * @param args */ protected void start(Class> useCaseInterface, String... args) { Object user = null; if (!ServiceFactory.isInitialized()) { user = login(); } else { user = ServiceFactory.instance().getUserObject(); } final ICRunnable uc = getService(useCaseInterface); final SimpleContext context = new SimpleContext(); context.user = user; try { log("starting usecase '" + useCaseInterface.getName() + "'\n Parameter:\n" + context); uc.run(context, args); log("UseCase '" + useCaseInterface.getName() + "' finished successful\n Result:\n" + context); } catch (final Exception e) { ManagedException.forward(e); } } /** * loginBatch * * @return * @throws RuntimeException */ protected Object login() { LoginContext lc; try { lc = new LoginContext("LoginJaas", new ConsoleCallbackHandler()); lc.login(); return lc.getSubject().getPrincipals(UserPrincipal.class).iterator().next(); } catch (LoginException e) { ManagedException.forward(e); return null; } } /** * main method to start a usecase * * @param args usecase interface. * @throws Exception on error... */ public static final void main(String args[]) throws Exception { if (args.length == 0) { log("Please provide a classpath to the usecase-interface to be started!"); return; } final Class uc = BeanClass.load(args[0]); new RemoteServiceRunner().start((Class>) uc, args); } protected static final void log(String msg) { //perhaps no LOGGER availabe yet ==> system.out System.out.println(msg); } /** * * @author Tom, Thomas Schneider * @version $Revision$ */ public class SimpleContext implements Serializable { private static final long serialVersionUID = 1L; String ucId; IStatus status; Object user; Hashtable parameter; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy