기대 결과


someList.get(0).getSomething() : something

someList.get(1).getSomething() : something2


실제 결과


someList.get(0).getSomething() : something2

someList.get(1).getSomething() : something2



수정 소스



기대 결과


someList.get(0).getSomething() : something

someList.get(1).getSomething() : something2


실제 결과


someList.get(0).getSomething() : something

someList.get(1).getSomething() : something2



Posted by 스트라
,

기존 소스


insertAndUpdate()는 항상 새로운 트랜잭션을 가져야하기 때문에 propagation=Propagation.REQUIRED_NEW 로 설정

Exception.class 예외가 발생했을 때 rollback 하기 위해서 rollbackFor={Exception.class} 로 설정

update() 메소드에서 강제로 Exception 발생을 시켰는데 insert() 메소드를 통해 DB에 등록된 값이 rollback이 되지 않는 것....


try...catch 문에서 Exception을 catch 하고 증발시켜버려서 Spring 이 예외를 감지하지 못한거였다.


수정 소스


잘 작동한다


참고 : https://stackoverflow.com/questions/16421508/how-to-rollback-spring-transaction-when-an-exception-is-thrown


-------------- 2019-04-17 추가

위 부분 문제가 되기 전에 삽질을 했던 것이 생각나서 추가함.


servlet-context.xml 에 component-scan 을 package 전체를 잡아놔서 안된 것도 있었다.



servlet context에는 controller 만 추가하고, 그 외는 application context에 추가한다



Posted by 스트라
,

$.ajax({

type: "GET",

url: url,

success:function(data){

var obj = JSON.parse(data);

for(var i=0; n=obj.List.Names.length; i<n; i++){

if(obj.List.Names[i] == "undefined"){

setName("기본 네임");

}else{

setName(obj.List.Names[i].value);

}

}

});


-------

cannot read property 'value' of undefined..... 발생.....


해결책 - typeof 를 사용하라


$.ajax({

type: "GET",

url: url,

success:function(data){

var obj = JSON.parse(data);

for(var i=0; n=obj.List.Names.length; i<n; i++){

if(typeof obj.List.Names[i] == "undefined"){

setName("기본 네임");

}else{

setName(obj.List.Names[i].value);

}

}

});

Posted by 스트라
,

페이스북

// 페이스북 스크립트

window.fbAsyncInit = function(){

//페이스북 앱 아이디 생성

FB.init({

appId  : 'your app id',


status : true, // check login status

cookie : true, // enable cookies to allow the server to access the session

xfbml  : true,  // parse XFBML

oauth  : true

});


FB.ui({

method: 'feed',

name: caption,

description: description,

//caption: '',

link: document.location.href,

picture: picture,  

user_message_prompt: ''

}, function(response){ // 공유 결과 리턴

if(response === null || response == undefined) { // 공유 안함

}else{ // 공유 함

alert('페북 공유 완료');

}

});

});

};

// 페이스북 스크립트

(function (d, s, id) {

   var js, fjs = d.getElementsByTagName(s)[0];

   if (d.getElementById(id)) return;

   js = d.createElement(s); js.id = id;

   js.async = true;

   js.src = "//connect.facebook.net/ko_KR/all.js#xfbml=1";

   fjs.parentNode.insertBefore(js, fjs);

}(document, 'script', 'facebook-jssdk'));




트위터



// 트위터 스크립트

$.getScript("http://platform.twitter.com/widgets.js", function(){

function handleTweetEvent(event){ // 트윗했을 시 호출되는 함수

if (event) {

alert('트윗 완료');

}

}

twttr.events.bind('tweet', handleTweetEvent); // 트윗했을 시 이벤트 바인딩

});



-> 트위터 버튼

<a href="" id="tweet" data-count="horizontal" data-url="" target="_blank">

<img src="/images/user/promotion/btn_twitter.png" style="display:none;" alt="트위터 공유" />

</a>


<script>

var link = document.location.href

var url = "https://twitter.com/intent/tweet?original_referer="+encodeURIComponent(link)+"&amp;text=" + encodeURIComponent(description) + encodeURIComponent(link);

$("#tweet").attr("href", url);

