1
어떤 스레드가 특정 메서드를 실행하는지 이해하는 데 약간의 어려움이 있습니다. 서버 측에 어떤 메소드가 있습니까? 나는 RMI가 처음이다.RMI : 스레드 생성 방법
의 HelloClient :
public class HelloClient
{
Random rand = new Random();
public static void main(String[] args)
{
Thread.currentThread().setName("Thread of a client");
if(System.getSecurityManager() == null)
{
System.setSecurityManager(new RMISecurityManager());
}
HelloClient hc = new HelloClient();
hc.methodToMeasureEnglish();
}
void methodToMeasureEnglish()
{
try
{
Thread.sleep(Math.abs(rand.nextInt()%4000));
Registry reg = LocateRegistry.getRegistry("localhost", 6666);
HelloIF hello = (HelloIF) reg.lookup("HELLO");
System.out.println(hello.sayHelloEnglish());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
안녕하세요 :
public class Hello extends UnicastRemoteObject implements HelloIF
{
public Hello(String name) throws RemoteException
{
try
{
Registry registry = LocateRegistry.createRegistry(6666);
registry.rebind(name, this);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public String sayHelloEnglish()
{
return "GOOD MORNING";
}
}
는 HelloIF
public interface HelloIF extends Remote
{
public String sayHelloEnglish() throws RemoteException;
}
HelloServer에
public class HelloServer
{
public static void main(String[] args) throws Exception
{
Thread.currentThread().setName("Server Thread");
if(System.getSecurityManager() == null)
{
System.setSecurityManager(new RMISecurityManager());
}
Hello myObject = new Hello("HELLO");
System.out.println("Server is ready...");
}
}
RMI를 사용하고 있습니까?
나는 모든 로그가 클라이언트 스레드에서 온 AspectJ의 클래스@Aspect
public class MeasureAspect
{
private static Logger logger = Logger.getLogger(MeasureAspect.class);
@Around("call(void method*())")
public Object condition2(ProceedingJoinPoint joinPoint) throws Throwable
{
PropertyConfigurator.configure("log4j.properties");
Object res = joinPoint.proceed();
logger.info("Thread method " + Thread.currentThread().getName());
return res;
}
@Around("call(String say*())")
public Object condition1(ProceedingJoinPoint joinPoint) throws Throwable
{
PropertyConfigurator.configure("log4j.properties");
Object res = joinPoint.proceed();
logger.info("Thread say " + Thread.currentThread().getName());
return res;
}
}
을 추가했다. 마녀 스레드가 내 방법을 실행한다고 설명해 주시겠습니까?