![]() |
||||||
|
||||||
|
À̹ø È£¿¡¼´Â, » ÀÚ¹Ù ±â¼úÀ» ÀÌ¿ëÇÑ AJAXÀÇ È°¿ë » POJO¸¦ Persistent Entity·Î º¯È¯Çϱ⠸¦ ´Ù·ì´Ï´Ù. ÀÌ Å×Å©ÆÁÀº Java EE 5ÀÇ ¿ÀǼҽº ·¹ÆÛ·±½º¸¦ ±¸Çö(ÇÁ·ÎÁ§Æ®¸í: GlassFish)ÇÏ¿© °³¹ßµÇ¾ú½À´Ï´Ù.GlassFish´Â https://glassfish.dev.java.net/ ¿¡¼ ´Ù¿î·Îµå ÇÒ ¼ö ÀÖ½À´Ï´Ù. -»ùÇà ¾ÆÄ«ÀÌºê ¹Þ±â- ÀÚ¹Ù ±â¼úÀ» ÀÌ¿ëÇÑ AJAXÀÇ È°¿ë POJO¸¦ Persistent Entity·Î º¯È¯Çϱâ |
||
| ÀÚ¹Ù ±â¼úÀ» ÀÌ¿ëÇÑ AJAXÀÇ È°¿ë | ||
|
AJAX´Â 'Asynchronous JavaScript and XML'ÀÇ ¸Ó¸®±ÛÀÚ¸¦ µý °ÍÀ¸·Î, À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÌ À¥ ÆäÀÌÁö¿¡ ´ëÇÑ »ç¿ëÀÚ ÀÎÅÍ·¢¼ÇÀ» È¿À²ÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ¼ö´ÜÀ» Á¦°øÇÑ´Ù(»ç¿ëÀÚ ÀÎÅÍ·¢¼ÇÀÌ ÀÌ·ç¾îÁú ¶§¸¶´Ù ÆäÀÌÁö¸¦ ¸®ÇÁ·¹½Ã(»õ·Î °íħ)Çϰųª Àüü ÆäÀÌÁö¸¦ ¸®·ÎµåÇÏ´Â ¹ø°Å·Î¿òÀ» ´ú¾îÁÜ). ÀÌ´Â ¶ÇÇÑ ºê¶ó¿ìÀú¸¦ ÀÌ¿ëÇÑ ¸®Ä¡ ºñÇìÀ̺ñ¾î(rich behavior)¸¦ °¡´ÉÄÉ ÇØÁØ´Ù(µ¥½ºÅ©Åé ¾ÖÇø®ÄÉÀÌ¼Ç ¶Ç´Â Ç÷¯±×ÀÎ ±â¹Ý ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì¿Í À¯»ç). AJAX ÀÎÅÍ·¢¼ÇÀº ¹é±×¶ó¿îµå¿¡¼ ºñµ¿±âÀûÀ¸·Î 󸮵ǰí, ±× µ¿¾È »ç¿ëÀÚ´Â ÆäÀÌÁö¿¡ ´ëÇÑ ÀÛ¾÷À» °è¼ÓÇÒ ¼ö ÀÖ´Ù. AJAX ÀÎÅÍ·¢¼ÇÀº À¥ ÆäÀÌÁö ³»ÀÇ JavaScript¿¡ ÀÇÇØ ½ÃÀ۵Ǵµ¥, AJAX ÀÎÅÍ·¢¼ÇÀÌ ¿Ï·áµÇ¸é JavaScript´Â ÆäÀÌÁöÀÇ HTML ¼Ò½º¸¦ ¾÷µ¥ÀÌÆ®ÇÑ´Ù. º¯°æ ÀÛ¾÷Àº ÆäÀÌÁö ¸®ÇÁ·¹½Ã ¾øÀÌ Áï½Ã ÀÌ·ç¾îÁø´Ù. ÀÌ AJAX ÀÎÅÍ·¢¼ÇÀº ¼¹öÃø ³í¸®¸¦ ÀÌ¿ëÇÑ Æû ¿£Æ®¸® °ËÁõ(»ç¿ëÀÚ°¡ ÀÔ·ÂÇÏ´Â µ¿¾È), ¼¹öÀÇ »ó¼¼ µ¥ÀÌÅÍ °Ë»ö, ÆäÀÌÁö »óÀÇ µ¥ÀÌÅÍ¿¡ ´ëÇÑ µ¿Àû ¾÷µ¥ÀÌÆ®, ±×¸®°í ÆäÀÌÁö¿¡¼ ÆûÀ» ºÎºÐÀûÀ¸·Î Á¦ÃâÇÏ´Â µîÀÇ ÀÛ¾÷¿¡ ÀÌ¿ëµÉ ¼ö ÀÖ´Ù. ¿©±â¼ ƯÈ÷ Èï¹Ì¸¦ ²ô´Â ºÎºÐÀº AJAX ¾ÖÇø®ÄÉÀ̼ÇÀÌ º°µµÀÇ Ç÷¯±×ÀÎÀ» ¿ä±¸ÇÏÁö ¾ÊÀ¸¸ç Ç÷§Æû/ºê¶ó¿ìÀú Á߸³Àû Ư¼ºÀ» Áö´Ï°í ÀÖ´Ù´Â Á¡ÀÌ´Ù. ÷¾ðÇÏÀÚ¸é, ±¸Çü ºê¶ó¿ìÀú¿¡¼´Â AJAX°¡ ÃæºÐÈ÷ Áö¿øµÇÁö ¾ÊÀ¸¸ç, ºê¶ó¿ìÀú°£ÀÇ Â÷À̸¦ À¯¹ßÇϴ Ŭ¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÒ ¶§´Â ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù. µû¶ó¼ ºê¶ó¿ìÀúÀÇ Â÷À̸¦ Ãß»óÈ(abstract)ÇÏ´Â JavaScript ¶óÀ̺귯¸®¸¦ »ç¿ëÇϰųª °æ¿ì¿¡ µû¶ó¼´Â ´ëü ÀÎÅÍ·¢¼Ç ±â¹ýÀ» ÀÌ¿ëÇÏ¿© ±¸Çü ºê¶ó¿ìÀú¸¦ Áö¿øÇÏ´Â °Íµµ ÁÁÀº ¹æ¹ýÀÌ µÉ ¼ö ÀÖ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº ÀÚ¹Ù °³¹ßÀÚ¸¦ À§ÇÑ AJAX FAQ(¿µ¹®)¸¦ ÂüÁ¶ÇÒ °Í. ÀÚ¹Ù ±â¼úÀº ¾î¶² ÀÛ¾÷¿¡ ÀûÇÕÇѰ¡? ÀÚ¹Ù ±â¼ú°ú AJAX´Â ¼·Î ±ÃÇÕÀÌ Àß ¸Â´Â´Ù. ÀÚ¹Ù ±â¼úÀº AJAX ÀÎÅÍ·¢¼ÇÀ» À§ÇÑ ¼¹öÃø ÇÁ·Î¼¼½Ì ±â´ÉÀ» Á¦°øÇϴµ¥, ÀÌ´Â ¼ºí¸´, JSP(JavaServer Pages) ±â¼ú, JSF(JavaServer Faces) ±â¼ú, À¥ ¼ºñ½º µîÀ» ÅëÇØ Á¦°øµÉ ¼ö ÀÖ´Ù. AJAX ¿äû 󸮸¦ À§ÇÑ ÇÁ·Î±×·¡¹Ö ¸ðµ¨Àº Á¾·¡ÀÇ À¥ ¾ÖÇø®ÄÉÀ̼ǿ¡¼ »ç¿ëÇÏ´ø °Í°ú µ¿ÀÏÇÑ API¸¦ »ç¿ëÇÑ´Ù. JSF ±â¼úÀº Ŭ¶óÀ̾ðÆ®Ãø JavaScript¿Í ±×¿¡ ´ëÀÀÇÏ´Â ¼¹öÃø AJAX ÇÁ·Î¼¼½Ì Äڵ带 ÀÛ¼ºÇÏ´Â Àç»ç¿ë °¡´É ÄÄÆ÷³ÍÆ®¸¦ »ý¼ºÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ÀÌÁ¦ AJAX¿Í ¼ºí¸´ÀÇ È°¿ë ¿¹Á¦¸¦ »ìÆìº¸±â·Î ÇÏÀÚ. ÀÚµ¿ ¿Ï¼º(autocomplete) ¿¹Á¦ »ç¿ëÀÚ°¡ Á¾¾÷¿ø¿¡ °üÇÑ Á¤º¸¸¦ °Ë»öÇÒ ¼ö ÀÖ´Â À¥ ÆäÀÌÁö¸¦ »ó»óÇØº¸ÀÚ. ÀÌ ÆäÀÌÁö¿¡´Â »ç¿ëÀÚ°¡ Á¾¾÷¿øÀÇ À̸§À» ÀÔ·ÂÇÒ ¼ö ÀÖ´Â Çʵ尡 Æ÷ÇԵǾî ÀÖ´Ù. ÀÌ ¿¹Á¦¿¡¼ ¿£Æ®¸® Çʵå´Â ÀÚµ¿ ¿Ï¼º(autocomplete) ±â´ÉÀ» °¡Áö°í Àִµ¥, ´Ù½Ã ¸»ÇØ »ç¿ëÀÚ°¡ Á¾¾÷¿ø À̸§ÀÇ ÀϺθ¦ ÀÔ·ÂÇϸé À¥ ¾ÖÇø®ÄÉÀ̼ÇÀº ÀÔ·ÂÇÑ ¹®ÀÚ·Î À̸§À̳ª ¼ºÀÌ ½ÃÀ۵Ǵ ¸ðµç Á¾¾÷¿øÀ» ¿°ÅÇÏ¿© À̸§À» ÀÚµ¿À¸·Î ¿Ï¼ºÇÏ°Ô µÈ´Ù. ÀÚµ¿ ¿Ï¼º ±â´ÉÀº »ç¿ëÀÚ°¡ Á¾¾÷¿øÀÇ Á¤½Ä À̸§À» ÀÏÀÏÀÌ ±â¾ïÇϰųª ´Ù¸¥ ÆäÀÌÁö¿¡¼ À̸§À» ã¾Æº¸¾Æ¾ß ÇÏ´Â ¹ø°Å·Î¿òÀ» ´ú¾îÁØ´Ù.
°Ë»ö ÇʵåÀÇ ÀÚµ¿ ¿Ï¼º ±â´ÉÀº AJAX¸¦ ÀÌ¿ëÇØ¼ ±¸ÇöµÉ ¼ö ÀÖÀ¸¸ç, À̸¦ À§Çؼ´Â Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö »ó¿¡ Äڵ带 Á¦°øÇØ¾ß ÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ® »ó¿¡¼
¸ÕÀú, »ç¿ëÀÚ°¡ ºê¶ó¿ìÀú¿¡ ÀÇÇØ ·ÎµåµÇ´Â ÆäÀÌÁöÀÇ URLÀ» ÁöÁ¤ÇÑ´Ù. ÇÑÆí, ÀÌ ¿¹Á¦¿¡¼´Â JSF ÄÄÆ÷³ÍÆ®, ¼ºí¸´, ¶Ç´Â JSP ÆäÀÌÁö¿¡ ÀÇÇØ »ý¼ºµÇ´Â HTML ÆäÀÌÁö°¡ »ç¿ëµÇ¾ú´Ù°í °¡Á¤ÇÏÀÚ. ÆäÀÌÁö¿¡´Â JavaScript ÇÔ¼ö
<input type="text"
size="20"
autocomplete="off"
id="complete-field"
name="id"
onkeyup="doCompletion();">
»ç¿ëÀÚ°¡ Æû ÅØ½ºÆ® Çʵ忡 ¹®ÀÚ "M"À» ÀÔ·ÂÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. ±×¿¡ ´ëÇÑ ÀÀ´äÀ¸·Î
function initRequest(url) {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if (window.ActiveXObject) {
isIE = true;
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
function doCompletion() {
if (completeField.value == "") {
clearTable();
} else {
var url = "autocomplete?action=complete&id=" +
escape(completeField.value);
var req = initRequest(url);
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
parseMessages(req.responseXML);
} else if (req.status == 204){
clearTable();
}
}
};
req.open("GET", url, true);
req.send(null);
}
}
ºñµ¿±â È£ÃâÀ» ÀÌ¿ëÇÒ ¶§´Â callback ÇÔ¼ö¸¦ ¼³Á¤ÇØ¾ß Çϴµ¥,
¼¹ö »ó¿¡¼
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
...
String targetId = request.getParameter("id");
Iterator it = employees.keySet().iterator();
while (it.hasNext()) {
EmployeeBean e = (EmployeeBean)employees.get(
(String)it.next());
if ((e.getFirstName().toLowerCase().startsWith(targetId) ||
e.getLastName().toLowerCase().startsWith(targetId))
&& !targetId.equals("")) {
sb.append("<employee>");
sb.append("<id>" + e.getId() + "</id>");
sb.append("<firstName>" + e.getFirstName() +
"</firstName>");
sb.append("<lastName>" + e.getLastName() +
"</lastName>");
sb.append("</employee>");
namesAdded = true;
}
}
if (namesAdded) {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write("<employees>" +
sb.toString() + "</employees>");
} else {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
}
ÀÌ ¼ºí¸´À» º¸¸é ¾Ë ¼ö ÀÖµíÀÌ, AJAX 󸮸¦ À§ÇØ ¼¹öÃø ÄÚµå ÀÛ¼º ¹æ¹ýÀ» ¹è¿ì´Â µ¥ ÇÊ¿äÇÑ »õ·Î¿î ³»¿ëÀº ÀüÇô ³ª¿ÍÀÖÁö ¾Ê´Ù. XML ¹®¼¸¦ ±³È¯ÇϰíÀÚ ÇÒ °æ¿ì¿¡ ´ëºñÇØ¼ ÀÀ´ä ÄÁÅÙÆ® À¯ÇüÀ»
<employees>
<employee>
<id>3</id>
<firstName>George</firstName>
<lastName>Murphy</lastName>
</employee>
<employee>
<id>2</id>
<firstName>Greg</firstName>
<lastName>Murphy</lastName>
</employee>
<employee>
<id>11</id><firstName>Cindy</firstName>
<lastName>Murphy</lastName>
</employee>
<employee>
<id>4</id>
<firstName>George</firstName>
<lastName>Murray</lastName>
</employee>
<employee>
<id>1</id>
<firstName>Greg</firstName>
<lastName>Murray</lastName>
</employee>
</employees>
´Ù½Ã Ŭ¶óÀÌ¾ðÆ®·Î
óÀ½ È£ÃâÀ» ÇÑ
function parseMessages(responseXML) {
clearTable();
var employees = responseXML.getElementsByTagName(
"employees")[0];
if (employees.childNodes.length > 0) {
completeTable.setAttribute("bordercolor", "black");
completeTable.setAttribute("border", "1");
} else {
clearTable();
}
for (loop = 0; loop < employees.childNodes.length; loop++) {
var employee = employees.childNodes[loop];
var firstName = employee.getElementsByTagName(
"firstName")[0];
var lastName = employee.getElementsByTagName(
"lastName")[0];
var employeeId = employee.getElementsByTagName(
"id")[0];
appendEmployee(
firstName.childNodes[0].nodeValue,
lastName.childNodes[0].nodeValue,
employeeId.childNodes[0].nodeValue);
}
}
<div style="position: absolute;
top:170px;left:140px" id="menu-popup">
»ç¿ëÀÚ°¡ ¹®ÀÚ¸¦ ´õ ¸¹ÀÌ ÀÔ·ÂÇÒ¼ö·Ï ¸ñ·Ï ±æÀÌ´Â ÁÙ¾îµé°Ô µÇ°í, ÀÌ¾î¼ »ç¿ëÀÚ´Â ¿©·¯ À̸§ Áß Çϳª¸¦ Ŭ¸¯ÇÒ ¼ö ÀÖ´Ù. ÀÌÁ¦ ¿©·¯ºÐÀº AJAX°¡ ´Ü¼øÈ÷ ÆäÀÌÁöÀÇ ¹é±×¶ó¿îµå¿¡¼ HTTP¸¦ ÅëÇØ Á¤º¸¸¦ ±³È¯ÇÏ°í °á°ú¸¦ Åä´ë·Î ÇØ´ç ÆäÀÌÁö¸¦ µ¿ÀûÀ¸·Î ¾÷µ¥ÀÌÆ®ÇÑ´Ù´Â °ÍÀ» ¾Ë°Ô µÇ¾úÀ» °ÍÀÌ´Ù. AJAX¿Í ÀÚ¹Ù ±â¼ú¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Å×Å©´ÏÄà ¾ÆÆ¼Å¬ Asynchronous JavaScript Technology and XML (AJAX) With Java 2 Platform, Enterprise Edition(¿µ¹®)À» ÂüÁ¶Çϱ⠹ٶõ´Ù. ¾Æ¿ï·¯ AJAX BluePrints ÆäÀÌÁö(¿µ¹®)¿Í Greg MurrayÀÇ ºí·Î±×¿¡ ½Ç·Á ÀÖ´Â AJAX FAQ for the Java Developer(¿µ¹®)ÀÇ ³»¿ëµµ ÇÔ²² ÂüÁ¶ÇÒ °Í. ¿¹Á¦ ÄÚµå ½ÇÇàÇϱ⠺» ÆÁ¿¡´Â º»¹®¿¡¼ ´Ù·ç¾îÁø ±â¹ýÀ» ¿¹½ÃÇÏ´Â ¿¹Á¦ ÆÐŰÁö°¡ ÷ºÎµÇ¾î Àִµ¥, Servlet 2.4 ÀÌ»óÀÇ API¸¦ Áö¿øÇÏ´Â À¥ ÄÁÅ×À̳ʶó¸é ¸ðµÎ ¿¹Á¦ ÆÐŰÁö ¼³Ä¡°¡ °¡´ÉÇÏ´Ù. ¿¹Á¦¸¦ ¼³Ä¡ÇÏ°í ½ÇÇàÇÏ·Á¸é ´ÙÀ½ ´Ü°è¸¦ µû¸£µµ·Ï ÇÑ´Ù.
ÇÊÀÚ ¼Ò°³ ¼ºí¸´ ½ºÆå ºÐ¾ß¸¦ ÁÖµµÇϰí ÀÖ´Â Greg Murray´Â Java BluePrints ÆÀÀÇ Àü ¸â¹ö·Î, À¥ Ƽ¾î ±Ç°í(recommendations) ºÎ¹®À» ´ã´çÇÑ ¹Ù ÀÖÀ¸¸ç, ÇöÀç ±×´Â BluePrints ÆÀÀÇ µµ¿òÀ» ¹Þ¾Æ ½ãÀÇ AJAX ÇÁ·ÎÁ§Æ®¸¦ À̲ø°í ÀÖ½À´Ï´Ù. ¶ÇÇÑ GregÀº ±¹Á¦È, À¥ ¼ºñ½º, J2SE µ¶¸³Çü Ŭ¶óÀ̾ðÆ®, AJAX ±â¹Ý À¥ Ŭ¶óÀÌ¾ðÆ® µîÀÇ ºÐ¾ß¿¡¼ ´Ù¾çÇÑ °æ·ÂÀ» ½×±âµµ Çß½À´Ï´Ù. ¸Ç À§·Î |
||
| POJO¸¦ Persistent Entity·Î º¯È¯Çϱâ | ||
|
Java EE 5ÀÇ ¸ñÇ¥ Áß Çϳª´Â °³¹ßÀ» ¿ëÀÌÇÏ°Ô ÇÏ´Â °ÍÀ¸·Î¼, EJB(Enterprise JavaBeans) 3.0 ½ºÆå JSR-220ÀÇ ÇÑ ºÎºÐÀ¸·Î Á¤ÀǵǴ »õ Java Persistence API´Â »ó±â ÃëÁö¸¦ ÃæÁ·Çϱâ À§ÇØ ¼³°èµÈ ÇÙ½É ±¸¼º¿ä¼Ò¶ó ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ, Àα⠳ôÀº Java Servlet API 2.5 ¿ª½Ã °³¹ßÀÇ ¿ëÀ̼ºÀ» Áö¿øÇÏ´Â ±â´ÉÀ» ºÎºÐÀûÀ¸·Î³ª¸¶ Æ÷ÇÔÇϰí ÀÖ´Ù. º» Å×Å© ÆÁ¿¡¼´Â ÀÚ¹Ù ¼ºí¸´¿¡¼ »ç¿ëµÇ´Â Java Persistence APIÀÇ ¿¹Á¦¸¦ ´Ù·ê °ÍÀ̸ç, ¾Æ¿ï·¯ POJO(Plain Old Java Object)¸¦ persistent entity·Î º¯È¯ÇÏ´Â ¹æ¹ý°ú ÀÚ¹Ù ¼ºí¸´¿¡¼ÀÇ entity »ç¿ë ¹æ¹ý¿¡ ´ëÇØ¼µµ ¾Ë¾Æº¸µµ·Ï ÇÑ´Ù. ¶ÇÇÑ ¿©·¯ºÐÀº ÀÌ·± ±â´ÉÀ» »ç¿ëÇÏ´Â ¿¹Á¦ ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇØ º¼ ¼öµµ ÀÖ´Ù. POJO¸¦ Persistent Entity·Î º¯È¯Çϱâ
¸ÕÀú POJO·Î ½ÃÀÛÇØº¸ÀÚ. (¿¹Á¦ ÄÚµå ½ÇÇàÇϱ⠼½¼Ç¿¡¼ ¼³¸íÇÑ ´ë·Î ¿¹Á¦ ÆÐŰÁö¸¦ ´Ù¿î·ÎµåÇÏ¿© ¾ÐÃàÀ» Ç®¸é POJO¿Í ¿¹Á¦¸¦ À§ÇÑ ´Ù¸¥ ¼Ò½º Äڵ带 »ìÆìº¼ ¼ö ÀÖ´Ù.) ÀÌ ¿¹Á¦¿¡¼ POJO´Â JavaBean ÄÄÆ÷³ÍÆ®·Î ±¸ÇöµÇ´Â
package com.example.entity;
public class Customer implements java.io.Serializable {
private Integer customerId;
private int version;
private String firstName;
private String lastName;
private String company;
...
public Integer getCustomerId() {
return customerId;
}
protected void setCustomerId(Integer customerId) {
this.customerId = customerId;
}
...
ÇöÀçÀÇ ÇüÅ·δ Ŭ·¡½º°¡ Áö¼ÓµÉ ¼ö ¾ø´Âµ¥, À̸¦ Å×¸é °ü°èÇü µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÒ ¼ö ¾ø´Ù´Â ¸»ÀÌ´Ù. µû¶ó¼ Ŭ·¡½º¸¦ Áö¼Ó½ÃŰ·Á¸é entity·ÎÀÇ º¯È¯ÀÌ ÇÊ¿äÇÏ´Ù. Enterprise JavaBeans 3.0 ½ºÆå(JSR-220)¿¡¼´Â entity¸¦ º¸Àß °Í ¾ø°í °íÁý ¼¾ µµ¸ÞÀÎ ¿ÀºêÁ§Æ® Á¤µµ·Î Á¤ÀÇÇϰí ÀÖ´Ù. ÇÑÆí, Java Persistence API´Â POJO¸¦ entity·Î º¯È¯ÇÏ´Â µ¥ µµ¿òÀÌ µÇ´Â ¸î °¡Áö ÁÖ¼®À» Á¤ÀÇÇÑ´Ù.
POJO¸¦ entity·Î º¯È¯Çϴ ù ¹øÂ° ´Ü°è´Â persistence ÁÖ¼®À»
package com.example.entity;
import javax.persistence.*;
@Entity
public class Customer implements java.io.Serializable {
±× Áö¼Ó¼ºÀ» ¿¹½ÃÇϱâ À§ÇØ ÀÌ ¿¹Á¦ÀÇ entity¸¦ °ü°èÇü µ¥ÀÌÅͺ£À̽º-º¸´Ù ±¸Ã¼ÀûÀ¸·Î´Â Apache Derby µ¥ÀÌÅͺ£À̽º(Apache Derby µ¥ÀÌÅͺ£À̽º´Â GlassFish¿Í ÇÔ²² ÆÐŰÁö¿¡ Æ÷ÇԵǾî ÀÖ´Ù)-¿¡ ÀúÀåÇϱâ·Î ÇÑ´Ù. ´ÙÀ½Àº entity°¡ ÀúÀåµÉ Å×À̺íÀ» »ý¼ºÇÏ´Â µ¥ »ç¿ëµÇ´Â SQLÀÌ´Ù.
CREATE TABLE Customer (
custId INTEGER PRIMARY KEY NOT NULL,
firstName VARCHAR(60),
lastName VARCHAR(60),
company VARCHAR(255),
address_1 VARCHAR(255),
address_2 VARCHAR(255),
city VARCHAR(60),
state VARCHAR(60),
zip VARCHAR(10),
emailAddress VARCHAR(80),
phoneNumber VARCHAR(80)
)
´ÙÀ½ ´Ü°è´Â
package com.example.entity;
import javax.persistence.*;
@Entity
@Table(name="customer")
public class Customer {
µ¥ÀÌÅͺ£À̽º Å×À̺í(
¸ðµç entity´Â ¹Ýµå½Ã 1Â÷ ۸¦ °¡Á®¾ß Çϰí, °í°´ µ¥ÀÌÅͺ£À̽º Å×À̺íÀÇ °æ¿ì 1Â÷ Ű´Â
@Id(name="custId")
public String getCustomerId(){
return customerId;
}
´ÙÀ½ ´Ü°è´Â ºó(bean) ¼Ó¼ºÀ» µ¥ÀÌÅͺ£À̽º ¼Ó¼ºÀ¸·Î ¸ÅÇÎÇÏ´Â °ÍÀε¥, ÀÌ ÀÛ¾÷Àº
private Integer customerId;
private String firstName;
private String lastName;
private String company;
private String address1;
private String address2;
private String city;
private String state;
private String zip;
private String emailAddress;
private String phoneNumber;
½ÇÁ¦·Î ºó ¼Ó¼º À̸§°ú ±×¿¡ ´ëÀÀÇÏ´Â µ¥ÀÌÅͺ£À̽º ¼Ó¼º À̸§ »çÀÌ¿¡´Â ¸î °¡Áö Â÷ÀÌÁ¡ÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î, Ŭ·¡½º¿¡´Â ÁÖ¼ÒÀÇ Ã¹ Çà¿¡ ´ëÇØ
@Column(name="address_1")
public String getAddress1() {
return address1;
}
´ÙÀ½À¸·Î,
public static List<Customer> findAllCustomers(
EntityManager em) {
Query query = em.createQuery(
"SELECT OBJECT(cust) FROM Customer cust");
List<Customer> customers = query.getResultList();
return customers;
}
Äõ¸® ¸Þ¼Òµå
´ÙÀ½Àº
public static Customer findCustomerById(EntityManager em,
Integer custId) {
Query query = em.createQuery(
"SELECT OBJECT(cust) FROM Customer cust "
+ "WHERE cust.customerId = :custId");
query.setParameter("custId", custId);
List<Customer> customers = query.getResultList();
if (customers != null && customers.size() > 0) {
return customers.get(0);
} else {
return null;
}
}
»ó±âÇÑ Persistence Descriptor
persistence descriptor´Â
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name ="myEntityManager">
<description>Sample Customer Database</description>
</persistence-unit>
</persistence>
¿£Æ¼Æ¼ ÆÐŰ¡Àº ÇÁ·Î¹ÙÀÌ´õ¿Í ±¸¼ºÀ» Æ÷ÇÔÇÑ ¸í¸íµÈ(named) ¿£Æ¼Æ¼ °ü¸®ÀÚ, ÀÏ·ÃÀÇ °ü¸® Ŭ·¡½º, Ŭ·¡½º¸¦ µ¥ÀÌÅͺ£À̽º¿¡ ¸ÅÇÎÇÏ´Â ¸ÞŸµ¥ÀÌÅÍ µîÀ» ±×·ìÈÇÏ´Â persistence unitÀ» ±â¹ÝÀ¸·Î ÀÌ·ç¾îÁø´Ù. ´ÙÀ½Àº ÀÌ ¿¹Á¦¿¡¼ »ç¿ëµÇ´Â persistence unitÀÌ´Ù.
<persistence-unit name ="myEntityManager">
<description>Sample Customer Database</description>
<jta-data-source>jdbc/__default</jta-data-source>
<class>com.example.entity.Customer</class>
</persistence-unit>
ÄÁÆ®·Ñ·¯ ¼ºí¸´
º» ÆÁÀÇ ¿¹Á¦¿¡´Â ÄÁÆ®·Ñ·¯ ¼ºí¸´ÀÌ Æ÷ÇԵǾî Àִµ¥, ÀÌ ¼ºí¸´Àº ÁÖ¼® ´ÙÀ½Àº ÄÚµåÀÇ ÇÑ ºÎºÐÀÌ´Ù.
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
...
public class ControllerServlet extends HttpServlet {
@PersistenceContext EntityManager myEntityManager;
...
º¯¼ö ÄÁÆ®·Ñ·¯ ¼ºí¸´Àº Á¦°øµÈ ¿£Æ¼Æ¼ ¸Å´ÏÀú ÀνºÅϽº¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º ¹× jsp ÆÄÀÏÀ» ºä ·¹À̾î·Î¼ ¾×¼¼½ºÇÑ´Ù. ¿¹¸¦ µé¾î, ¼ºí¸´ ³»ÀÇ ´ÙÀ½ ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌÅͺ£À̽º ³»ÀÇ ¸ðµç °í°´ ·¹Äڵ带 µð½ºÇ÷¹ÀÌÇÑ´Ù.
private void doQueryByExample(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
...
List<Customer> customers =
Customer.findAllCustomers(myEntityManager);
if (customers.size() > 0) {
request.setAttribute(
ATTRIBUTE_CUSTOMER_LIST, customers);
getRequestDispatcher("/list.jsp").forward(
request, response);
} else {
getRequestDispatcher("/index.jsp").forward(
request, response);
}
}
¿¹Á¦ ÄÚµå ½ÇÇàÇϱ⠺» ÆÁ¿¡´Â ÆÁ¿¡¼ ´Ù·é ±â¹ýÀ» ¿¹½ÃÇÏ´Â ¿¹Á¦ ÆÐŰÁö°¡ ÷ºÎµÇ¾î ÀÖ°í, ¿¹Á¦ ÆÐŰÁö¿¡´Â ¿¹Á¦¿¡ °üÇÑ ¼Ò½º ÄÚµå, ÇÊ¿äÇÑ ±â¼úÀÚ(descriptor) ÆÄÀÏ, ºôµå ½ºÅ©¸³Æ® µîÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ¿¹Á¦¸¦ ½ÇÇàÇÏ·Á¸é ´ÙÀ½ ´Ü°è¸¦ µû¸£µµ·Ï ÇÑ´Ù.
ÀúÀÚ ¼Ò°³ Sriramulu Lakkaraju´Â Sun Java System Enterprise Application Server ±×·ìÀÇ ½ºÅÂÇÁ ¿£Áö´Ï¾î·Î, Áö³ 7³â°£ ½ã ÀÚ¹Ù ±â¼ú ºÐ¾ß¿¡ °øÇåÇØ ¿Ô½À´Ï´Ù. ¶ÇÇÑ ±×´Â J2SE (Security & Networking), J2EE (JSP, Servlet, JSTL, EJB) µîÀÇ ºÐ¾ß¸¦ ºñ·ÔÇÏ¿© Sun Java System Application ServerÀÇ °í°¡¿ë¼º ±â´É ±¸Çö¿¡µµ ÀÏÁ¶ÇÑ ¹Ù°¡ Å®´Ï´Ù. Abhijit Kumar´Â Sun Java System Application Server, Platform EditionÀÇ ¼³°èÀÚÀ̸ç, Áö³ 10³â°£ ÀÚ¹Ù °³¹ßÀڷμ ¿ªÇÒÀ» ÈǸ¢È÷ ¼öÇàÇØ¿À°í ÀÖ½À´Ï´Ù. ¸Ç À§·Î |
||
º»
¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù. SKDN(Sun Korea Developers Network)¿¡¼ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä. Copyright 2003-2005 Sun Korea, Ltd. All rights reserved. |