package org.drools.grid.task; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import joptsimple.OptionParser; import joptsimple.OptionSet; import joptsimple.OptionSpec; import org.apache.mina.transport.socket.SocketAcceptor; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import org.drools.SystemEventListenerFactory; import org.drools.grid.remote.mina.MinaAcceptor; import org.drools.grid.remote.mina.MinaIoHandler; import org.drools.task.UserInfo; import org.drools.task.service.TaskService; import org.drools.task.service.TaskServiceSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TaskServerInstanceNodeRunner { private static Logger logger = LoggerFactory.getLogger( TaskServerInstanceNodeRunner.class ); public static void main(String[] args) throws IOException { OptionParser parser = new OptionParser(); OptionSpec<String> addressOpt = parser.accepts( "address", "the address to bind the node" ).withRequiredArg().ofType( String.class ); OptionSpec<Integer> portOpt = parser.accepts( "port", "the port to listen in the given address" ).withRequiredArg().ofType( Integer.class ); OptionSet options = parser.parse( args ); String address = options.valueOf( addressOpt ); int port = options.valueOf( portOpt ); EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.task" ); TaskService taskService = new TaskService( emf, SystemEventListenerFactory.getSystemEventListener() ); TaskServiceSession taskSession = taskService.createSession(); UserInfo userInfo = new DefaultUserInfo(); taskService.setUserinfo( userInfo ); SocketAddress htAddress = new InetSocketAddress( address, port ); SocketAcceptor htAcceptor = new NioSocketAcceptor(); htAcceptor.setHandler( new MinaIoHandler( SystemEventListenerFactory.getSystemEventListener(), new TaskServerMessageHandlerImpl( taskService, SystemEventListenerFactory.getSystemEventListener() ) ) ); final MinaAcceptor humanTaskServer = new MinaAcceptor( htAcceptor, htAddress ); Runtime.getRuntime().addShutdownHook( new Thread() { @Override public void run() { logger.info( "stoping server..." ); humanTaskServer.stop(); logger.info( "server stoped..." ); } } ); humanTaskServer.start(); logger.info( "server started at " + htAddress.toString() + " ... (ctrl-c to stop it)" ); } }