$("#tweet").attr("data-url", document.location.href);

$("#tweet")[0].click(); // 트윗 창 오픈

</script>

Posted by 스트라
,

How to remove IP in CBL spamhaus

If your ip listed in CBL black list. You can solve by this way:

Stage 1: Connect to mail server by ehlo commamd

telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
220 localhost.localdomain ESMTP Sendmail 8.13.8/8.13.8; Tue, 12 Jul 2011 15:27:02 +0700

ehlo localhost
250-localhost.localdomain Hello localhost.localdomain [127.0.0.1], pleased to meet you

If ehlo command return “localhost.localdomain”, it’s invalid. ehlo command have to return in “test.example.com” or “[192.168.9.9]“.

Stage 2: check host name

First, you may want to exercise the various host name query tools to see if they’re right, in which case you need to go no further.

The following is a sequence of commands you should execute, and their expected results (subtituting mail.example.com etc with the values you want for your machine):

shell prompt>  uname -n
mail.example.com

shell prompt>  hostname -s
mail

shell prompt>  hostname -d
example.com

shell prompt>  hostname -f
mail.example.com

shell prompt>  hostname
mail.example.com

If the results you obtain from the above commands is what you’re expecting, you’re done with this page.

Seeing localhost or localhost.localdomain are clear signs of wrongness.

If the results are wrong, first you need to check/correct your /etc/hosts file, second, you have to ensure that the machine knows which /etc/hosts entry to consult during boot (depends on which O/S you’re using), and thirdly, reboot the machine.

CHECK/CORRECT /ETC/HOSTS

If you have a static IP (even if it’s a RFC1918 private IP address behind a NAT gateway), the /etc/hosts file should contain:

127.0.0.1     localhost.localdomain localhost
1.2.3.4       mail.example.com mail

Setting /etc/hosts for DHCP is beyond the scope of this document (why would you want to run a mail server on DHCP anyway?).

Note: many (most) problems people encounter is where the node name “mail” appears in the first line, and Linux takes the first “dotted name” in that line (usually “localhost.localdomain”) as your hostname. If that’s the case, just removing it should solve your problems.

In any event, the node name (eg: “mail”) or hostname (eg: “mail.example.com”) MUST NOT appear in the 127.0.0.1 localhost line.

CHECKING /ETC/SYSCONFIG/NETWORK (REDHAT, FEDORA ET. AL.)

If you have a static IP, then /etc/sysconfig/network will have your initial hostname assignment. It should have the following lines:

NETWORKING=yes
HOSTNAME="mail.example.com"

Stage 3: edit sendmail

Sendmail’s configuration is handled by the file sendmail.cf. Depending on which Linux distro you are running, it may be in /etc/sendmail.cf or /etc/mail/sendmail.cf (probably the latter).

In many installations, the sendmail.cf file is automatically created from a set of “sendmail.mc” files.

This document describes both methods of fixing the problem. If you are using “.mc” files, you should use that method.

If you don’t configure the machine via the “.mc” file:

First, make a backup of your existing .cf file, for reference/recovery.

Sendmail gets its identity from the “j” macro. Look for the line in the .cf file that says something like:

# my official domain name
# ... define this only if sendmail cannot automatically determine your domain
#Djlocalhost.localdomain

The “Dj” bit is what you’re looking for. You’ll “D”efine the value of the “j” macro, which is the string used in the HELO when your server connects to somewhere else. You’ll need to remove the leading comment ‘#’. Example:

Djhost.mydomain.com

Stage 4: check again with ehlo command to confirm it return valid value.

Stage 5: remove ip in CBL list

Click on CBL
Roll Down webpage, you will see below text
WARNING: If you continually delist 203.176.130.70 without fixing the problem,the CBL will eventually stop allowing the delisting of 203.176.130.70

// //


Posted by 스트라
,

'Spring Framework' 카테고리의 다른 글

log4jdbc-remix 설정  (0) 2014.08.01
jstl fn 문자열 함수  (0) 2014.07.28
스마트 에디터  (0) 2014.07.22
페이징  (0) 2014.07.16
[Mybatis] XML 파일에 부등호 포함 쿼리 넣을 때 주의점.  (0) 2014.07.07
Posted by 스트라
,
문의 게시판을 작업하고 있었다.

