jquery에서 특정 html 컴포넌트를 접근하려면. 다음처럼 접근할 수 있다.


$('#atable > tbody > tr[id]')


그리고 json 객체를 생성하려면 JSON.stringify를 사용한다.



예제는 다음과 같다.



var objects = [];

$('#atable > tbody > tr[id]').each(function( index ) {

  var object = new Object();

  object.index=index;

  object.id=$(this).attr('id');

  objects.push(object);

});

var jsonObject = JSON.stringify(objects);




Posted by '김용환'
,


Jquery에서 file upload하는 예제이다. 



html 코드


<div class="x-10">

 <input type="text" class="form-control" id="objectUrl" name="objectUrl" value="${actionTagGuide.objectUrl!}" ><br/>

    <label><input type="file" name="file" id="file"/></label>

    <button type="button" class="btn btn-danger btn-upload">파일 업로드</button> 

</div>



자바스크립트는 다음과 같다. 



$(document).ready(function() {

var today = (new Date()).yyyymmdd();

$('.btn-upload').on('click', function (){

if (confirm('Could you upload a file?')) {

var data = new FormData();

data.append("file", $('#file').prop('files')[0]);

console.log(data);

$.ajax({

            type: "POST",

            enctype: 'multipart/form-data',

            url: "/upload/"+today+"/",

            data: data,

            processData: false,

            contentType: false,

            cache: false,

            timeout: 600000,

            success: function (data) {

                $("#objectUrl").text(data);

                console.log("SUCCESS : ", data);

            },

            error: function (e) {

                $("#objectUrl").text(e.responseText);

                console.log("ERROR : ", e);

            }

        });

}

     });


});


Posted by '김용환'
,


이런 나에게 20분 소요를 준 에러..  헐~~

ibatis에서 에러가 났다..

<update id="queryD" parameterClass="String">
update xxx set matchcnt = matchcnt +1 where memberid = #pid ;
</update>


처음에는 오타를 확인하지 못했다.

/sqlMap/update'.  Cause: java.util.NoSuchElementException  이 Exception이 발견되는 원인은 바로 # 때문이다.!!


<update id="queryD" parameterClass="String">
update xxx set matchcnt = matchcnt +1 where memberid = #pid# ;
</update>


Posted by '김용환'
,


http://docs.codehaus.org/display/JETTY/Configuring+AJP13+Using+mod_jk


AJP is NOT recommended. Use HTTP and mod_proxy instead (see above)
Posted by '김용환'
,

보통 일반 서버에 아파치, 톰캣 1 이렇게 띄워서 실행한다.
내가 테스트를 해보니, cpu 갯수만큼 톰캣을 띄우는 것이 가장 최적화되었다고 생각한다. (ppt 만들어서 보고까지 했음..)

그렇지만 굳이 성능뿐 아니라 톰캣의 비정상적 종료에 대해서 해결이 가능하다는 것이다.

톰캣 하나가 비정상적인 종료를 할 때, worker 설정으로 다른 서버를 보게 하는 설정보다는 같이 띄워져 있는 서버를 보게 하는 것이 해놓았다.


vi /usr/local/apache/conf/workers.properties
# worker list
worker.list=tomcat
# Tomcat Load Balancer
worker.tomcat.type=lb
worker.tomcat.balance_workers=tomcat8009,tomcat8010
# 8009 Tomcat
worker.tomcat8009.type=ajp13
worker.tomcat8009.port=8009
worker.tomcat8009.lbfactor=1
worker.tomcat8009.socket_timeout=5
# 8010 Tomcat
worker.tomcat8010.type=ajp13
worker.tomcat8010.port=8010
worker.tomcat8010.lbfactor=1
worker.tomcat8010.socket_timeout=5

timeout 처리가 되어 있어 5초동안 응답이 없으면, 해당 톰캣을 빼도록 되어 있다.
잠깐이지만, 서버가 alive 상태로 있게 하고, 그 문제를 빨리 모니터링 서버에서 캐취해서 어드민 담당자에게 처리 할 수 있도록 하는 것이다..
사실 유지보수 차원에서도 이게 좀 편하다.. 프로젝트만 200개, 서버만 1000대 관리하는데...

