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 |