문의 답변을 적는 스마트 에디터 부분이 화면이 로드될 때마다 이상한 곳으로 이동하고, DB에서 가져온 문의 답변 내용이 사라지는 것이다. 하... 뭐지 대체... 스마트 에디터 쪽은 건드린 게 없는데... 이거 저거 다 해보며 삽질을 했다.

삽질이 너무 길어져 결국 도움 요청.....


1분만에 해결됨.... ㅜㅜ

jsp 코드 상에 id가 contents 인게 두개가 있던 것이다.

하나는 최상위에 있던 <div id="contents"></div>

하나는 내가 적용하려 했던 <textarea id="contents"></textarea>

먼저, 최상위에 있던 contents에 스마트 에디터가 적용이 돼서 문제가 발생한 것이였다.....

textarea의 id를 content로 바꾸고, 스크립트에 에디터 추가하는 부분도 elPlaceHolder : "content" 로 변경하고 새로고침을 해보니 잘 된다.

아아.. 삽질 싫어..

Posted by 스트라
,

https://code.google.com/p/log4jdbc-remix/   -> 현재 remix 프로젝트는 종료가 되었다.

https://code.google.com/p/log4jdbc-log4j2/   -> remix 프로젝트에서 사용을 추천하는 것



log4jdbc-remix 설정 방법

http://hnsnmn.blogspot.kr/2014/02/spring-sql.html



SQL Log 직관적으로 볼수 있는 방법이 존재하지 않을까 해서 구글링 해보니 역시나..ㅋㅋog4jdbc-remix 입니다. 설치전에 집고 넘어가야 하는 부분이 있는데, maven repository와 jdk 1.6에서만 지원 가능합니다. 이점 유의하시고 진행해야 될거 같네요. 설치법은 우선 간단합니다.

1. maven인 경우 설치 방법

  1. <dependency>  
  2.   <groupid>org.lazyluke</groupid>  
  3.   <artifactid>log4jdbc-remix</artifactid>  
  4.   <version>0.2.4</version>  
  5. </dependency>  
  6. <dependency>  
  7.   <groupid>org.slf4j</groupid>  
  8.   <artifactid>slf4j-log4j12</artifactid>  
  9.   <version>1.6.1</version>  
  10. </dependency>  

2. classpath로 설정 하는 경우 설치 방법

log4j, slf4j, log4jdbc, log4jdbc-remix를 다운 받아서 클래스 패스 설정을 하시면 됩니다. log4jdbc, slf4j, log4jdbc : http://code.google.com/p/log4jdbc/ log4jdbc-remix : http://code.google.com/p/log4jdbc-remix/ 이렇게 lib파일을 등록 했으면 이제 log4j.xml 설정을 합니다.

  1. <!--?xml version="1.0" encoding="UTF-8" ?-->  
  2.   
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  
  4.  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">  
  5.   <layout class="org.apache.log4j.PatternLayout">  
  6.    <param name="ConversionPattern" value="%p - %C{1}.%M(%L) | %m%n">  
  7.   </layout>  
  8.   <filter class="org.apache.log4j.varia.StringMatchFilter">  
  9.    <param name="StringToMatch" value="Result">  
  10.    <param name="AcceptOnMatch" value="false">  
  11.   </filter>  
  12.  </appender>  
  13.   
  14.  <logger name="jdbc.resultsettable" additivity="false">  
  15.   <level value="info">  
  16.   <appender-ref ref="CONSOLE">  
  17.  </appender-ref></level></logger>  
  18.  <logger name="jdbc.audit">  
  19.   <level value="warn">  
  20.   <appender-ref ref="CONSOLE">  
  21.  </appender-ref></level></logger>  
  22.   
  23.   
  24.  <logger name="jdbc.resultset" additivity="false">  
  25.   <level value="warn">  
  26.   <appender-ref ref="CONSOLE">  
  27.  </appender-ref></level></logger>  
  28.   
  29.  <logger name="jdbc.sqltiming" additivity="false">  
  30.   <level value="warn">  
  31.   <appender-ref ref="CONSOLE">  
  32.  </appender-ref></level></logger>  
  33.   
  34.  <root>  
  35.   <priority value="info">  
  36.   <appender-ref ref="CONSOLE">  
  37.  </appender-ref></priority></root>  
  38. </log4j:configuration>  