worker설정에 다른 서버 ip 적어서 관리하는 것은 상상할 수 없다. 시스템 설정은 최대한 단순하게.. 그리고 배포가능하고 문제를 빨리 파악하게 하는 것이 좋다..

개인적으로 worker를 가지고 다른 ip를 보도록 하는 것은 유지보수 특성상 좋지 않아 보인다고 생각한다. 톰캣을 하나 더 올리는 것이 낫다.


톰캣이 2개여서 좋은 이유는 바로 이 것 같습니다. 바로 톰캣 하나가 비정상적인 종료를 하더라도 하나가 바쳐줄 수 있다라는 것입니다.

Cpu 개수(표준 서버 cpu 2)에 맞춰서 tomcat 인스턴스를 늘이는 것이 부하를 줄이는 부분과  load balancing을 하는 부분에서 탁월하다는 것이 제 생각입니다.




Posted by '김용환'
,

This plugin combines and minimizes JavaScript and CSS files using YUI Compressor for faster page loading.
 -- Minimize HTTP Requests
 -- Minify JavaScript and CSS



http://code.google.com/p/maven-samaxes-plugin/



<project>
    ...
   
<pluginRepositories>
        ...
       
<pluginRepository>
           
<id>samaxes-releases</id>
           
<name>samaxes Release Repository</name>
           
<url>http://maven-samaxes-repo.googlecode.com/svn/releases</url>
           
<releases>
               
<enabled>true</enabled>
           
</releases>
           
<snapshots>
               
<enabled>false</enabled>
           
</snapshots>
       
</pluginRepository>
        ...
   
</pluginRepositories>
    ...
</project>

'web' 카테고리의 다른 글

Jetty는 AJP보다 Mod_proxy를 선호함  (0) 2010.02.04
한 서버에 톰캣이 여러개여서 좋은 점  (0) 2010.01.23
Loading Image 보여주기 샘플  (0) 2010.01.05
Tomcat port 떠 띄우기  (0) 2010.01.04
Smart Popup example using Jquery  (0) 2009.12.24
Posted by '김용환'
,
Posted by '김용환'
,

Tomcat port 떠 띄우기

web 2010. 1. 4. 19:23

아래와 같이 하면, 아파치 http 도움없이 바로 톰캣연동되도록 할 수 있다.


Posted by '김용환'
,


<html>
<head>
<link type="text/css" href="/jquery/ui.all.css" rel="stylesheet" />
<script type="text/javascript" src="/jquery/jquery-1.3.2.js"></script>
<script type="text/javascript" src="/jquery//ui.core.js"></script>
<script type="text/javascript" src="/jquery/ui.draggable.js"></script>
<script type="text/javascript" src="/jquery/ui.resizable.js"></script>
<script type="text/javascript" src="/jquery/ui.dialog.js"></script>
<script type="text/javascript">
   $(function() {
  var $dialog = $('div#dialog');
     $dialog.dialog({modal:true,
      autoOpen: false,
            open:function() {
              $(this).parents(".ui-dialog:first").find(".ui-dialog-titlebar-close").hide();
            },
            width:700,
            height:1000,
            buttons: {
    "Close": function() {
     $(this).dialog("close");
    }
   }                
        });
       
       $("#click").click(function(){
       $dialog.dialog('open');
          $( "iframe", $dialog ).attr( "src", "viewsrc.xxx?filename=" + $(this).attr('file_name'));
          });   
    })
   </script>
</head>
<body>
<div id="dialog" title="파일 내용 보기" style='display: none; text-align:center'>
 <iframe style="width: 100%; height: 100%; border: 0px;"></iframe>
 
</div>
<pre class="brush:">filename : <a href="#" id="click" file_name="E:\dailybuild\web\styles\shThemeDjango.css">/home/www/conf/sql-map-misc.properties</a></pre>
<pre class="brush: java;">
2 : url=$${backend.misc.url}
3 : username=$${backend.misc.username}
4 : password=$${backend.misc.password}
 
