Site Search :
Standard Enterprise XML Methodology Pattern Setting Tunning Other
Article Contributors
GuestBook
Javapattern Maven
XSourceGen Dev
JetSpeed Test
JLook Image
jLook Family Site


InvokeEJB Custom Tag Library implementation
 
JSP °³¹ß½Ã EBJ tierÀÇ stateless session beanÀÇ business method È£Ãâ¿¡´ëÇÑ code logicÀ» encapsulationÇÏ´Â Custom Tag Library ¼Ò°³¸¦ Çϸç Web tier¿Í EJB tier°£ °³¹ßÀÚ roleÀ» ¸íÈ®È÷ ºÐ¸®ÇÒ¼ö ÀÖ´Â ÀåÁ¡ Á¦°øÇÏ´Â tag lib¸¦ ¼Ò°³ÇÑ´Ù. ( 2003/03/10 ) 315
Written by specular - ÀüÈ«¼º
1 of 3
 

Article ¿ä¾à:

Web tier¿¡¼­ EJB Stateless Session BeanÀÇ business method¸¦ È£ÃâÇÏ´Â ¹æ¹ýÀ» ÀÏ°ü¼ºÀÖ°Ô ±¸ÇöÇÒ¼ö ÀÖ°í, EJB È£Ãâ¿¡ ´ëÇÑ LogicÀ» EncapsulationÇÏ´Â Custom Tag Library ¼Ò°³.