좀 다른 부분이 logger name이 기존하고는 좀 다른것을 확인하실 수 있을겁니다. 다음으로는 applicationContext.xml에서 dataSource를 변경합니다.

  1. <bean id="dataSource" class="...">  
  2.     <property name="driverClass" value="${datasource.driverClassName}">  
  3.     <property name="jdbcUrl" value="${datasource.url}">  
  4.     <property name="user" value="${datasource.username}">  
  5.     <property name="password" value="${datasource.password}">  
  6.     ...  
  7. </property></property></property></property></bean>  
  8. [/code]  
  9.   
  10. 기존에 이런식으로 설정이 되어있을 것이며 이부분을 밑에 처럼 변경합니다.  
  11.   
  12. [code language="xml"]  
  13. <!-- DataBase -->  
  14. <bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  15.  <property name="driverClassName" value="com.mysql.jdbc.Driver">  
  16.  <property name="url" value="jdbc:mysql://localhost:3306/hnsnmn_db">  
  17.  <property name="username" value="hnsnmn">  
  18.  <property name="password" value="0000">  
  19. </property></property></property></property></bean>  
  20. <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">  
  21.  <constructor-arg ref="dataSourceSpied">  
  22.  <property name="logFormatter">  
  23.   <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">  
  24.    <property name="loggingType" value="MULTI_LINE">  
  25.    <property name="margin" value="19">  
  26.    <property name="sqlPrefix" value="SQL:::">  
  27.   </property></property></property></bean>  
  28.  </property>  
  29. </constructor-arg></bean>  



http://beyondj2ee.tumblr.com/post/14507640070/spring-powerful-sql


(1) Maven인 경우

<dependency>

  <groupId>org.lazyluke</groupId>

  <artifactId>log4jdbc-remix</artifactId>

  <version>0.2.4</version>

</dependency>

<dependency>

  <groupId>org.slf4j</groupId>

  <artifactId>slf4j-log4j12</artifactId>

  <version>1.6.1</version>

</dependency>


(2) classpath로 설정 하는 경우


log4j, slf4j, log4jdbc, log4jdbc-remix를 다운 받아서 클래스 패스 설정을 하시면 됩니다.


log4jdbc, slf4j, log4jdbc : http://code.google.com/p/log4jdbc/

log4jdbc-remix : http://code.google.com/p/log4jdbc-remix/


log4j.xml 설정 하기


<?xml version=”1.0” encoding=”UTF-8”?>

<!DOCTYPE log4j:configuration PUBLIC “-//LOGGER” “log4j.dtd”>


<log4j:configuration xmlns:log4j=”http://jakarta.apache.org/log4j/”>


    <appender name=”console” class=”org.apache.log4j.ConsoleAppender”>

        <param name=”Target” value=”System.out” />

        <layout class=”org.apache.log4j.PatternLayout”>

            <param name=”ConversionPattern” 

value=”[%d{yyyy-MM-dd HH:mm:ss}] %-5p: %c - %m%n” />

        </layout>

    </appender>


    <logger name=”jdbc.resultsettable” additivity=”false”>

        <level value=”info” />

        <appender-ref ref=”console” />

    </logger>


    <logger name=”jdbc.audit” additivity=”false”>

        <level value=”warn” />

        <appender-ref ref=”console” />

    </logger>


    <logger name=”jdbc.resultset” additivity=”false”>

        <level value=”warn” />

        <appender-ref ref=”console” />

    </logger>

    

    <logger name=”jdbc.sqltiming” additivity=”false”>

        <level value=”warn” />

        <appender-ref ref=”console” />

    </logger>

        

    <!— Root Log Level —>

    <root>

        <priority value=”info” />

        <appender-ref ref=”console” />

    </root>

</log4j:configuration>