</pre>
<br></br>
</body>
</html>





<html>
<head>
<link type="text/css" href="/jquery/ui.all.css" rel="stylesheet" />
<script type="text/javascript" src="/jquery/jquery-1.3.2.js"></script>
<script type="text/javascript" src="/jquery//ui.core.js"></script>
<script type="text/javascript" src="/jquery/ui.draggable.js"></script>
<script type="text/javascript" src="/jquery/ui.resizable.js"></script>
<script type="text/javascript" src="/jquery/ui.dialog.js"></script>
<script type="text/javascript">
   $(function() {
  var $dialog = $('div#dialog');
     $dialog.dialog({modal:true,
      autoOpen: false,
            open:function() {
              $(this).parents(".ui-dialog:first").find(".ui-dialog-titlebar-close").hide();// .remove();           
            },
            width:700,
            height:1000,
            buttons: {
    "Close": function() {
     $(this).dialog("close");
    }
   }                
        });
        
           })
    
    function clickMe(filename) {
      var $dialog = $('div#dialog');
     $dialog.dialog('open');
          $( "iframe", $dialog ).attr( "src", "viewsrc.xxx?filename=" + filename);
      }
   </script>
</head>
<body>
<div id="dialog" title="파일 내용 보기" style='display: none; text-align:center'>
 <iframe style="width: 100%; height: 100%; border: 0px;"></iframe>
 
</div>
<pre class="brush:">filename : <a href="javascript:clickMe('E:\dailybuild\web\styles\shThemeDjango.css')" >/home/www/src/conf/sql-map-misc.properties</a></pre>
<pre class="brush: java;">
2 : url=$${backend.misc.url}
3 : username=$${backend.misc.username}
4 : password=$${backend.misc.password}
 
</pre>
<br></br>
</body>
</html>


Posted by '김용환'
,

만약 톰캣 로그에서 Too many open files 가 발생한다면, 이는 os 적인 문제로 봐야 한다.
If you meet "SocketExcepton : too many open files" in tomcat log, you have to think about OS configuration.


java.net.SocketException: Too many open files

    at java.net.PlainSocketImpl.socketAccept(Native Method)

    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)

    at java.net.ServerSocket.implAccept(ServerSocket.java:453)

    at java.net.ServerSocket.accept(ServerSocket.java:421)

    at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)

    at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:407)

    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:70)

    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)

    at java.lang.Thread.run(Thread.java:619)

2009. 12. 22 ¿ÀÈÄ 1:20:32 org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket


OS에서 한 프로세스에서 최대로 사용할 수 있는 File Descriptor의 개수는 정해져 있다. 리눅스의 경우는 ulimit (csh에서는 limit)으로 확인할 수있다.

The maximum number of file descripter is followed by policy of OS. In Linux, you can find ulimit (limit on csh).

Result of "ulimit -a "

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
pending signals                 (-i) 1024
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16000
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

이 경우에는 open files 수자 1024로 되어 있다. 즉, 한 프로세스에서 사용할 수 있는 FD는 총 1024 정도 될 것이다.
In this case, open files number is 1024. So, the maximum number of file descriptors (FD) is 1024.

Tomcat 도 마찬가지로 적용될 수 있다. Tomcat에서 사용하고 있는 FD가 총 1024가 넘으면, (즉 이 말은 File , network socket을 의미한다) Too many files error 라고 Exception이 발생되고, 요청된 Request는 거절될 것이다.

Tomcat is applied like the policy. If FD used in Tomcat is over 1024, 'Too many files error' named SocketException is throwed in Tomcat, And rquest may be rejected.


<Solution>

1)/etc/security/limits.conf 파일을 수정한다.
You need to modify /etc/security/limits.conf file

vi /etc/security/limits.conf
....
#<domain>        <type>  <item>  <value>
# add those thing
* soft nofile 16000
* hard nofile 16000

open files 숫자를 1024 에서 16000 으로 늘렸다.
Increase 1024 to 16000 in the number of open files.

2) 톰캣을 리스타트 한다.
Restart Tomcat.
Posted by '김용환'
,