// HelloServer.java
import hello.*;           // IDLÀ» º¯È¯ÇÏ¿© »ý±ä ÆÐÅ°Áö
import org.omg.CosNaming.*;  // CORBA ÀÌ¸§ ¼­ºñ½º¸¦ ¾µ °æ¿ì ÀÓÆ÷Æ®
import org.omg.CORBA.*;      // CORBA¸¦ »ç¿ëÇÒ °æ¿ì Ç×»ó ÀÓÆ÷Æ®
// ÀÌ¸§ ¼­ºñ½º¸¦ »ç¿ëÇÒ ¶§ ¹ß»ýÇÏ´Â Æ¯º°ÇÑ ¿¹¿ÜµéÀ» À§ÇØ ÀÓÆ÷Æ®
import org.omg.CosNaming.NamingContextPackage.*;

// public Å¬·¡½º
public class HelloServer 
{
	public static void main(String args[])
	{
		try{
			// ¸ÕÀú ORB¸¦ ÃÊ±âÈ­ÇÏ¿© ÀÎ½ºÅÏ½º¸¦ »ý¼ºÇÑ´Ù.
			ORB orb = ORB.init(args, null);
			// ¼­ºñ½º¸¦ ÇÒ °´Ã¼¸¦ »ý¼ºÇÏ¿© ORB¿¡ µî·ÏÇÑ´Ù.
			HelloServant helloRef = new HelloServant();
			orb.connect(helloRef);
			// ÀÌ¸§ ¼­ºñ½º¿¡ ´ëÇÑ ÂüÁ¶¸¦ ±¸ÇÑ´Ù.
			org.omg.CORBA.Object objRef = 
				orb.resolve_initial_references("NameService");
			NamingContext ncRef = NamingContextHelper.narrow(objRef);
			// ÀÌ¸§ ¼­ºñ½º¿¡¼­ "HelloServer"¿¡ ´ëÇÑ ÂüÁ¶¸¦ ±¸ÇÏ¿© ¹ÙÀÎµùÇÑ´Ù.
			NameComponent nc = new NameComponent("HelloServer", " ");
			NameComponent path[] = {nc};
			ncRef.rebind(path, helloRef);
			// just info
			System.out.println("HelloServer successfully bound");
			// Å¬¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇÒ ¶§±îÁö ±â´Ù¸°´Ù.
			java.lang.Object waiter = new java.lang.Object();
			synchronized(waiter){
				waiter.wait();
			}
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}
// IDL ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ¿© »ý¼ºµÈ _HelloImplBase¸¦ »ó¼ÓÇÏ¿©
// ½ÇÁ¦ ¼­ºñ½º¸¦ ¼öÇàÇÒ °´Ã¼¸¦ ±¸ÇöÇÑ´Ù.
class HelloServant extends _HelloImplBase
{
	// IDLÀÇ ÀÎÅÍÆäÀÌ½º¿¡ ¼±¾ðµÈ ¸Þ¼Òµå¸¦ ±¸Çö
	public String hello()
	{
		return "Hello, CORBA!";
	}
}