Spring Datasource 설정 하기

<!— datasource —>

    <jdbc:embedded-database id=”hsqlDataSource”

        type=”HSQL”>

        <jdbc:script location=”classpath:schema.sql” />

    </jdbc:embedded-database>


    <!— sql spy —>

    <bean id=”dataSource” class=”net.sf.log4jdbc.Log4jdbcProxyDataSource”>

        <constructor-arg ref=”hsqlDataSource” />

        <property name=”logFormatter”>

            <bean class=”net.sf.log4jdbc.tools.Log4JdbcCustomFormatter”>

                <property name=”loggingType” value=”MULTI_LINE” />

                <property name=”margin” value=”19” />

                <property name=”sqlPrefix” value=”SQL:::” />

            </bean>

        </property>

    </bean>



http://goodwilldd.blogspot.kr/2012/06/mybatis-query.html



myBatis query 로그 출력하기

myBatis 의 query를 콘솔에 찍는 많은 방법이 있지만


사용해본 것 중에 가장 간단하고 편한 방법을 소개하고자 한다.


log4jdbc-remix(log4jdbc 를 참고) 라는 것이다.


설정하는 방법은 다음과 같다.




<!-- log4jdbc -->

<dependency>

 <groupId>org.lazyluke</groupId>

 <artifactId>log4jdbc-remix</artifactId>

 <version>0.2.7</version>

</dependency>




위 내용을 pom.xml 에 추가한다.


다음에는 2가지 방법이 있는데, 편한 방법으로 적용하면 된다.


우선 공통 적용 사항은 log4j.xml에



<logger name="jdbc.resultsettable" additivity="false">

 <level value="info" />

 <appender-ref ref="console" />

</logger>


resulttable을 보여주는 부분


<logger name="jdbc.sqlonly" additivity="false">

 <level value="info" />

 <appender-ref ref="console" />

</logger>


쿼리를 출력하는 부분(debug로 설정하면 자세히 나온다)을 추가한다.



해당 부분에 대한 자세한 내용은 log4jdbc set up your logger 를 참고한다.



첫 번째, 방법은 jdbc.properties를 다음과 같이 변경한다.



jdbc.driverClass=net.sf.log4jdbc.DriverSpyjdbc.url=jdbc:log4jdbc:mysql://000.000.000.000:3306/xxxx

jdbc.username=xxxx

jdbc.password=xxxx



두 번째, 방법은



<bean id="logDataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">

 <constructor-arg ref="기존DATASOURCE ID" />

 <property name="logFormatter">

  <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">

   <property name="loggingType" value="MULTI_LINE" />

   <property name="sqlPrefix" value="SQL:::" />

  </bean>

 </property>

</bean>


변경 후, myBatis 설정에서 기존에 datasource id를 logDataSource 로 변경해주는 방법이다

Posted by 스트라
,


HTML

<input type="radio" id="confirm" name="radioValue" value="Y" checked="checked"/>

<input type="radio" id="unknown" name="radioValue" value="N"/>


1. 체크된 radio의 value 가져오기

var radioVal = $(':radio[name="radioValue"]:checked').val();


2. radio 버튼 체크하기

// name이 radioValue고, value가 Y인 라디오 버튼 체크

$('input:radio[name=radioValue]:input[value="Y"]').attr("checked", true);


// id가 confirm인 radio 체크

$('#confirm').attr("checked", true);


'JQuery' 카테고리의 다른 글

[JQuery] simple datepicker 사용  (0) 2014.07.31
Posted by 스트라
,

var oEditors = [];

nhn.husky.EZCreator.createInIFrame({

    oAppRef: oEditors,

    elPlaceHolder: "contents",

    sSkinURI: "/share/js/SmartEditor/SmartEditor2Skin.html",

    fCreator: "createSEditor2",

    htParams : {fOnBeforeUnload : function(){}} // 이페이지 나오기 alert 삭제

});


뷰 페이지에서 스마트 에디터를 호출한 곳에서

htParams : {} 안에

fOnBeforeUnload : function() {} 를 추가해주면 빠져나갈 때 뜨는 경고창이 사라진다.

Posted by 스트라
,