GoGo Bloghttp://blog.gogo.mnСүүлд нэмэгдсэн бичлэгүүдen-usSun, 21 Mar 2010 12:00:00 ULATjRSSGenerator by Henrique A. Viecilihttp://blogs.law.harvard.edu/tech/rssIphone - SMS Delivery reporthttp://opennet.blog.gogo.mn/read/entry34127<p><strong>Iphone </strong>- той хүмүүст энэ бичлэгийг зориулж байна. Та Iphone хэргэлдэг, заримдаа танд SMS Delivery -г заалшгүй мэдэх хэрэг гардаг байхаа. SMS delivery - г авахийн тулд SMS - нхээ урд <strong>*!#</strong> тавиад л явуул.&nbsp;</p> <p align="center"> <img src="http://stat.gogo.mn/blog/0/23440/opennet/IMG_0008.gif" /></p> <p align="left"><strong>Iphone </strong>гэлтгүй ямарч утсан дээр болох байх. Арай өөр хэлбэрийн Notification ирэх болно. <br /></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry34127Wed, 7 Oct 2009 11:25:02 ULATWeb service #2http://opennet.blog.gogo.mn/read/entry5421<p>Түрүүчийн бичлэгт webservice - ээ үүсгэсэн. Интерфейс нь</p> <p>&nbsp;package xfire.secure.demo;<br />&nbsp;public interface ILookPeople {<br /> <br />&nbsp;&nbsp;&nbsp; public String example(String message);<br />}</p> <p>байх&nbsp; бөгөөд implementation class нь дараах байдалтай байна</p> <p>package xfire.secure.demo;<br />public class LookPeopleImpl implements ILookPeople {</p> <p>&nbsp;public String example(String message) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return message;<br />&nbsp;&nbsp;&nbsp; }</p> <p>}<br />Webservice -ээ тестлэхын тулд webservice project оо server-тээ upload хийгээд<br /><a href="http://localhost:8080/xfiredemo/services/">http://localhost:8080/xfiredemo/services/</a> гэсэн замаар хандахад</p> <p>Available Services:</p> <p>&nbsp;&nbsp;&nbsp; * LookPeople [wsdl]</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Generated by XFire ( <a href="http://xfire.codehaus.org/">http://xfire.codehaus.org</a> )</p> <p>гэсэн бичлэг гарч байнх ёстой. Хэрвээ энэ гарч ирэхгүй бол та server-нхээ log-г шалгана уу.</p> <p>Ингээд Testclient class үүсгээд test client ээ command line -с болон Myeclipse-cээ Run as Java Application гэж ажиллуулна.</p> <p>public class TestClient {</p> <p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Service srvcModel = new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectServiceFactory().create(ILookPeople.class);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XFireProxyFactory factory = <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new XFireProxyFactory(XFireFactory.newInstance().getXFire());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String helloWorldURL =<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;<a href="http://localhost:8080/xfiredemo/services/LookPeople">http://localhost:8080/xfiredemo/services/LookPeople</a>&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILookPeople srvc = (ILookPeople)factory.create(srvcModel, helloWorldURL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String result = srvc.example(&quot;Hello world&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(result);<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (MalformedURLException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p> <p>}<br /> <br />Үр дүн: Hello world</p> <p>Та ажилттай web service бүтээлээ.</p> <p>&nbsp;&nbsp;&nbsp; 1. Collection дамжуулдаг<br />&nbsp;&nbsp;&nbsp; 2. Map дамжуулдаг<br />&nbsp;&nbsp;&nbsp; 3. Secure token шалгадаг&nbsp; болгьё.</p> <p>Ингээд интэрфейсээ болон Мөн implementation class аа дараах байдалтай өөрчлье.</p> <p>&nbsp;package xfire.secure.demo;</p> <p>import java.util.Collection;<br />import java.util.Map;</p> <p>//Generated by MyEclipse</p> <p>public interface ILookPeople {<br /> <br />&nbsp;&nbsp;&nbsp; public String example(String message);<br /> <br />&nbsp;&nbsp;&nbsp; public Collection getAllAddress();<br />&nbsp;&nbsp;&nbsp; public Map getUserInformation();<br />}</p> <p> </p> <p>package xfire.secure.demo;</p> <p>import java.util.ArrayList;<br />import java.util.Collection;<br />import java.util.Date;<br />import java.util.HashMap;<br />import java.util.Map;</p> <p>import xfire.secure.data.Address;<br />import xfire.secure.data.Person;</p> <p>//Generated by MyEclipse</p> <p>public class LookPeopleImpl implements ILookPeople {<br /> <br />&nbsp;&nbsp;&nbsp; private Collection addresses = null;<br />&nbsp;&nbsp;&nbsp; private Map userInfo = null;<br /> <br />&nbsp;&nbsp;&nbsp; private void init_address() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addresses = new ArrayList&lt;Address&gt;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0; i&lt; 10; i++){<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addresses.add(new Address(&quot;MN &quot; + i,&quot;UB &quot; + i, &quot;AMAR &quot; +i, &quot;ROCK &quot; + i, i ));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p> <p>&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; private void init_info(){</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfo = new HashMap();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collection users = new ArrayList();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0; i&lt; 10; i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //users.add(new Person(&quot;A &quot; +i, &quot;B&quot; +i, &quot;C&quot; + i, i, new Date()));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userInfo.put(new Person(&quot;A &quot; +i, &quot;B&quot; +i, &quot;C&quot; + i, i, new Date()), new Address(&quot;AU &quot; + i,&quot;CI &quot; + i, &quot;JOHN &quot; +i, &quot;BUILDING &quot; + i, i ));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> </p> <p><br />&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; public String example(String message) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return message;<br />&nbsp;&nbsp;&nbsp; }<br /> </p> <p>&nbsp;&nbsp;&nbsp; public Collection getAllAddress() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init_address();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return addresses;<br />&nbsp;&nbsp;&nbsp; }</p> <p>&nbsp;&nbsp;&nbsp; public Map getUserInformation() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; init_info();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return userInfo;<br />&nbsp;&nbsp;&nbsp; }<br />}</p> <p>&nbsp;Хэрвээ java 1.4 дээр ажилж байгаа бол энэхүү interface ээ заавал map хийсэн байх ёстой.</p> <p>ILookPeople interface binding -г дараах байдалтай хийлээ.</p> <p>ILookPeople.aegis.xml файлын нэр нь интерфейсын нэртэй яг адилхан мөн интерфейс байрлаж байгаа directory-т байх ёстой.</p> <p>&lt; mappings &gt;<br />&nbsp;&nbsp;&nbsp; &lt; mapping &gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt; method name=&quot;getAllAddress&quot; &gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt; return-type componentType=&quot;xfire.secure.data.Address&quot; /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/method&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&nbsp; method name=&quot;getUserInformation&quot; &gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt; return-type keyType=&quot;xfire.secure.data.Person&quot; componentType=&quot;xfire.secure.data.Address&quot; /&gt;<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt; /method &gt;<br /> <br />&nbsp;&nbsp;&nbsp; &lt; /mapping &gt;<br />&lt; /mappings &gt;<br /></p> <p>Хэрвээ та java 1.5 -c дээш хувилбар ашиглаж байгаа бол ингэх шаардлагагүй.</p> <p>Интерфейс болон implementation class дээрээ</p> <p>&nbsp;&nbsp;&nbsp; public Collection &lt; Address &gt; getAllAddress();<br />&nbsp;&nbsp;&nbsp; public Map&lt; Address, Person &gt; getUserInformation();</p> <p>&nbsp;гэж төрөлийг нь заагаад өгчхөд л ажиллана.</p> <p>Одоо webservice ээ tomcat-даа deploy хийж өгөөд</p> <p><a href="http://localhost:8080/xfiredemo/services/LookPeople?wsdl">http://localhost:8080/xfiredemo/services/LookPeople?wsdl</a> гэсэн url -р хандахад</p> <p>Websevice -н WSDL файл гарч ирнэ. WSDL = Web Service Definition Language</p> <p>Хэрвээ таны webservice deploy хийгдэхгүй байвал та ямар нэг алдаа хийсэн байна. Үүнд google найз чинь туслана. Эсвэл та энд сэтгэгдлээ үлдээнэ үү.</p> <p>&nbsp;Client -с тест хийхдээ</p> <p>public class TestClient {</p> <p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br /> <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Service srvcModel = new<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectServiceFactory().create(ILookPeople.class);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XFireProxyFactory factory = <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new XFireProxyFactory(XFireFactory.newInstance().getXFire());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String helloWorldURL =<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;<a href="http://localhost:8080/xfiredemo/services/LookPeople">http://localhost:8080/xfiredemo/services/LookPeople</a>&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ILookPeople srvc = (ILookPeople)factory.create(srvcModel, helloWorldURL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String result = srvc.example(&quot;hello world&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(result);<br /> <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Collection<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Collection test information &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collection collection = null;<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collection = srvc.getAllAddress();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO: handle exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; collection = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(collection != null){<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator iterator = collection.iterator();<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iterator.hasNext()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Address elem = (Address) iterator.next();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elem.print();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Map test information &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Map<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map map = null;<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map = srvc.getUserInformation();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO: handle exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(map != null){<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set entries = map.entrySet();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator iterator = entries != null ? entries.iterator() : null;<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(iterator != null){<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (iterator.hasNext()) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map.Entry entry = (Map.Entry) iterator.next();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Person) entry.getKey()).print();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Address) entry.getValue()).print();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (MalformedURLException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}</p> <p>&nbsp;Үргэлжлэл бий ... ;) </p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5421Sat, 15 Dec 2007 17:48:00 ULATWeb service #1http://opennet.blog.gogo.mn/read/entry5419<p dir="ltr" style="margin-right: 0px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Зарим үед өөрийн системийн өгөгдлийг өөр&nbsp;бусад системд хэрэглэх шаардлага гардаг. Үүнийг хөнгөвчлөх хялбар, хурдан арга бол webservice юм. Webservice-г ашигласнаар та еерийн системийн егегдлийг бусад алслагдсан системүүдтэй хуваалцах боломжтой болох юм. Зарим үед Bridge service гэж ч ярьдаг.&nbsp;Webservice-н тодорхойлолт болон&nbsp;archetecture-н талаар wikipedia болон бусад сайтуудаас&nbsp;олох боломжтой.&nbsp;Тодорхойлолт бичиг баримтийн талаар ингэсгээд л орхиё залхуурсандаа биш&nbsp;зөндөө олон материал байгаа учраас нуршаад яахав дээ.&nbsp;Webservice-г хөгжүүлдэг framework-ууд нэлээд олон байдаг.&nbsp; FrameWork-н жагсаалт-г эндээс харж болно. <a href="http://en.wikipedia.org/wiki/List_of_Web_service_Frameworks">http://en.wikipedia.org/wiki/List_of_Web_service_Frameworks</a></p> <p>Webservice-ээ ажлуулж&nbsp;егегдлее&nbsp;share хийхдээ миний ашиглаж байсан арга бол <strong><a title="Xfire" href="http://xfire.codehaus.org/" target="_blank">Xfire</a></strong>.&nbsp;Java хэлний хувьд бол webservice бүтээх хамгийн сайн арга бол энэ гэж бодож байна санал зөрөх хүн&nbsp;байхийг үгүйсгэхгүй ээ.</p> <p>Одоо бүгдээрээ бага зэргийн хамгаалалттай webservice бүтээцгээе. Үүний тулд танд дараах зүйлс байх ёстой </p> <ol> <li>Java <a href="http://java.sun.com/javase/downloads/index.jsp">Jdk 1.4</a> болон түүнээс дээш хувилбар</li> <li><a href="http://www.myeclipseide.com/module-htmlpages-display-pid-4.html">MyEclipse</a></li> <li><a href="http://tomcat.apache.org/"></a><a href="http://tomcat.apache.org/">Tomcat </a><br /></li> </ol> <p>&nbsp;Web service-г үүсгэхэд их хүндрэлтэй байдаг байсан. Харин MyEclipse Xfire-г дэмждэг болсноор хялбар болсон. </p> <p>Ингээд Myeclipse - нхээ цэснээс File -&gt; New -&gt; Web Service Project гээд </p><img vspace="0" hspace="0" border="0" align="bottom" src="http://opennet.blog.gogo.mn/resource/xfire/xfire%201.JPG" /><br /> <p>гээд <strong>Finish.</strong> <br /></p> <p>Ингээд java class нэмье. </p> <p><font size="2" face="courier new,courier,monospace"><strong>package xfire.secure.data;</strong></font></p> <p><font size="2" face="courier new,courier,monospace">public class Address {&nbsp;</font></p> <p><font size="2" face="courier new,courier,monospace">&nbsp;&nbsp;&nbsp; private String state;<br />&nbsp;&nbsp;&nbsp; private String city;<br />&nbsp;&nbsp;&nbsp; private String street;<br />&nbsp;&nbsp;&nbsp; private String building;</font></p> <p><font size="2" face="courier new,courier,monospace">&nbsp;&nbsp;&nbsp;&nbsp; public String getState() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return state;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setState(String state) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.state = state;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public String getCity() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return city;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setCity(String city) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.city = city;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public String getStreet() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return street;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setStreet(String street) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.street = street;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public String getBuilding() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return building;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setBuilding(String building) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.building = building;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public int getNum() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return num;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setNum(int num) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.num = num;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void print() {<br /> <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;State : &quot; + state);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;City : &quot; + city);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Street : &quot; + street);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Building : &quot; + building);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Num : &quot; + num);<br /><br />&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; public Address(String state, String city, String street, String building, int num) {<br /> <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated constructor stub<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.state = state;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.city = city;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.street = street;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.building = building;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.num = num;<br /> <br /> <br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public Address() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated constructor stub<br />&nbsp;&nbsp;&nbsp; }<br /><br /></font></p> <p><font size="2" face="courier new,courier,monospace">&nbsp;}</font></p> <p><font size="2" face="courier new,courier,monospace"><strong>package xfire.secure.data;&nbsp;</strong></font></p> <p><font size="2" face="courier new,courier,monospace">public class Person {<br /><br />&nbsp;&nbsp;&nbsp; private String fname;<br />&nbsp;&nbsp;&nbsp; private String lname;<br />&nbsp;&nbsp;&nbsp; private String user;<br />&nbsp;&nbsp;&nbsp; private int age;<br />&nbsp;&nbsp;&nbsp; private Date birthDay;</font></p> <p><font size="2" face="courier new,courier,monospace">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public String getFname() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return fname;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public void setFname(String fname) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.fname = fname;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public String getLname() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return lname;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public void setLname(String lname) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.lname = lname;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public String getUser() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return user;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public void setUser(String user) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.user = user;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public int getAge() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return age;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public void setAge(int age) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.age = age;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public Date getBirthDay() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return birthDay;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public void setBirthDay(Date birthDay) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.birthDay = birthDay;<br />&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; public void print(){<br /> <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;First name : &quot; + fname);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Last name : &quot; + lname);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;User name : &quot; + user);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Age : &quot; + age);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Date : &quot; + birthDay);<br />&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; public Person(String fname, String lname, String user, int age, Date date) {<br /> <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.fname = fname;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.lname = lname;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.user = user;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.age = age;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.birthDay = date;<br />&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; public Person() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated constructor stub<br />&nbsp;&nbsp;&nbsp; }<br /></font></p> <p><font size="2" face="courier new,courier,monospace">}</font><br /></p> <p>Ингээд File-New-Other-&gt; MyEclipse -&gt; Web Services -&gt; Web Service </p> <p><img vspace="0" hspace="0" border="0" align="bottom" src="http://opennet.blog.gogo.mn/resource/xfire/xfire%202.JPG" /><br /></p> <p><img vspace="0" hspace="0" border="0" align="bottom" src="http://opennet.blog.gogo.mn/resource/xfire/xfire%203.JPG" /><br /></p> <p> <img vspace="0" hspace="0" border="0" align="bottom" src="http://opennet.blog.gogo.mn/resource/xfire/xfire%204.JPG" /><br /></p> <p> </p> <p>&nbsp;Ингээд та web service үүсгэлээ. Үргэлжлэл бий.. ;)</p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5419Sat, 15 Dec 2007 14:56:00 ULATRuby on Rails #3http://opennet.blog.gogo.mn/read/entry5811<p><em> Ruby on rails</em> дээр <em>controller</em>, <em>model </em>үүсгэх ,<em> html form </em>- тэй ажиллах талаар бичье. Энэ бичлэгээр <em>ROR </em>- ийн танилцуулах бичлэгийг өндөрлөе гэж бодож байна. Үүнээс хойш <em>Ruby on Rails</em> - ийн тухай биш түүн дээрх шийдэлүүд, тулгарч болох асуудлуудын талаар буюу How to .. (Хэрхэн, яаж) маягийн зүйлс бичигдэх болно. ( <em>Oracle integration</em> , <em>Oracle and ActiveRecord</em>,&nbsp; <em>Captcha, deploying, rails application clustering ..</em> гэх мэт.)</p> <p><em>MVC</em> -ийн тухай бичвэл бүр утгаа алдана, тийм болхоор шууд <em>rails </em>дээр хэрхэн хэрэгжүүлэх вэ? гэдэгийг л бичэе.</p> <p><em> <strong>Controller </strong></em><strong>үүсгэх: </strong><br />Rails framework нь өөрт хэрэгтэй скриптүүдээр бүрэн хангагдсан байдаг.<br />Прожектийн хавтас дотор байхыг анхаарна уу? <br /><strong><font size="2" face="courier new,courier,monospace">&nbsp;&nbsp;&nbsp; ruby script\generate controller controller_name</font></strong><br />жишээ:<br /><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/r3.jpg" /><br /><em>&nbsp;Controller </em>үүсгэхэд&nbsp; <em>Controller Class, Helper Class</em>, <em>View directory</em> хамт үүсдэг. <em>Controller </em>руу хандах даа. <em>http://yourip:port/controller</em> ингэж хандана. <em>Controller </em>- н үндсэн буюу шууд дуудагдах <em>action </em>бол <em>index </em>, юу вэ гэдэгийг нь ойлгуулахын тулд шууд жишээ:<br /><font size="2" face="courier new,courier,monospace">&nbsp;&nbsp;&nbsp; def index<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; render_text &quot;hi this is index action&quot;<br />&nbsp;&nbsp;&nbsp; end</font><br />Ингээд эхний <em>action </em>маань болчлоо. Гэхдээ энэ маань <em>html </em>биш<em> text/blank</em> хуудас боллоо гэдэгийг нь харж байна. <em>Rails </em>- ийн <em>view template</em> файл нь <em><strong>.rhtml</strong></em> өргөтгөлтэй байдаг. Тодорхойлж өгсөн <em>action</em>-даа <em>render_text </em>хийх юмуу эсвэл харгалзах <em>view template</em> - г нь үүсгэж өгөх хэрэгтэй.<br />Хэрэв тухайн action -даа <em>Template </em>тодорхойлж өгсөн бол <em>render </em>- н төрлийн функц ашиглаж болохгүй. Жишээ:<br /><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/r31.jpg" /> </p> <p><strong>index.rhtml&nbsp;&nbsp;</strong></p> <p><em>&nbsp;Hi this is server side variable &quot;&lt;%=@serverSideVar %&gt;&quot;</em><br /></p> <p>Энэ user <em>controller </em>- г ашиглаад <em>user </em>- тэй холбоотой бүх <em>action </em>- нуудыг үүсгээд явж болно. <br /></p> <p><em><strong>Model:</strong></em><br /><em>Model </em>үүсгэхдээ мөн <em>generate script -</em> г ашиглана. Гэхдээ модель үүсгэхээсээ өмнө <em>database </em>тохиргоогоо хийсэн байх хэрэгтэй. Ингэхдээ <em>config/database.yml</em> файлд тохиргоогоо хэвийн дагуу бичиж өгнө. Энэ файлд <em>development, production , test</em> гэсэн гурван хэвд тохиргоо бичихээр байдаг. <em>test mode</em>-р би огт юм хийж үзээгүй, сайн ч ойлгоогүй тийм болхоор нөгөө хоёрынх нь тухайд л бичье. <em>development </em>горимд <em>rails </em>- н <em>class cache util</em> нь ажилладаггүй, кодонд өөгчилөлт хийгээд шууд өөрчилөгддөг, харин <em>production </em>горимд ажиллуулахад <em>rails cache module</em> ажилладаг учираас өөрчилөлт хийхдээ заавал серверүүдийг унтрааж асааж байж өөрчилөлт нь ордог. Үндсэн асуудалаасаа нилээд гажчихлаа.<br /><font size="2" face="courier new,courier,monospace">development:<br />&nbsp; adapter: mysql<br />&nbsp; database: databasename<br />&nbsp; username: username<br />&nbsp; password: password<br />&nbsp; host: host</font><br />Энэ хэв дээр тохиргоо хийхэд л хангалттай , <em>mysql </em>- ийн хувьд.<br /><em>Model </em>үүсгэхээсээ өмнө харгалзах <em>database table</em> - г үүсгэсэн байх хэрэгтэй. <em>Model</em>-н нэр <em>table</em>-н нэрний холбоо нь <em>tablename = modelname+'s'</em>&nbsp; ийм логиктой. жишээ нь: user гэдэг модель үүсгэхдээ <em>database дээрээ users </em>гэсэн нэртэй <em>table </em>үүсэгсэн байх хэрэгтэй. Заавал албагүй л дээ гэхдээ ингээд ойлгочихвол их эвтэйхэн байх болно. :) заавал гээд бодчихоё :P. Одоо моделоо үүсгэе. </p> <p><strong><font size="2" face="courier new,courier,monospace">ruby script\generate model user</font></strong></p> <p>Ингээд л&nbsp; үүссэн класс нь table - г төлөөлөөд явчихна. Жишээ:<em> users table</em> маань <em>id</em>, <em>username</em>,&nbsp; <em>password </em>гэсэн <em>field</em>-үүдтэй гээд бодъё. </p> <p><em>Insert </em>:<br /><font size="2" face="courier new,courier,monospace">usr = User.new<br />usr.username = &quot;delgerdalai&quot;<br />usr.password = &quot;delgerdalai&quot;<br />usr.save</font></p> <p>Ингээд боллоо, гоёмсог байгаа биз.</p> <p><em>Хайлт хийхдээ.</em><br /><font size="2" face="courier new,courier,monospace">usr = User.find_by_username(&quot;delgerdalai&quot;) // логик нь бол find_by_fieldname</font><br />бүх талбарын хувьд <em>find method </em>тодорхойлогдсон байх жишээтэй. Таатай зүйлүүд маш олон.<br /><font size="2" face="courier new,courier,monospace">result = User.find_by_sql(&quot;select * from users where username like '?%'&quot;, &quot;delger&quot;)</font><br /></p> <p>Өөрснөө туршаад үзвэл илүү их ойлгох бизээ. <em>Ruby On Rails</em> - г хөлөглөцгөөе. </p> <p>С.Дэлгэрдалай<br /></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5811Thu, 13 Dec 2007 15:46:00 ULATEJB 3.0 programminghttp://opennet.blog.gogo.mn/read/entry5317<p><font size="2" face="tahoma,arial,helvetica,sans-serif"><strong>Project : SimpleEJB</strong></font></p> <p><font size="2" color="#0003ff"><strong><em>&nbsp;persistence.xml</em></strong></font></p> <p><font size="2" color="#0003ff"><em><br /><persistence version="1.0" xsi:schemalocation="http://java.sun.com/xml/ns/persistence&lt;br /&gt;&nbsp;&nbsp;&nbsp; http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence"><br /><br /> <persistence-unit transaction-type="JTA" name="simplePU"><br /> <provider>org.hibernate.ejb.HibernatePersistence</provider><br /> <jta-data-source>java:/simpleDS</jta-data-source><br /><br /> <class>com.mdb.simple.entity.SimpleEntity</class><br /> <br /> <properties><br /> <property value="update" name="hibernate.hbm2ddl.auto"><br /> <property value="3" name="hibernate.max_fetch_depth"><br /> <property value="4" name="hibernate.default_batch_fetch_size"><br /> </property><br /> </property><br /><br /></property></properties></persistence-unit></persistence></em></font><font size="2"> <br /></font><font size="2" color="#0003ff"><em><strong>mysql.ds</strong></em></font><font size="2"> </font></p> <p><font size="2" color="#0003ff"><em></em></font></p> <p><font size="2" color="#0003ff"><em><datasources><br /> <local-tx-datasource><br /> <jndi-name>aiaxmainDS</jndi-name><br /> <connection-url>jdbc:mysql://127.0.0.1:3306/aiaxdbase</connection-url><br /> <driver-class>com.mysql.jdbc.Driver</driver-class><br /> <user-name>root</user-name><br /> <password>pass</password><br /><br /> <connection-property name="characterEncoding">utf8</connection-property><br /> <connection-property name="connectionCollation">utf8_general_ci</connection-property><br /> <connection-property name="useUnicode">true</connection-property><br /><br /> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name><br /> <metadata><br /> <type-mapping>mySQL</type-mapping><br /> </metadata><br /> </local-tx-datasource><br /></datasources></em></font><font size="2"> <br /></font></p> <p><font size="2" color="#0003ff"><em><strong>SimpleSettings.java&nbsp; /* энэ жишээнд шаардлагатай байгаа зарит нэг тогтмолууд */<br /></strong></em></font></p> <p><font size="2" color="#0003ff"><em>package com.mdb.simple.settings;<br /><br />/**<br />&nbsp;* @author Byambasuren.MD<br />&nbsp;*/<br /><br />public class SimpleSettings {<br /><br />&nbsp;&nbsp;&nbsp; public static String SAVE_PERSIST = &quot;PERSIST&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String SAVE_MERGE = &quot;MERGE&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String SAVE_REMOVE = &quot;REMOVE&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String SAVE_REFRESH = &quot;REFRESH&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String SAVE_NONE = &quot;NONE&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static Integer PAGER_OFFSET = 0;<br /><br />&nbsp;&nbsp;&nbsp; public static Integer PAGER_LIMIT = 20;<br /><br />&nbsp;&nbsp;&nbsp; public static String PAGER_ACTION_NONE = &quot;none&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String PAGER_ACTION_FIRST = &quot;first&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String PAGER_ACTION_PREVIOS = &quot;previos&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String PAGER_ACTION_NEXT = &quot;next&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String PAGER_ACTION_LAST = &quot;last&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String RESULTS_VIEW_GRID = &quot;GRID&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public static String RESULTS_VIEW_LIST = &quot;LIST&quot;;<br /><br />}</em></font><font size="2"><br /> </font></p> <p><font size="2"><strong><font color="#0003ff"><em>SimpleCacher.java&nbsp; /* зарим нэг бичлэгүүдийг байнга qurey - дээд байхгүйн тулд санах ойд байршуулбал performance - д сайн юм уу л гэж, заавал датабээс байх шаардлагагүй XML&nbsp; ч байсан болно, бие кодыг нь юу cache лахаасаа хамааруулаад өөрчилөөрэй */</em></font></strong><br /></font></p> <p><font size="2" color="#0003ff"><em>package com.mdb.simple.cache;<br /><br />/**<br />&nbsp;* @author Byambasuren.MD<br />&nbsp;*/<br /><br />public class SimpleCacher {<br /><br />&nbsp;&nbsp;&nbsp; private static SimpleCacher instance;<br /><br />&nbsp;&nbsp;&nbsp; public static void Instance() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; instance = new SimpleCacher();<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public static SimpleCacher getInstance() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return instance != null ? instance : (instance = new SimpleCacher());<br />&nbsp;&nbsp;&nbsp; }<br /><br />}</em></font><font size="2"> <br /></font></p> <p><font size="2"><strong> <font color="#0003ff"><em>PagerDTO.java&nbsp; /* ViewHelper. энэ паттерн нь ejb 3.0 болон JSF&nbsp; framework - д зохимжгүй. баазаас авах бичлэгүүдийг хуудаслах зорилготой. Шууд jsf дээрээс дүрэмүүдийг нь дуудаад дуудаад ... */<br /></em></font></strong></font></p> <p><font size="2" color="#0003ff"><em>package com.mdb.simple.dto;<br /><br />import com.mdb.simple.settings.SimpleSettings;<br /><br />/**<br />&nbsp;* @author Byambasuren.MD<br />&nbsp;*/<br /><br />public class PagerDTO {<br /><br />&nbsp;&nbsp;&nbsp; protected Integer offset;<br /><br />&nbsp;&nbsp;&nbsp; protected Integer limit;<br /><br />&nbsp;&nbsp;&nbsp; private Integer currPage, pageSize, resultSize = 0;<br /><br />&nbsp;&nbsp;&nbsp; private String actionPage;<br /><br />&nbsp;&nbsp;&nbsp; private String ordr;<br /><br />&nbsp;&nbsp;&nbsp; private boolean sfirst = false, sprevios = false, snext = false, slast = false;<br /><br />&nbsp;&nbsp;&nbsp; public PagerDTO() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super();<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.actionPage = SimpleSettings.PAGER_ACTION_NONE;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.currPage = 1;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.pageSize = 0;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public PagerDTO(Integer offset, Integer limit) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.offset = offset;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.limit = limit;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.actionPage = SimpleSettings.PAGER_ACTION_NONE;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.currPage = 1;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.pageSize = 0;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; /* actions */<br /><br />&nbsp;&nbsp;&nbsp; public void dosetResultSize(Integer size) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.resultSize = size;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.pageSize = this.resultSize / this.getLimit();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.pageSize = this.pageSize + ((this.resultSize % this.getLimit()) &gt; 0 ? 1 : 0);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.first();<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void dosetPageAction() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (this.actionPage.equals(SimpleSettings.PAGER_ACTION_FIRST)) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.first();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (this.actionPage.equals(SimpleSettings.PAGER_ACTION_PREVIOS)) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.previos();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (this.actionPage.equals(SimpleSettings.PAGER_ACTION_NEXT)) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.next();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (this.actionPage.equals(SimpleSettings.PAGER_ACTION_LAST)) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.last();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void next() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.currPage = this.currPage + 1;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (this.currPage == this.pageSize) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.last();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sfirst = true;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sprevios = true;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.setOffset((this.currPage - 1) * this.limit);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void previos() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.currPage = this.currPage - 1;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (this.currPage == 1) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.first();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.snext = true;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.slast = true;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.setOffset((this.currPage - 1) * this.limit);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void first() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.currPage = 1;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sfirst = false;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sprevios = false;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.snext = false;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.slast = false;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (this.pageSize &gt; 1) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.snext = true;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.slast = true;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.setOffset((this.currPage - 1) * this.limit);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void last() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.currPage = this.pageSize;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sfirst = false;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sprevios = false;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.snext = false;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.slast = false;<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (this.pageSize &gt; 1) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sfirst = true;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.sprevios = true;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.setOffset((this.currPage - 1) * this.limit);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; /*&nbsp; */<br /><br />&nbsp;&nbsp;&nbsp; public boolean getIsResults() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return this.resultSize &gt; 0 ? true : false;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; /* getters setters */<br /><br />&nbsp;&nbsp;&nbsp; public String getActionPage() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return actionPage;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setActionPage(String actionPage) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.actionPage = actionPage;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public Integer getCurrPage() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return currPage;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public Integer getPageSize() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return pageSize;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public String getOrdr() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ordr;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setOrdr(String ordr) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.ordr = ordr;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public boolean isSfirst() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return sfirst;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public boolean isSprevios() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return sprevios;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public boolean isSnext() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return snext;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public boolean isSlast() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return slast;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public Integer getLimit() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return limit;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setLimit(Integer limit) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.limit = limit;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public Integer getOffset() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return offset;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setOffset(Integer offset) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.offset = offset;<br />&nbsp;&nbsp;&nbsp; }<br />}</em></font><font size="2"><br /> </font></p> <p><font size="2"><strong> <font color="#0003ff"><em>SimpleEntity.java&nbsp; /* Entity bean. Entity bean - аа Value Object&nbsp; болгож ашиглах гэж байгаа бол Entity bean дээр олон юм бичих хэрэггүй. Уул нь @NamedQuery ашиглавал performance&nbsp; - д сайн гэдэг юм байна лээ. Миний хувьд бодож байгаад VO шинээр үүсгэхгүйгээр шийдсэн */ <br /></em></font></strong></font></p> <p><font size="2"><br /></font><font size="2" color="#0003ff"><em>package com.mdb.simple.entity;<br /><br />import java.util.Date;<br /><br />import javax.persistence.Column;<br />import javax.persistence.Entity;<br />import javax.persistence.GeneratedValue;<br />import javax.persistence.GenerationType;<br />import javax.persistence.Id;<br />import javax.persistence.Table;<br /><br />/**<br />&nbsp;* @author Byambasuren.MD<br />&nbsp;*/<br /><br />@Entity<br />@Table(name = &quot;simple_simple&quot;)<br />public class SimpleEntity {<br /><br />&nbsp;&nbsp;&nbsp; @Id<br />&nbsp;&nbsp;&nbsp; @GeneratedValue(strategy = GenerationType.IDENTITY)<br />&nbsp;&nbsp;&nbsp; private Long id;<br /><br />&nbsp;&nbsp;&nbsp; @Column(length = 200)<br />&nbsp;&nbsp;&nbsp; private String name;<br /><br />&nbsp;&nbsp;&nbsp; @Column(length = 2000)<br />&nbsp;&nbsp;&nbsp; private String value;<br /><br />&nbsp;&nbsp;&nbsp; private Date regDate;<br /> <br />&nbsp;&nbsp;&nbsp; public SimpleEntity() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.regDate = new Date();<br />&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; /* managed getters setters */<br /> <br />&nbsp;&nbsp;&nbsp; public String getMDate() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /* code */<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return &quot;&quot;;<br />&nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; /* getters setters */<br /><br />&nbsp;&nbsp;&nbsp; public Long getId() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return id;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setId(Long id) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.id = id;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public String getName() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return name;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setName(String name) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.name = name;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public String getValue() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return value;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setValue(String value) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.value = value;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public Date getRegDate() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return regDate;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void setRegDate(Date regDate) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.regDate = regDate;<br />&nbsp;&nbsp;&nbsp; }<br /><br />}</em></font><font size="2"><br /> </font></p> <p><font size="2"><strong><font color="#0003ff"><em><font face="tahoma,arial,helvetica,sans-serif">SimpleRService.java</font></em></font></strong></font></p> <p><font size="2" color="#0003ff"><em><font face="tahoma,arial,helvetica,sans-serif">package com.mdb.simple.business.service;<br /><br />import java.util.Collection;<br /><br />import javax.ejb.Local;<br /><br />import com.mdb.simple.dto.PagerDTO;<br />import com.mdb.simple.entity.SimpleEntity;<br /><br />/**<br />&nbsp;* @author Byambasuren.MD<br />&nbsp;*/<br /><br />@Local<br />public interface SimpleRService {<br /> <br />&nbsp;&nbsp;&nbsp; public final static String JNDI = &quot;SimpleRService&quot;;<br /> <br />&nbsp;&nbsp;&nbsp; public Collection<simpleentity> getSimples(PagerDTO pager);<br /> <br />&nbsp;&nbsp;&nbsp; public SimpleEntity getSimple(Long id);<br /><br />}</simpleentity></font></em></font></p> <p><font size="2" color="#0003ff"><strong><em><font face="tahoma,arial,helvetica,sans-serif">SimpleService.java&nbsp; </font></em></strong></font></p> <p><font size="2" color="#0003ff"><strong><em><font face="tahoma,arial,helvetica,sans-serif">/* интерфейс класс. би дүр эсвэл царай ч гэж нэрлэдэг. Бизнэс үйлдлүүдийн дүр(царай) */&nbsp; миний хувьд үйлдүүдийг read only болон writable гэж 2 ангилаад 2 өөр session bean - дээр бичдэг болсон. яагаад вэ гэвэл зөндөө шалтгаан байгаа. хамгийн гол нь юу вэ гэвэл performance болон найдвартай ажиллагааг сайжруулахын тулд. ReadOnly үйлдлүүдийг CMP. Writable үйлдлүүдийг BMP. Хүмүүс гайхаж магадгүй BMP ашиглачаад юуных нь найдвартай гэж. гэхдээ BMP алдаа гарах магадлал өндөр ч тэр нь делелопероос л хамаарна. хийж чадвал гүйцэтгэл маш сайн. Мөн readonly үйлдлүүдийг EJB Container - аас гадна програмчилахыг оролдов. энэ жишээн дээр ч гэсэн алдаа байгаа. session.settimeout() - ийг оруулаагүй байна.<br /></font></em></strong></font></p> <p><font size="2"><u><em><strong>&nbsp;Performance - ийн талаар <a href="http://java.sun.com/developer/technicalArticles/ebeans/ejb_30/" title="Writing Performant EJB Beans in the Java EE 5 Platform">http://java.sun.com/developer/technicalArticles/ebeans/ejb_30/ </a>- аас сайн үзнэ үү</strong></em></u><br /></font></p> <p><font size="2" color="#0003ff"><strong><em><font face="tahoma,arial,helvetica,sans-serif"><br /> </font></em></strong></font></p> <p><font size="2"><br /></font><font size="2" color="#0003ff"><em><font face="tahoma,arial,helvetica,sans-serif">package com.mdb.simple.business.service;<br /><br />import javax.ejb.Local;<br /><br />import com.mdb.simple.business.exception.BusinessException;<br />import com.mdb.simple.entity.SimpleEntity;<br /><br />/**<br />&nbsp;* @author Byambasuren.MD<br />&nbsp;*/<br /><br />@Local<br />public interface SimpleService {<br /><br />&nbsp;&nbsp;&nbsp; public final static String JNDI = &quot;SimpleService&quot;;<br /><br />&nbsp;&nbsp;&nbsp; public SimpleEntity saveMember(SimpleEntity member, String smode) throws BusinessException;<br /><br />}</font></em></font></p> <p><font size="2"><strong><font color="#0003ff"><em><font face="tahoma,arial,helvetica,sans-serif">SimpleRServiceImpl.java</font></em></font></strong></font></p> <p><font size="2" color="#0003ff"><em><font face="tahoma,arial,helvetica,sans-serif">package com.mdb.simple.business.service.impl;<br /><br />import java.util.Collection;<br /><br />import javax.annotation.PostConstruct;<br />import javax.annotation.PreDestroy;<br />import javax.ejb.Stateless;<br />import javax.persistence.EntityManager;<br />import javax.persistence.EntityManagerFactory;<br />import javax.persistence.PersistenceUnit;<br />import javax.persistence.Query;<br /><br />import com.mdb.simple.business.service.SimpleRService;<br />import com.mdb.simple.business.service.SimpleService;<br />import com.mdb.simple.dto.PagerDTO;<br />import com.mdb.simple.entity.SimpleEntity;<br />import com.mdb.simple.util.log.Logger;<br /><br />/**<br />&nbsp;* @author Byambasuren.MD<br />&nbsp;*/<br /><br />@Stateless(name = SimpleRService.JNDI)<br />public class SimpleRServiceImpl implements SimpleRService {<br /><br />&nbsp;&nbsp;&nbsp; @PersistenceUnit(unitName = &quot;simplePU&quot;)<br />&nbsp;&nbsp;&nbsp; private EntityManagerFactory emf;<br /><br />&nbsp;&nbsp;&nbsp; @PostConstruct<br />&nbsp;&nbsp;&nbsp; public void init() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.log(&quot;[MD][&quot; + SimpleService.JNDI + &quot;][INITIALIZING]&quot;);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; @PreDestroy<br />&nbsp;&nbsp;&nbsp; public void destroy() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;[MD][&quot; + SimpleService.JNDI + &quot;][DESTROYING]&quot;);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; @SuppressWarnings(&quot;unchecked&quot;)<br />&nbsp;&nbsp;&nbsp; public Collection<simpleentity> getSimples(PagerDTO pager) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EntityManager em = this.emf.createEntityManager();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Query qr = em.createQuery(&quot;FROM SimpleEntity AS A ORDER BY &quot; + (pager != null ? pager.getOrdr() : &quot;regDate&quot;));<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (pager != null) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; qr.setFirstResult(pager.getOffset());<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; qr.setMaxResults(pager.getLimit());<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Collection<simpleentity> results = qr.getResultList();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; em.close();<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return results;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public SimpleEntity getSimple(Long id) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EntityManager em = this.emf.createEntityManager();<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SimpleEntity result = em.find(SimpleEntity.class, id);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; em.close();<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return result;<br />&nbsp;&nbsp;&nbsp; }<br />}</simpleentity></simpleentity></font></em></font></p> <p><font size="2"> <strong><font face="tahoma,arial,helvetica,sans-serif"><font color="#0003ff"><em>SimpleServiceImpl .java</em></font></font></strong><br /><br /></font><font size="2" face="tahoma,arial,helvetica,sans-serif"><font color="#0003ff"><em>package com.mdb.simple.business.service.impl;<br /><br />import javax.annotation.PostConstruct;<br />import javax.annotation.PreDestroy;<br />import javax.annotation.Resource;<br />import javax.ejb.Stateless;<br />import javax.ejb.TransactionManagement;<br />import javax.ejb.TransactionManagementType;<br />import javax.persistence.EntityManager;<br />import javax.persistence.EntityManagerFactory;<br />import javax.persistence.PersistenceUnit;<br />import javax.transaction.UserTransaction;<br /><br />import com.mdb.simple.business.exception.BusinessException;<br />import com.mdb.simple.business.service.SimpleService;<br />import com.mdb.simple.entity.SimpleEntity;<br />import com.mdb.simple.settings.SimpleSettings;<br />import com.mdb.simple.util.log.Logger;<br /><br />/**<br />&nbsp;* @author Byambasuren.MD<br />&nbsp;*/<br /><br />@Stateless(name = SimpleService.JNDI)<br />@TransactionManagement(TransactionManagementType.BEAN)<br />public class SimpleServiceImpl implements SimpleService {<br /><br />&nbsp;&nbsp;&nbsp; @PersistenceUnit(unitName = &quot;simplePU&quot;)<br />&nbsp;&nbsp;&nbsp; private EntityManagerFactory emf;<br /><br />&nbsp;&nbsp;&nbsp; @Resource<br />&nbsp;&nbsp;&nbsp; UserTransaction userTx;<br /><br />&nbsp;&nbsp;&nbsp; @PostConstruct<br />&nbsp;&nbsp;&nbsp; public void init() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.log(&quot;[MD][&quot; + SimpleService.JNDI + &quot;][INITIALIZING]&quot;);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; @PreDestroy<br />&nbsp;&nbsp;&nbsp; public void destroy() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;[MD][&quot; + SimpleService.JNDI + &quot;][DESTROYING]&quot;);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public SimpleEntity saveMember(SimpleEntity member, String smode) throws BusinessException {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EntityManager em = emf.createEntityManager();<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.userTx.begin();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; em.joinTransaction();<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (smode.equals(SimpleSettings.SAVE_PERSIST)) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //em.merge(object); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /&nbsp;&nbsp; * ЭНД ХЭД ХЭДЭН ДАРААЛСАН ҮЙЛДЛҮҮД БАЙЖ БОЛНО */<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; em.persist(member);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (smode.equals(SimpleSettings.SAVE_MERGE))<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; em.merge(member);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else if (smode.equals(SimpleSettings.SAVE_REMOVE))<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; em.remove(member);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else if (smode.equals(SimpleSettings.SAVE_REFRESH))<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; em.refresh(member);<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.userTx.commit();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception exc) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.log(&quot;[AIAX][&quot; + SimpleService.JNDI + &quot;][ERROR][UNSUCCESSFUL. &quot; + smode + &quot; MEMBER]&quot;);<br /> <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.userTx.rollback();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception e) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Logger.log(&quot;[MD][&quot; + SimpleService.JNDI + &quot;][ERROR][UNSUCCESSFUL. ROLLBACK USERTRANSACTION]&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new BusinessException(exc.getMessage());<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } finally {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; em.close();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br /> <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return member;<br />&nbsp;&nbsp;&nbsp; }<br />}</em></font></font></p> <p><font size="2"> <em><strong><font color="#0003ff">/* SERVICELOCATOR - ийн талаар далайгийн блогоос сайн ойлгосон байх.&nbsp; */</font> </strong></em><br /></font></p> <p><font size="2"> <strong><font face="tahoma,arial,helvetica,sans-serif"><font color="#0003ff"><em>ServiceLocator.java</em></font></font></strong></font></p> <p><font size="2" face="tahoma,arial,helvetica,sans-serif"><font color="#0003ff"><em>package com.mdb.simple.util.servicelocator;<br /><br />import java.util.Hashtable;<br /><br />import javax.naming.InitialContext;<br />import javax.naming.NamingException;<br />import javax.sql.DataSource;<br /><br />import com.mdb.simple.util.servicelocator.exception.ServiceLocatorException;<br /><br />/**<br />&nbsp;* @author Byambasuren.M<br />&nbsp;*/<br /><br />public class ServiceLocator {<br /><br />&nbsp;&nbsp;&nbsp; private static ServiceLocator serviceLocator = new ServiceLocator();<br /><br />&nbsp;&nbsp;&nbsp; private Hashtable<string,> cache;<br /><br />&nbsp;&nbsp;&nbsp; private InitialContext context;<br /><br />&nbsp;&nbsp;&nbsp; private ServiceLocator() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cache = new Hashtable<string,>();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; context = new InitialContext();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Exception in the constructor of ServiceLocator &quot; + &quot;class : &quot; + ex.toString());<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public static ServiceLocator getInstance() {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return serviceLocator;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public Object getService(String jndiName) throws ServiceLocatorException {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br /><br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!cache.containsKey(jndiName)) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cache.put(jndiName, context.lookup(jndiName));<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (NamingException ex) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new ServiceLocatorException(&quot;Exception thrown from getService &quot; + &quot;method of ServiceLocator class : &quot; + ex.getMessage());<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (SecurityException ex) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new ServiceLocatorException(&quot;Exception thrown from from getService &quot; + &quot;method of ServiceLocator class : &quot; + ex.getMessage());<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return cache.get(jndiName);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public DataSource getDataSource(String dataSourceName) throws ServiceLocatorException {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DataSource dataSource = null;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; dataSource = (DataSource) context.lookup(dataSourceName);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (NamingException nex) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new ServiceLocatorException(nex);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Exception ex) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new ServiceLocatorException(ex);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return dataSource;<br />&nbsp;&nbsp;&nbsp; }<br />}</string,></string,></em></font><br /></font></p> <p><font size="2" face="tahoma,arial,helvetica,sans-serif">илүү чанартай дэлгэрэнгүй сайн жишээ олж үзеэ гэвэл PETSTOREDEMO гээд гүүглэ - ээс хайвал. sun - ийн блупринтийн жишээ олдоно.</font></p> <p><font size="2"><em><strong><font> <p> <font color="#0003ff">try {</font></p></font></strong></em></font></p> <p><font size="2" color="#0003ff"><em><strong><font face="tahoma,arial,helvetica,sans-serif">SimpleEntity simple = new SimpleEntity();</font></strong></em></font></p> <p><font size="2" color="#0003ff"><em><strong><font face="tahoma,arial,helvetica,sans-serif">simple.setName(&quot;hello&quot;);</font></strong></em></font></p> <p><font size="2" color="#0003ff"><em><strong><font face="tahoma,arial,helvetica,sans-serif">simple.setValue(&quot;world&quot;);</font></strong></em></font></p> <p><font size="2" color="#0003ff"><em><strong><font face="tahoma,arial,helvetica,sans-serif">SimpleService service = (SimpleService)ServiceLocator.getInstance().getService(SimpleService.JNDI));</font></strong></em></font></p> <p><font size="2" color="#0003ff"><em><strong><font face="tahoma,arial,helvetica,sans-serif">service.saveSimple(simple, SimpleSettings.SAVE_PERSIST);</font></strong></em></font></p> <p><font size="2" color="#0003ff"><em><strong><font face="tahoma,arial,helvetica,sans-serif"><br /></font> } catch (Exception ex) {</strong></em></font></p> <p><font size="2" color="#0003ff"><em><strong>&nbsp;&nbsp;&nbsp; System.out.println(&quot;Unknown Exception&quot;);&nbsp;</strong></em></font></p> <p><font size="2" color="#0003ff"><em><strong>}</strong></em></font></p> <p><font size="2"> <br /> <strong><font color="#0003ff"><em>try {</em></font></strong></font></p> <p><font size="2"><strong><font color="#0003ff"><em> <font face="tahoma,arial,helvetica,sans-serif">SimpleRService rservice = (SimpleRService)ServiceLocator.getInstance().getService(SimpleRService.JNDI));</font></em></font></strong></font></p> <p><font size="2"><strong><font color="#0003ff"><em>ArrayList<simpleentity> simples =&nbsp; rservice.getSimples(new PagerDTO(0, 10));</simpleentity></em></font></strong></font></p> <p><font size="2"><strong><font color="#0003ff"><em>} catch (Exception ex) {</em></font></strong></font></p> <p><font size="2"><strong><font color="#0003ff"><em>&nbsp;&nbsp;&nbsp; System.out.println(&quot;Unknown Exception&quot;); <br /></em></font></strong></font></p> <p><font size="2" color="#0003ff"><em><strong>}</strong><br /></em></font></p> <p><font size="2"><br /></font></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5317Fri, 7 Dec 2007 16:02:00 ULATJS programminghttp://opennet.blog.gogo.mn/read/entry4823<p>&nbsp;Ихэнх веб хөгжүүлэгчидэд javascript бичих зайлшгүй хэрэгцээ гардаг. Тэр тусмаа Веб2.0 систем хийж байгаа бол бүүр их хэрэг гарна. Гоёмсог интерфэйс, ашиглахад хябар байлагхийн тулд javascript - ээр зөнд нь зүйл хийх хэрэгтэй болдог. Энэ удаа javascript бичиж байхадаа юу анхаарвал зохих талаар бичье гэж бодлоо. Учир нь, харамсалтай нь веб хөтөчүүдийн javascript хөдөлгүүрүүд харилцан адилгүй хурдтай байдаг. Үүнээс болоод хамгийн тохиромжтой бичлэг, хэлбэр, аргыг сонгох хэрэгтэй болдог. Тийм болхоор performance-г нь харицуулж үзэж байж бичиж байх хэрэгтэй. Их зүйлийг бүтээхэд багагүй хугацаа ордог шүү дээ, битгий залхуураарай. Ajax - р хөгжүүлэлт хийх үед маш их тааралддаг зүйл дээр жишээ татъя. Javascript - ээр HTML element үүсгэх. За даа хоёр үндсэн арга байдаг, document.createElement() , parentElement.innerHTML property - руу нь html текст бичих. За ингээд харицуулий.</p> <p><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/1.jpg" /> </p><span class="kw1"> <p>энэ код Internet Explorer 6 дээр <em>1403 ms</em> , бусад хөтөчүүд дээр <em>63 - 328 ms</em>. Ер нь бол муугүй үзүүлэлт байна. Гэхдээ HTML кодноос яаж DOM element үүсгэх вэ?</p> <p><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/2.jpg" /> </p></span> <div class="codecolorer-container javascript"> <div class="codecolorer" style="font-family: monospace;"> <p><font size="3" face="courier new,courier,monospace"><span class="kw1"></span><span class="br0"></span></font>Internet Explorer 6 дээр өмнөхөөс арай илүү байна <em>1134 ms</em>, гэхдээ бусад хөтөчүүдийн хувьд энэ код ажиллахгүй. try catch ашиглаад catch block&nbsp; дээр нь кодоо засаж бичиж болох л юм, гэхдээ илүү сайнаар шийдэе. </p> </div> </div> <p>Бүх DOM node - д innerHTML атрибут байдаг тэр нь түүний child node - үүдийн HTML тескт нь байдаг. тэгвэл</p> <p><img src="http://openNet.blog.gogo.mn/resource/3.jpg" /> </p> <div class="codecolorer-container javascript"> <p>Маш удаан байна <em>11391 - 307938 ms</em>!. Аргагүй хөтөчийн render engine давхар ажиллаж байгаа шүү дээ. Бага зэргийн сайжруулалт хийе. </p> <p><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/4.jpg" /><br /></p> </div> <div class="codecolorer-container javascript"> <p>Бүх хөтөчийн хувьд гайхалтай perfomance <em>31 - 109 ms</em>, гэвч Internet Explorer дээр энэ удаан ажиллаж байна <em>10994 ms</em>. Бүх хөтөчүүдийн хувьд array үүсгэх, тэдгээрийн хооронд нь холбох үйлдэл маш хурдан хийгддэг, энийг ашиглаад өөрчилөе: <br /></p> </div> <p> <img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/5.jpg" /></p> <div class="codecolorer-container javascript"> <p>Internet Explorer 6 дээр&nbsp; <em>400 ms</em>, бусад хөтөчүүд дээр маш хурдан ажиллаж байна. Энэ бүгдээс хархад веб хөгжүүлэгчид маань хөтөчүүд дээр сайн тест хийж байж кодоо бичих, DOM node - н функцуудыг үргэлж хэрэглэж байх зэрэг зүйлүүдийг анхаараарай гэж. <br /> </p> </div> <p> &quot;JS is beautiful&quot;</p> <p>С.Дэлгэрдалай<br /></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry4823Tue, 4 Dec 2007 12:15:00 ULATEJB3 програмчлалhttp://opennet.blog.gogo.mn/read/entry3204JBoss Application Server дээр Enterprise java bean 3 - г хэрхэн тохируулах, програмчлах талаар бичье.<br />Орчин: <ul> <li>jdk 1.5 ба түүнээс хойших хувилбар</li> <li>Eclipse</li> </ul>EJB3 прожектийн бүтэц: <ul> <li> - yourproject.jar</li> <ul> <li> -META-INF</li> </ul> <ul> <ul> <li> - ejb-jar.xml</li> </ul> </ul> <ul> <ul> <li> - persistence.xml</li> </ul> </ul> <ul> <ul> <li> - MANIFEST.MF</li> </ul> </ul> <ul> <li> -Your classes</li> </ul> <ul> <ul> <li> - ...</li> </ul> </ul> </ul> <p>ejb-jar.xml - н бүтэц:<br /><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/ejbxml.jpg" /><br />persistence.xml - н бүтэц:<br /><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/pres.jpg" /><br /><font face="verdana" style="font-style: italic;">fifaEJB</font>: <font style="font-style: italic; color: #3366ff;">Прожектийн апликэшн серверт бүртгэгдэх нэр. Нэг серверийн хувьд давтагдахгүй байх шаардлагатай.</font><br /><font style="font-style: italic;">java:/fifаDS</font><font style="font-style: italic;">: - <font style="color: #3366ff;">Data Source</font></font><br /><br /><font style="font-weight: bold;">Datasource үүсгэх:<br /></font>MySQL server - н datasource үүсгэе. mysql-ds.xml file үүсгэж серверийнхээ 'deploy' directory-руу хуулна. mysql-ds.xml бүтэц:<br /><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/ds.jpg" /><br />\jbossserver\docs\examples\jca\ хавтас дотор бүсад database хэв файлууд байгаа.<br /><br /><font style="font-weight: bold;">eclipse дээрээ прожектоо үүсгэ</font><br /><br /><br /><a href="http://bp2.blogger.com/_78u5MurYhD0/Rq2OROlfXYI/AAAAAAAAABY/xOTOhgQUFqE/s1600-h/project.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img border="0" id="BLOGGER_PHOTO_ID_5092883180250160514" src="http://bp2.blogger.com/_78u5MurYhD0/Rq2OROlfXYI/AAAAAAAAABY/xOTOhgQUFqE/s1600/project.gif" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" /></a>Зураг дээр харагдаж байгаа бүх сангуудыг прожектдоо зааж өгөөрэй.<br /><br /><font style="font-weight: bold;">Entity bean :</font><br />User.java<br /><br /><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">package mn.dalais.example.entity;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import java.io.Serializable;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.Entity;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.GeneratedValue;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.GenerationType;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.Id;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.SequenceGenerator;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.Table;</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">@Entity</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">@Table(name = &quot;User&quot;)</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">public class User implements Serializable {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> /**</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> *</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> */</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> private static final long serialVersionUID = -978269922594938178L;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> private Integer id;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> private String username;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> private String password;</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> @Id</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> @GeneratedValue(strategy = GenerationType.IDENTITY)</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> // ************ Xerev oracle server ashiglaj bgaa bol Auto increment filed-ee ingej zaaj ogno. *****</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> // @SequenceGenerator(name = &quot;USER_SEQ&quot;, sequenceName = &quot;USR_USER_SEQ&quot;,</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> // allocationSize = 50, initialValue = 10000)</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> // @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> // &quot;</font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">USER_SEQ</font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">&quot;)</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public Integer getId() {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> return id;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void setId(Integer id) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> this.id = id;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public String getPassword() {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> return password;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void setPassword(String password) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> this.password = password;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public String getUsername() {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> return username;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void setUsername(String username) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> this.username = username;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /><br />Энэ </font><font size="2" face="courier new,courier,monospace" style="font-style: italic;">session bean</font><font size="2" face="courier new,courier,monospace">-г нь ямарч програмд хэрэглэж болхоор бичсэн тул зүгээр л copy&amp;past хийгээд үүсэгчих. Чи програмынхээ Entity bean-үүдийг л үүсэгэхэд хангалттай. Програмын чинь middle tier бэлэн боллоо л гэсэн үг.<br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-weight: bold;">Session Bean:</font><font size="2" face="courier new,courier,monospace"><br />SessionFacadeLocal.java<br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">package mn.dalais.example.session;</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import java.util.List;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.ejb.Local;</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">@Local</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">public interface SessionFacadeLocal {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public Object update(Object object);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void create(Object object);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void refresh(Object object);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void remove(Object object);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public List<object> createQuery(String qry, Object[] params);</object></font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">}</font><font size="2" face="courier new,courier,monospace"><br /><br />SessionFacadeRemote.java<br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">package mn.dalais.example.session;</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.ejb.Remote;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">@Remote</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">public interface SessionFacadeRemote {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">}</font><br /><br />SessionFacadeBean.java<br /><br /><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">package mn.dalais.example.session;</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import java.util.List;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.ejb.Stateless;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.ejb.TransactionAttribute;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.ejb.TransactionAttributeType;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.EntityManager;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.PersistenceContext;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.persistence.Query;</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">/**</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> * </font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> * @author Delgerdalai /S.70ai/ 2006.07.26</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> * </font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> */</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">@Stateless</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">public class SessionFacedeBean implements SessionFacadeLocal,</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> SessionFacadeRemote {</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> @PersistenceContext</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> EntityManager em;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public static final String RemoteJNDIName = SessionFacedeBean.class</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> .getSimpleName()</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> + &quot;/remote&quot;;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public static final String LocalJNDIName = SessionFacedeBean.class</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> .getSimpleName()</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> + &quot;/local&quot;;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> @TransactionAttribute(TransactionAttributeType.REQUIRED)</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public Object update(Object object) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> Object obj = em.merge(object);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> em.flush();</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> return obj;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> @TransactionAttribute(TransactionAttributeType.REQUIRED)</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void create(Object object) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> em.persist(object);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> em.flush();</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> @TransactionAttribute(TransactionAttributeType.REQUIRED)</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void refresh(Object object) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> em.refresh(object);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> em.flush();</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> @TransactionAttribute(TransactionAttributeType.REQUIRED)</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public void remove(Object object) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> final EntityManager emanger = em;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> emanger.remove(emanger.merge(object));</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> emanger.flush();</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> @SuppressWarnings(&quot;unchecked&quot;)</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public List<object> createQuery(String qry, Object[] params) {</object></font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> try {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> Query query = em.createQuery(qry);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> if (params != null) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> if (params.length &gt; 0) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> for (int i = 0; i &lt; params.length; i++) {<br /><font style="font-style: italic; color: #336666;"> query.setParameter(i + 1, params[i]);</font><br /><font style="font-style: italic; color: #336666;"> }</font><br /><font style="font-style: italic; color: #336666;"> }</font><br /><font style="font-style: italic; color: #336666;"> }</font><br /><br /><font style="font-style: italic; color: #336666;"> return query.getResultList();</font><br /><br /><font style="font-style: italic; color: #336666;"> } catch (Exception e) {</font><br /><font style="font-style: italic; color: #336666;"> // exception call admin :P</font><br /><font style="font-style: italic; color: #336666;"> }</font><font style="font-style: italic; color: #336666;">return null;</font><font style="font-style: italic; color: #336666;"><br />}<br /></font><font style="font-style: italic; color: #336666;">}</font></font><br /><br /><font style="font-weight: bold;">Interface lookup хийх.</font><br /><br /><font size="2" face="courier new,courier,monospace">InitialContext defaultContext = new InitialContext();<br />SessionFacadeLocal local = (SessionFacadeLocal) defaultContext.lookup(SessionFacedeBean.LocalJNDIName);</font><br /><br /><font style="font-style: italic;">user үүсгэх:</font><br /><font size="2" face="courier new,courier,monospace">User user = new User();<br />user.setUsername(&quot;dalai&quot;);<br />user.setPassword(&quot;password&quot;);<br />local.create(user);</font><br /><br /><font style="font-style: italic;">select :</font><br /><font size="2" face="courier new,courier,monospace">List users = local.createQuery(&quot;from User u&quot;,null);<br />List start_a_users = local.createQuery(&quot;from User u where u.username like '?1%'&quot;, new Object[] {&quot;a&quot;});</font><br /><br /><br /><font style="font-weight: bold;">Deploy хийх:</font><br />project - оо jar file болгож export хийгээд серверийнхээ deploy directory-руу хуулна.<br />ингээд л боллоо. Заавал ашиглаж үзээрэй.</p> <p>С.Дэлгэрдалай</p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry3204Wed, 28 Nov 2007 19:53:00 ULATLighttpd vs Apachehttp://opennet.blog.gogo.mn/read/entry4999<p>Зүгээр л <a href="http://httpd.apache.org/">Apache</a>, <a href="http://www.lighttpd.net/">Lighttpd</a> серверүүдийг харицуулж үзэхээр шийдлээ. Нэг их хүндрүүлэхийг хүссэнгүй.<br /><br /><font style="font-weight: bold;">Тестийн орчин:</font><br />Redhat EL 4, Pentium III 800 Mhz, 256 Mb RAM.<br /><font style="font-style: italic;">[root@localhost root]# ab -n 1000 -c 100 http://localhost/</font><br /><br /><font style="font-weight: bold;">Үр дүн:</font><font color="#fbfff1">cument-root = &quot;/www/pages&quot; </font></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #2b2b2b;"><font color="#fbfff1">Server Software: </font><font color="#fbfff1" style="font-weight: bold;">Apache</font><font color="#fbfff1"><br /> Server Hostname: localhost<br /> Server Port: 80<br /><br /> Document Path: /<br /> Document Length: 4078 bytes<br /><br /> Concurrency Level: 100<br /> Time taken for tests: 2.130548 seconds<br /> Complete requests: 1000<br /> Failed requests: 0<br /> Write errors: 0<br /> Non-2xx responses: 1000<br /> Total transferred: 4260000 bytes<br /> HTML transferred: 4078000 bytes<br /></font> <font color="#fbfff1" style="font-weight: bold;">Requests per second: 469.36 [#/sec] (mean)</font><font color="#fbfff1"><br /> Time per request: 213.055 [ms] (mean)<br /> Time per request: 2.131 [ms] (mean, across all concurrent requests)<br /> Transfer rate: 1952.55 [Kbytes/sec] received</font></div> <p> </p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #2b2b2b;"><font color="#fbfff1">Server Software: </font><font color="#fbfff1" style="font-weight: bold;">lighttpd/1.4.16</font><font color="#fbfff1"><br /> Server Hostname: localhost<br /> Server Port: 80<br /><br /> Document Path: /<br /> Document Length: 4034 bytes<br /><br /> Concurrency Level: 100<br /> Time taken for tests: 0.396351 seconds<br /> Complete requests: 1000<br /> Failed requests: 0<br /> Write errors: 0<br /> Total transferred: 4269000 bytes<br /> HTML transferred: 4034000 bytes<br /></font> <font color="#fbfff1" style="font-weight: bold;">Requests per second: 2523.02 [#/sec] (mean)</font><font color="#fbfff1"><br /> Time per request: 39.635 [ms] (mean)<br /> Time per request: 0.396 [ms] (mean, across all concurrent requests)<br /> Transfer rate: 10515.93 [Kbytes/sec] received</font><br /> </div> <p><a href="http://www.lighttpd.net/">Lighttpd</a> серверийг xэн хэрэглэж байна вэ?<br /></p> <ul> <li><a rel="nofollow" href="http://www.youtube.com/" class="ext-link"><font class="icon">http://www.youtube.com</font></a></li> <li><a rel="nofollow" href="http://www.myspace.com/" class="ext-link"><font class="icon">http://www.myspace.com</font></a> </li> <li><a rel="nofollow" href="http://www.meebo.com/" class="ext-link"><font class="icon">http://www.meebo.com</font></a> </li> <li>....</li> </ul>С.Дэлгэрдалайhttp://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry4999Wed, 28 Nov 2007 18:26:00 ULATRuby on Rails #2http://opennet.blog.gogo.mn/read/entry5103<p>Энэ удаа <em>rails </em>прожикт үүсгэх, <em>IDE </em>тохируулга, мөн интернэтгүй хүн <em>rails</em>-г яаж суулах вэ? эдгээрийн талаар бичье. Интэрнэт байхгүй хүн <em>rails </em>ашиглах нэг их тохиромжтой биш л дээ. Гэхдээ энэ болохгүй гэсэн үг биш. Учир нь <em>rails </em>дээр хөгжүүлэлт хийж байхад гадны <em>vendor </em>- үүдийн <em>plug-in</em> ашиглах хэрэг зөнд нь гардаг. Тийм болхоор интернэттэй л байвал зүгээр дээ. Интернэт байхгүй бол яаж <em>rails </em>- г суулгах вэ? <a target="_blank" href="http://rubyforge.org/frs/?group_id=307">Rails Stand Alone</a> эндээс рэйлсээ татаж аваад л, задлаад л боллоо.&nbsp; Ингэж ашиглахад <em>rails </em>комманд байхгүй, татаж авсан <em>rails </em>маань л таны прожект болно гэсэн үг. Нэг зүйл анхааруулхад <em>rubygems</em>-н хувилбартаа тохирсон райлс татаж авахаа мартаваа. Тэгвэл элдэв асуудал үүсэхгүй байх болно. За одоо үндсэн асуудалруугаа оръё. Райлс прожектийг үүсгэхдээ <em>console </em>дээрээ:<br /> <strong><font size="2" face="courier new,courier,monospace">rails projectname</font></strong><br />жишээ нь: <strong><font size="2" face="courier new,courier,monospace">C:\&gt; rails ddtest</font></strong><br /><em>Linux </em>систем дээр мөн адил. Ингээд райлс прожект маань үүслээ. Rails framework - н үндсэн сервер нь WEBrick юм. Одоо серверээ асааъя. <br />Rails Webrick server асаах нь<br /> <strong><font size="2" face="courier new,courier,monospace">ruby script\server </font></strong><br />прожектийн директорт байх хэрэгтэйг анхаарна уу. Жишээ.<br /><img vspace="0" hspace="0" border="0" align="bottom" src="http://openNet.blog.gogo.mn/resource/cmd.JPG" />WEBrick серверийн default порт нь 3000. WEBrick серверийг асаахад хэрэг болох параметрүүд:&nbsp; -p port, -e `development,test,production` environment , -b `bind ip` за даа энэ гурав л маш их зүйлд хэрэг болно доо гэж. <a href="http://127.0.0.1:3000/" target="_blank">http://127.0.0.1:3000/</a> oроод үз рэйлс апликэшн маань ажилчихлаа.<br /></p> <p><strong>Миний хэрэглэдэг IDE: </strong><br /></p> <p>Би <a target="_blank" href="http://www.aptana.com/">Aptana studio</a> -ийн <a target="_blank" href="http://www.aptana.com/rails/">RadRails Plug-in</a> ашигладаг. Хэрэвээ ruby on rails - ээ түрүүлээд суулгасан бол бараг тохиргоо хийх хэрэггүй. Шаардлага гарвал Window -&gt; Preferences орооод Ruby хэсэгийн Installed interpreter хэсэгт рубигийн замаа зааж өгнө. </p> <p>Дараагийн удаа rails html form, controller, model хэрхэн үүсгэх талаар бичнээ.<br /></p> <p>С.Дэлгэрдалай<br /><img vspace="0" hspace="0" border="0" align="bottom" src="http://www.aptana.com/rails/images/rails.png" /> <br /> </p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5103Wed, 28 Nov 2007 11:41:00 ULATRuby on Rails #1http://opennet.blog.gogo.mn/read/entry5229<p><em><strong>Ruby on Rails</strong></em> бол <em><strong>Ruby </strong></em>хэл дээр суурилсэн <strong><em>MVC </em></strong>бүхий веб <em>framework </em>юм. <em><strong>Ruby on Rails</strong></em> дээр нэг зүйл хийгээд үзчихвэл үнэхээр татагдах болно. Би бол дөнгөж эхлэн суралцагч гэвч <em>RоR </em>дээр нэг прожект хийгээд,&nbsp; <em>realsystem </em>дээр ажиллаж байгаа. Угаасаа л бид дээр нь юм хийж байж л суралцдаг биздээ. Тун удахгүй <em>ruby </em>болон <em>Rails framework </em>- ийг <em>java </em>хэл шигээ, <em>JSF&nbsp; framework </em>шиг, <em>c#</em>, <em>asp.net</em> шиг мэддэг болох байхаа. Одоогоор гүүглэтэй хамтраад хийх юмаа тодорхой хэмжээнд болгоод л байна. Хийж үзсэн зүйлүүдээ эхнээс нь бичье гэж бодлоо. Одоогоор <em>RoR&nbsp; </em>дээр юу хийж үзсэн байна вэ? гэвэл</p> <p>- <em>Oracle өгөгдлийн сантай вебийн модуль, UTF-8</em><br />- <em>Captcha&nbsp; , using RMagick</em><br />- <em>Майл илгээх</em><br />- <em>Layout</em><br />- <em>*NIX server дээрх deployment</em><br />- <em>Rails application cluster, mongrel cluster, lighttpd proxy</em><br /></p> <p>Бүгдээрээ л тодорхой хэмжээний асуудалуудтай, болхоор би хэсэг хэсгээр нь бичээд явъя гэж бодлоо. Хэн нэг хүн иймэрхүү юм хийх бол уншаад л хийчихвэл сайхан биздээ. Ингээд жижиг жижиг хэсэг болгоод бичье дээ. Миний ташаа ойлогосон зүйлийг дор нь засаад явна гэж найдаж байна. </p> <p><strong>#1. Ruby on Rails суулгах нь</strong> </p> <p>Ruby програмчлалын хэлийг <em>windows</em>, <em>linux </em>хоёр дээр суулгаж үзсэн. <em>MAC </em>дээр яаж сууж ажилладагийг нь бүү мэд. Виндоус дээр рубиг суулгахад <em>ruby runtime </em>болон <em>rubygems </em>хамт суучихдаг. <em>Linux </em>дээр суулгаж байхад дан дангаараа сууж байсан. (<em>source code&nbsp; </em>- г нь хөрвүүлж суулгахад). <em>rubygems </em>нь <em>ruby </em>хэлний <em>package system </em>юм. <em>Windows </em>үйлдлийн системийн хувьд <em>ruby </em>суулгахад маш хялбар. <a target="_blank" href="http://www.ruby-lang.org/en/downloads/">RubyDownloads </a>сайтнаас Ruby 1.8.6 One-Click Installer&nbsp; татаж аваад л боллоо. <a target="_blank" href="http://rubyforge.org/frs/?group_id=126">Rubygems</a> давхар суучихна. Харин Linux системийн хувьд ruby - ээ <em>source code </em>- г нь хөрвүүлсэний дараа, <a target="_blank" href="http://rubyforge.org/frs/?group_id=126">Rubygems </a>татаж аваад, задлаад :P , дотор нь байгаа <em>setup</em>.<em>rb </em>скриптийг ажиллуулна. </p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #2b2b2b;"><font color="#e3ffff">cd Rubygems-0.9.4<br />ruby setup.rb&nbsp;</font></div> <p>За ингээд руби болон rubygems суучихлаа.<br /><em>Rails installation</em>: <em>Rails </em>- ийг суулгах маш энгийн. <br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #2b2b2b;"><font color="#f1fffb"><strong>gem install rails --include-dependencies</strong></font></div> <p>Ингээд л боллоо. Дараагийн удаа ашигладаг <em>IDE </em>тохируулга болон энгийн <em>rails project </em>үүсгэе. </p> <p>С.Дэлгэрдалай<br /></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5229Tue, 27 Nov 2007 11:20:00 ULATAjax and browser`s back buttonhttp://opennet.blog.gogo.mn/read/entry5216<p>Ajax ашиглаад вэб хийхэд нэг хүндрэл нь <em>browser</em>-ийн <em>back </em>товч ажлахгүй байдаг&nbsp; тэрийг шийдсэн нэг <em>javasctipt</em>-ийг яаж ашиглахыг бичъе гэж бодлоо</p> <p> <a href="http://websvn.bluga.net/wsvn/HTML_AJAX/trunk/js/dhtmlHistory.js?op=file&amp;sc=1">dhtmlHistory.js</a> &nbsp; эхэлээд энэ js -г хуулаад оруулчих.<span style="background-color: #ffc7ed;"></span></p> <p><span style="background-color: #ffc7ed;"></span></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #ff99ff;"><font color="#000000"></font></div> <p>Зиа тэгээд одоо dhtmlHistory - энэ js -ийнхаа initialize() ингадаг function-г нь дуудах ёстой юм байгаан <br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #ff99ff;"><font color="#000000">dhtmlHistory.initialize();&nbsp;&nbsp;&nbsp; // onload дээрээ юм уу хамгийн түрүүнд ажиллах js- дээрээ дуудсан ч болно.</font></div> <p><span style="background-color: #ffc7db;"></span>Эхлээд юуны өмнө back товчруугаа <em>function</em>-оо хадгалах хэрэгтэй ингэхийн тулд <br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #ff99ff; color: #ff72d2;"><font color="#000000">dhtmlHistory.add(newLocation,locationData);&nbsp;&nbsp; // энэ аргументэд дуудсан функцынхаа нэрийг хийвэл зүгээр юм шиг байна лээ</font></div> <p><span style="background-color: #ffc7ed;"></span><em>back </em>товч дарахад ажиллах фунцийг <em>dhtmlHistory</em>-руу ингэж нэмнэ.<br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #ff99ff;"><font color="#000000">dhtmlHistory.addListener(handleHistoryChange);</font></div> <p><span style="background-color: #ffc7ed;"></span>Энэ <em>handleHistoryChange&nbsp;</em> <em>function </em>нь <em>browser</em>-ийн <em>back </em>товч дарахад ажиллах юм.<br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #ff99ff;"> <p><font color="#000000">handleHistoryChange(newLocation,historyData){&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; alert(newLocation,historyData);<br />&nbsp;&nbsp;&nbsp; // turuunii add hiiisen newLocation historydata 2 garch irne :)<br />&nbsp;&nbsp; }</font></p> </div> <p><span style="background-color: #ffc7ed;"></span>Ерөнхий санаа нь миний ойлгосноор бол <em>dhtmlHistory js</em> нь <em>object</em>-уудыг дарааллаар нь хадгалаад <em>back </em>товч дарахад нь нөгөө дарааллаасаа хамааруулаад дуудаад байх шиг байгаан.Тэгхээр яаж ашиглах нь таны дурын асуудал болж байна даа. Дараах жишээг үзүүл бүр ойлгомжтой болох байх гэж боджийно.<a href="http://www.onjava.com/onjava/2005/10/26/examples/downloads/examples.zip"><br /></a></p> <p><a href="http://www.onjava.com/onjava/2005/10/26/examples/downloads/examples.zip">эндээс</a> жишээ татаж үзээрэй </p> <p>жич: жишээнүүдээс надаа <em>oreillymail </em>гэсэн нь арай ойлгомжтой юм шиг санагдсан хэхэ&nbsp; <br /><font color="#abe4ff"></font></p> <p><font color="#abe4ff">Suns</font> </p> <p> </p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5216Fri, 23 Nov 2007 11:19:00 ULATJava script `ReplaceAll`http://opennet.blog.gogo.mn/read/entry4541<p>Сүүлийн үед&nbsp; javascript - ийн хэрэглээ маш их байгаа. Надад маш их хэрэг болж байсан функц бол <em>replaceall </em>та нарт ийм хэрэгцээ гарч магад гээд энэ функцийг тавий гэж бодлоо. <br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #ffd5d6;">SDUTIL = <font color="#0f11ff">function </font>() {<br /> <font color="#0003ff">return </font>{ replaceAll:<font color="#1d6bff"><font color="#0003ff">function</font> </font>(str, strTarget, strSubString) {<br /> <font color="#0f11ff">var </font>strText = str;<br /> <font color="#0003ff">var </font>intIndexOfMatch = strText.<font color="#0003ff">indexOf</font>(strTarget);<br /> <font color="#0003ff">while </font>(intIndexOfMatch != -1) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; strText = strText.<font color="#0003ff">replace</font>(strTarget, strSubString);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; intIndexOfMatch = strText.<font color="#0003ff">indexOf</font>(strTarget);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br /> <font color="#0003ff">return </font>(strText);<br />&nbsp;&nbsp;&nbsp; }<br />}();</div> <p>&nbsp;Энэ функцыг интентээс хайж яваад нилээн дээр олсон юм, хаанаас олж байсанаа бүүр мартчиж. Функцыг ашиглахдаа:<br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #ffd5d6;"> <p>var rstr = SDUTIL.replaceAll(&quot;(20,20),(30,35),(40,45)&quot;, &quot;)&quot;, &quot;&quot;);</p> <p># &quot;)&quot; тэмдэгтийг арилгаж байна. <br /></p> </div> <p>&quot;JS is beautiful&quot;<br />С.Дэлгэрдалай</p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry4541Fri, 23 Nov 2007 09:36:00 ULAT.NET Thread & GUIhttp://opennet.blog.gogo.mn/read/entry5280<p>.Net - ийн програмчлалын хэлүүдээс зөвхөн C++, C# хоёрыг л ашигладаг, тэгээд ч C# - ийг илүү их ашигладаг болхоор цаашид C# гээд бичээд явъя. Кодын хэсгийг ч бас C# дээр бичье. Thread ашиглах үед график контрол руу хандаж чаддаггүй. Энэ асуудлыг хэрхэн шийдэх вэ?. DotNet <em>delegate </em>болон контролын <em>Invoke </em>методыг ашиглан шийдэж болно. Текстбокс контролын текстыг График интерфейсийн бус <em>thread</em> -ээс хэрхэн өөрчилөх талаар бичье. Эхлээд ашиглах <em>delegate </em>тодорхойлно.&nbsp;</p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #e3f6ff;"> <pre><font color="blue">public</font> <font color="blue">delegate</font> <font color="blue">void</font> UpdateTextCallback(<font color="blue">string</font> text);</pre> </div> <p>Контрол руу хандаж текстйиг нь өөрчилдөг метод тодорхойлох хэрэгтэй <br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #e3ffff;"> <pre><font color="blue">private</font> TextBox m_TextBox; <font color="blue">private</font> <font color="blue">void</font> UpdateText(<font color="blue">string</font> text) { m_TextBox.Text = text; }</pre> </div> <p>&nbsp; График интерфэйсийн бус thread - ээс өөрчилөх <br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #e3ffff;"> <pre>m_TextBox.Invoke(<font color="blue">new</font> UpdateTextCallback(<font color="blue">this</font>.UpdateText), <font color="blue">new</font> <font color="blue">object</font>[]{”Hi am Non GUI Thread”});</pre> </div> <p> Ингээд асуудал шийдэгдлээ. Гэхдээ энд хэдэн асуудал гарч ирж байна. Юу вэ гэхлээр Хэрвээ thread-ээс ажиллах контролын тоо олон бол яах вэ? эсвэл Олон төрлийн property - руу нь хандах бол яах вэ? Тэр болгонд&nbsp; delegate , method тодорхойлоод байх уу? Үгүй ээ энэ шийдэгдэж болно. Энэ бол систем хөгжүүлж байгаа хүний ур чадвараас шууд хамаарна. Энд нэг PDA application дээр хэрэглэж байсан Helper класаа тавья, санаа болох байх.</p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #e3ffff;"> <pre>using System; using System.Collections.Generic; using System.Text; using System.Globalization; using TPL2Client.tevent; using System.Windows.Forms; using System.Drawing; using System.IO; namespace TPL2Client.helper { public delegate void GUIString(Control c, string text); public delegate void GUIBoolean(Control c, bool visible); public delegate void GUIColor(Control c, Color color); class Helper { public static NumberFormatInfo info = null; public static void GUIListbox(Control c, string text) { ListBox l = (ListBox)c; l.Items.Add(text); } public static void GUIText(Control c, string text) { c.Text = text; } public static void GUIEnable(Control c, bool vsb) { c.Enabled = vsb; } public static void GUIVisible(Control c, bool vsb) { c.Visible = vsb; } public static void GUIBGColor(Control c, Color color) { c.BackColor = color; } } }</pre> </div> <p>Энэ классыг ашигласан жишээ: </p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #e3ffff;"> <p># status label control - н текстийг өөрчилж байна.&nbsp;</p> <pre><p>this.status.Invoke(new GUIString(Helper.GUIText), new Object[] { this.status, "Try reconnecting ..." });</p><p># connect button control - г enable болгож байна.&nbsp;</p><p>this.connect.Invoke(new GUIBoolean(Helper.GUIEnable), new Object[] { this.connect, true });</p><p># log listbox control - руу "ERROR :" message - г нэмж байна.</p><p>log.Invoke(new GUIString(Helper.GUIListbox), new object[] { log, "ERROR : "}); </p><p># config panel control - ийн арын өнгийг шар болгох</p><p>this.config.Invoke(new GUIColor(Helper.GUIBGColor), new Object[] { this.config, Color.Yellow }); </p></pre> </div> <p>&quot;.Net is Best&quot; </p> <p>С.Дэлгэрдалай<br /></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5280Thu, 22 Nov 2007 11:28:00 ULATOracle char set-г солихhttp://opennet.blog.gogo.mn/read/entry2095<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Character set-г солихын тулд дараах зүйлийг хийгээд үз.<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>1. Oracle-аа асаагаад. sys-аар орно.<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>2. update sys.props$ set value$='utf8'<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>where name='NLS_CHARACTERSET';<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>&nbsp; &nbsp; commit;<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>3. shutdown immediate<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>4. startup<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>5. ALTER SYSTEM ENABLE RESTRICTED SESSION;<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>6. ALTER DATABASE CHARACTER SET UTF8;<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>commit;<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>7. shutdown immediate<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>startup<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>8. Шалгахдаа :<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span>select * from nls_database_parameters<o:p /></span></p> <p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><span> </span><span> </span>where parameter like '%CHARACTERSET'; <o:p /></span></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry2095Thu, 22 Nov 2007 11:12:00 ULATLighttpd серверээр Apache серверийг гэрэлтүүлэх ньhttp://opennet.blog.gogo.mn/read/entry5218<p>Apache Web server медиа(static content) stream хийхээс болоод удаад, ачаалал үүсгээд байна уу. Lighttpd ашиглаж системээ яаж аврах талаар бичье. Lighttpd веб сервер ашигласнаар Аpache серверээ static content болон CGI скрипттэй ажиллахаас чөлөөлж болно. Lighttpd сервер нь Аpache серверийг бодвол static content, cgi скрипттэй илэрхий сайн ажиллаж чаддаг. Санаа нь бол Lighttpd серверийг Apache серверийн ард ажиллуулаад , Apache proxy модулыг ашиглан түүнрүү хандах юм. Ингэснээр ачааллаа тодорхой хэмжээнд хувааж ажиллуулж чадна. Хоёр веб сервер ажиллуулна гэсэн үг л дээ энгийнээр бол, ингэхийн тулд нэмэлт сервер машин шаардлаггүй :). <br /> </p> <p><strong>LightTPD</strong><br /></p> <p>Lighttpd серверийг суулгахдаа сорс кодыг нь хөрвүүлж суулгах нь хамгын зөв. Compile хийж Install хийх нь маш хялбар, тэгээд ч бараг бүх платформ дээр асуудалгүй. Lighttpd сервертэй холбоотой мэдээллийг эндээс олж аваарай <a title="Lighttpd web site" target="_blank" href="http://www.lighttpd.net">LightTPD</a>. Lighttpd сервер тохируулах:</p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #2b2b2b;"> <p><font color="#fbfff1">server.document-root = &quot;/www/pages&quot; </font></p> <p><font color="#fbfff1">server.errorlog = &quot;/var/log/lighttpd/error_log&quot;<br /> accesslog.filename = &quot;/var/log/lighttpd/access_log&quot;</font></p> <p><font color="#fbfff1"># гол зүйл серверээ 80-аас өөр порт дээр ажиллуулах. <br /> server.port = 81<br /><br /> server.bind = &quot;localhost&quot;</font></p> </div> <p>Энд тохиргооны файлын чухал хэсэгийг харууллаа. Тохиргооны файл бүтнээрээ биш гэдгийг анхаараарай. Эндээс загвар <a href="http://trac.lighttpd.net/trac/browser/tags/lighttpd-1.4.11/doc/lighttpd.conf?rev=1648" target="_blank" title="Configuration file of Lighttpd">configuration&nbsp; </a>файлыг хараарай. Тохиргоон дээр гол анхаарах зүйл бол хоёр веб серверээ хоёр өөр прот дээр ажиллуулахаар тохируулах. <br /></p><strong>Apache proxy торхируулах<br /> </strong> <p> </p> <p>&nbsp;81 порт дээр ажиллаж байгаа Lighttpd серверлүү хандахын тулд Apache proxy модул хэрэгтэй. Apache 2.x хувилбар дээр хэрхэн тохируулахыг бичье.<br />Apache серверээ compile хийх дээ proxy_module, proxy_connect_module, proxy_http_module&nbsp; модулуудыг нээж өгөх хэрэгтэй. Эдгээр модулыг ашиглахын сервер модулиудыг ачаалсан байх ёстой. Ингэхийн тулд httpd.conf файл дээр дараах мөрүүдийг нэмж өгнө.</p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #2b2b2b;"> <p><font color="#f1fbff">LoadModule proxy_module modules/mod_proxy.so<br /> LoadModule proxy_connect_module </font><font color="#f1fbff">modules/</font><font color="#f1fbff">mod_proxy_connect.so<br /> LoadModule proxy_http_module </font><font color="#f1fbff">modules/</font><font color="#f1fbff">mod_proxy_http.so</font></p> </div> <p>Хэрэв <em>virtual host</em> ашигладаг бол&nbsp; <em><virtualhost /></em> <em>directive</em> дотороо доорх мөрүүдийг нэмж өгнө, хэрэглэдэггүй бол httpd.conf файлын төгсгөлд бичхэд хангалттай. <br /></p> <div style="font-family: 'Courier New',Courier,monospace; font-size: 12px; background-color: #2b2b2b;"> <p><font color="#f1ffff">ProxyRequests Off<br /> ProxyPreserveHost On<br /> ProxyPass /images http://0.0.0.0:81/<br /> ProxyPassReverse / http://0.0.0.0:81/</font></p> </div> <p>Энэ жишээнд images гэсэн хавтасыг Lighttpd сервер ажиллуулахаар (handle , serve ...) тохируулсан байна. Энэ мэт vidoes, flashes , mp3s гэх мэд хавтасууд үүсгэж динамик биш файлуудаа байрлуулж болно. Apache серверийн ачааллыг бага ч гэсэн хөнгөвчлөх байх гэж найдаж байна.</p> <p>С.Дэлгэрдалай<br /></p> <p>Эх сурвалж:<br /><a target="_blank" href="http://trac.lighttpd.net/trac/">http://trac.lighttpd.net/trac/</a><br /><a target="_blank" href="http://www.apachetutor.org/admin/reverseproxies%20">http://www.apachetutor.org/admin/reverseproxies&nbsp;</a></p> <p><br /></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry5218Wed, 21 Nov 2007 11:24:00 ULATOpenNEThttp://opennet.blog.gogo.mn/read/entry2466<p>Welcome OpenNET , developer network. Энэ блог дээр бичлэг бичиж байх хүмүүсийг бүртгэнэ. OpenNet гэсэн мэдээллийн технологийн чиглэлэээр бичигдэх блог дээр хамтаа мэддэг, чаддагаа бичицгэе. Блогт эрх авах хүмүүс сэтгэгдэл үлдээгээрэй, би request явуулъя. <br /> </p> <p>С.Дэлгэрдалай<br /></p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry2466Tue, 20 Nov 2007 12:15:00 ULATEJB3, Home Interface cachinghttp://opennet.blog.gogo.mn/read/entry2875<p>Энэ бичлэгийн нэрийг хараад хүмүүс шүүмжлэлтэй хандах байх, би EJB programming үүднээс нэрийг нь ингээд өгчихсөн юм шүү ойлгох буй за. JNDI name ашиглан interface lookup хийх нь их өртөг өндөртэй (:P) үйлдэл учир<br />cache хийх хэрэгтэй. Энгийн cache implementation, helper class ...<br /><br /><em>ServiceLocator.java</em><br /><br /><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">package mn.dalais.example.utils;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import java.util.Hashtable;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.naming.InitialContext;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">import javax.naming.NamingException;</font><font size="2" face="courier new,courier,monospace"><br /><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">public class ServiceLocator {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> private static ServiceLocator serviceLocator = new ServiceLocator();</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> private Hashtable<string,> homeCache;</string,></font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> private InitialContext defaultContext;</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> private ServiceLocator() {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> try {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> homeCache = new Hashtable<string,>();</string,></font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> defaultContext = new InitialContext();</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> } catch (Exception ex) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> // exception call to admin :P</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public static ServiceLocator getLocator() {</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> return serviceLocator;</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> public Object getService(String jndiName) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> try {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> if (!homeCache.containsKey(jndiName)) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> homeCache.put(jndiName, defaultContext.lookup(jndiName));</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> } catch (NamingException ex) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> ex.printStackTrace();</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> } catch (SecurityException ex) {</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> ex.printStackTrace();</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> return homeCache.get(jndiName);</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;"> }</font><font size="2" face="courier new,courier,monospace"><br /></font><font size="2" face="courier new,courier,monospace" style="font-style: italic; color: #336666;">}</font><br />Хэрэгжүүлээд үзээрэй. Миний мэдэх хэдэн том төсөл дээр энэ код яг энэ хэвээрээ ашиглагддаг юм.</p> <p>С.Дэлгэрдалай</p>http://opennet.blog.gogo.mnhttp://opennet.blog.gogo.mn/read/entry2875Sun, 22 Jul 2007 14:16:00 ULAST