Article ³»¿ë:

  Web Tier JSP component¿¡¼­ EJB Stateless Session BeanÀ» È£ÃâÇÏ´Â ¹æ¹ýÀº °æÇèÇÑ »ç¶÷Àº ¾Ë°ÚÁö¸¸, ¸Þ¼Òµå¸¸ ´Ù¸¦»Ó °°Àº ÄÚµå·ÎÁ÷À¸·Î ±¸ÇöÀÌ µÈ´Ù. Áï, JNDI Naming Service¿¡ Á¢±ÙÇؼ­ Home objectÀÇ remote reference¸¦ ¾ò¾î³»°í, Home objectÀÇ create() method¸¦ È£ÃâÇؼ­ EJB objectÀÇ remote referece¸¦ ¾ò¾î ³½´Ù. ±×·±´ÙÀ½. EJB object¸¦ ÅëÇØ Business method¸¦ È£ÃâÇÏ°Ô µÇ´Â °ÍÀÌ´Ù.
  ÀÌ¿Í °°ÀÌ EJBÀÇ Business method¸¦ È£ÃâÇϱâ À§ÇÑ logicÀ» ´Ù¸¥ class component·Î ±¸ÇöÀ» Çصµ µÇ°ÚÁö¸¸, Àú´Â JSP Custom Tag Library·Î Çϳª ¸¸µé¾î ºÃÁÒ..
  Web Tier¿¡¼­ EJBÀÇ Business method¸¦ È£ÃâÇÏ´Â component¸¦ °³¹ßÇϱâ À§Çؼ­´Â dynamic invocationÀ» Áö¿øÇØ¾ß °ÚÁÒ. ¾î¶² signatureÀÇ method¸¦ È£ÃâÇØ¾ß ÇÒÁö ¸ð¸£±â ¶§¹®¿¡ runtime¿¡ method°¡ °áÁ¤µÇ¾î Áú¼ö ÀÖ¾î¾ß °ÚÁÒ. ÀÌÁ¤µµ À̾߱⸦ Çϸé, EJBÀÇ EJBMetaData interface¸¦ ÀÌ¿ëÇØ¾ß °Ú´Ù´Â°ÍÀ» °¨À» ÀâÀ»¼ö ÀÖ°ÚÁÒ. Àü¿¡ EJBMetaData interface¿¡´ëÇÑ articleÀ» ¼Ò°³¸¦ Çߴµ¥....
  Custom Tag Libray¿¡´ëÇÑ ¼Ò°³´Â article·Î ¸î¹ø Çß¾ú´Âµ¥, Custom Tag¸¦ °³¹ßÇϱâ À§Çؼ­´Â °¡Àå ¸ÕÀú »ý°¢ÇØ¾ß ÇÒ°ÍÀº, °³¹ßÇÏ°íÀÚ ÇÏ´Â Tag¿¡ ´ëÇÑ syntaxÀÔ´Ï´Ù. ÀÌ syntax´Â °³¹ßÇÏ°íÀÚ ÇÏ´Â custom tagÀÇ ±â´ÉÀ» Àß »ý°¢ÇÏ¼Å¾ß °ÚÁÒ.
  Stateless Session BeanÀÇ businses method¸¦ È£ÃâÇϱâÀ§ÇØ ÇÊ¿äÇÑ °ªµéÀº ´ÙÀ½°ú °°½À´Ï´Ù.

  		
  • JNDI Naming serviceÀÇ location
  • JNDI CONTEXT FACTORY class name
  • Home objectÀÇ JNDI Name
  • Business method Name
  • Business methodÀÇ parameter list
  • return type
  •   À§ÀÇ Ç׸ñµéÀ» ÅëÇØ °³¹ßÇÏ°íÀÚ ÇÏ´Â custom tagÀÇ syntax¸¦ »ý°¢ÇÒ¶§, °¡Àå °í¹ÎÀÌ µÇ´Â ºÎºÐÀº parameter list¿Í return type¿¡ ÀÇÇÑ return value °ªÀ» ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡? .....
      return value´Â Custom tagÀÇ scripting variableÀ» ÀÌ¿ëÇÏ¸é µÇ°Ú°í, parameter list´Â ¸î°³°¡ µÉÁö ¸ð¸£±â ¶§¹®¿¡ Applet TagÀÇ <param name="" value="" >°ú °°Àº ÇüÅ·ΠÁ¤ÀÇÇÏ¸é µÇ°ÚÁÒ. Áï.... ´ÙÀ½°ú °°ÀÌ.

          
      	<web:invokeEjb url="127.0.0.1" 
      				jndiName="ejb/EchoHome" 
      				context="weblogic.jndi.WLInitialContextFactory"
      				method="sayEcho" 
      				id="msg" type="java.lang.String">
      		<web:param name="java.lang.String" value="<%= name%>"/>
      	</web:invokeEjb>

      param tag´Â jsp page¿¡¼­ »ý¼ºµÈ °´Ã¼³ª, primetive value°ªÀ» invokeEjb Tag°¡ Business method¸¦ È£ÃâÇϱâÀ§ÇÑ parameter °ªÀ¸·Î ÀÌ¿ëÇÒ¼ö ÀÖ°Ô, Àü´ÞÇØ ÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. parameter¿¡ ´ëÇÑ Á¤º¸(Data type, value)¸¦ ¹Þ¾Æ passÇØ ÁÖ´Â ±â´ÉÀÌÁÒ. parameter Á¤º¸¸¦ passÇϱâ À§Çؼ­´Â invokeEjb tagÀÇ public method¸¦ È£ÃâÇØ¾ß °ÚÁÒ. ÀÌ¿Í °°ÀÌ tag°¡ nestedµÇ¾î µ¿ÀÛÇÏ´Â Custom Tag¸¦ Collabration Tag¶ó°í ÇÕ´Ï´Ù. param tag¸¦ ±¸ÇöÇÒ¶§ Áß¿äÇÑ »çÇ×Àº invokeEjb Tag °´Ã¼ÀÇ reference¸¦ ¾ò¾î³»´Â ¹æ¹ýÀÌ°ÚÁÒ. Param Tag´Â ´ÙÀ½°ú °°ÀÌ ±¸ÇöµË´Ï´Ù.

                
    package com.javapattern.servlet.jsp;
    
    import java.io.*;
    import java.util.*;
    import java.lang.reflect.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;
    
    /** ¢Æ¢Æ¢Æ¢Æ EJB InvokeParamTag Handler ¢Æ¢Æ¢Æ¢Æ
    * Attribute name	Business method parameter type
    *		value	Business method parameter value
    *
    * <web:invokeEjb	jndiName="" url="" id="" type="">
    *	<web:param name="java.lang.String" value="<%= name%>"/>
    *	<web:param name="int" value="10"/>
    * </web:invokeEjb>
    * 		written by JeonHongSeong
    */
    
    public class InvokeParamTag extends TagSupport 
    {
    private String name;
    private Object value;
    
    private final static String[] PRIMITIVE_TYPE={"byte","short","int","long",
    			"float","double","char","boolean"};
    private final static String[] PRIMITIVE_ARRAY_TYPE={"byte[]","short[]","int[]",
    			"long[]","float[]","double[]","char[]","boolean[]"};
    
    private static Hashtable PRIMITIVE = new Hashtable();
    private static Hashtable PRIMITIVE_ARRAY = new Hashtable();
    
    static {
      PRIMITIVE.put(PRIMITIVE_TYPE[0],byte.class);
      PRIMITIVE_ARRAY.put(	PRIMITIVE_ARRAY_TYPE[0],
    			Array.newInstance(byte.class,0).getClass()	);
    
      PRIMITIVE.put(PRIMITIVE_TYPE[1],short.class);
      PRIMITIVE_ARRAY.put(	PRIMITIVE_ARRAY_TYPE[1],
    			Array.newInstance(short.class,0).getClass()	);
    
      PRIMITIVE.put(PRIMITIVE_TYPE[2],int.class);
      PRIMITIVE_ARRAY.put(	PRIMITIVE_ARRAY_TYPE[2],
    			Array.newInstance(int.class,0).getClass()	);
    
      PRIMITIVE.put(PRIMITIVE_TYPE[3],long.class);
      PRIMITIVE_ARRAY.put(	PRIMITIVE_ARRAY_TYPE[3],
    			Array.newInstance(long.class,0).getClass()	);
    
      PRIMITIVE.put(PRIMITIVE_TYPE[4],float.class);
      PRIMITIVE_ARRAY.put(	PRIMITIVE_ARRAY_TYPE[4],
    			Array.newInstance(float.class,0).getClass()	);
    
      PRIMITIVE.put(PRIMITIVE_TYPE[5],double.class);
      PRIMITIVE_ARRAY.put(	PRIMITIVE_ARRAY_TYPE[5],
    			Array.newInstance(double.class,0).getClass()	);
    
      PRIMITIVE.put(PRIMITIVE_TYPE[6],char.class);
      PRIMITIVE_ARRAY.put(	PRIMITIVE_ARRAY_TYPE[6],
    			Array.newInstance(char.class,0).getClass()	);
    
      PRIMITIVE.put(PRIMITIVE_TYPE[7],boolean.class);
      PRIMITIVE_ARRAY.put(	PRIMITIVE_ARRAY_TYPE[7],
    			Array.newInstance(boolean.class,0).getClass()	);
    }
    
    public void setName(String name)
    {
    	this.name=name;	
    }
    
    public void setValue(Object value)
    {
    	this.value=value;
    }
    
    public int doStartTag() 
    	throws JspTagException
    {
    	InvokeEJBTag parent = 
    			(InvokeEJBTag)findAncestorWithClass(this, 
    			com.javapattern.servlet.jsp.InvokeEJBTag.class) ;
    	if(parent==null) 
    		throw new JspTagException("InvokeParam Tag without InvokeEJB Tag");
    	if(name==null)
    		throw new JspTagException("Invalid Param Tag : name is null.");
    	try {
    		parent.addArgType(makeClass());
    		parent.addArgValue(value);
    	} catch(ClassNotFoundException e) {
    		throw new JspTagException("Parameter class not found. : "+name);
    	}
    	
    	return SKIP_BODY;
    } 	
    
    private Class makeClass() throws ClassNotFoundException {
    	Object obj = PRIMITIVE.get(name);
    	if(obj!=null) return (Class) obj;
    	
    	obj = PRIMITIVE_ARRAY.get(name);
    	if(obj!=null) return (Class) obj;
    	
    	
    	if((name.indexOf('[')!=-1)&&(name.indexOf(']')!=-1)) {
    		int idx = name.indexOf('[');
    		String tmp = name.substring(0,idx);
    		
    		obj = Array.newInstance(Class.forName(tmp),0);
    		return obj.getClass();	
    	}
    	
    	return Class.forName(name);
    }
    }
    

    Param TagÀÇ TEI classÀÇ ±¸Çö ÄÚµå ÀÔ´Ï´Ù.

                
    package com.javapattern.servlet.jsp;
    
    import javax.servlet.jsp.tagext.TagExtraInfo;
    import javax.servlet.jsp.tagext.VariableInfo;
    import javax.servlet.jsp.tagext.TagData;
    
    public class InvokeParamTEI extends TagExtraInfo {
    
    	public VariableInfo[] getVariableInfo(TagData data)
    	{
    		String varName = data.getAttributeString("name");
    		String className = data.getAttributeString("value");
    		className=(className==null) ? "java.lang.Object" : className;
    		VariableInfo info=new VariableInfo(
    						varName, 
    						className, 
    						true, 
    						VariableInfo.NESTED);
    		VariableInfo[] result = { info };
    
    		return result;
    	}
    
    	public boolean isValid(TagData data) {
    		return true;
    	}
    }

    2001.08.03 written by Jeon HongSeong

     
     
    1 2 3
    References
     
    http://java.sun.com/taglib
    Copyright ¨Ï 2003 www.javapattern.info & www.jlook.com, an jLOOK co.,LTD