세션클러스터링을 이용하기 위해 검색하면 많이 나오는 방법을 사용했지만 리눅스 eth0 설정부터

방화벽등으로 쉽지 않음.

 

WAS끼리 직접 서로 주고 받게 설정.

 

<Engine 설정의 맨 마지막 부분 jvmRoute는 apache에서 mod_jk 명칭으로 변경

 

<Receiver 의 설정은 현재 Was에서 받는 IP 및 Port 를 설정

<Member 의 내용은 세션클러스터링 할 WAS IP 및 PORT 설정을 각자 맞게 넣고 설정하면 됨.

uniqueId 의 내용은 맨 끝의 1번 WAS에서는 2로 설정 2번 WAS에서는 1로 설정

 

1번 WAS 클러스터링

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
        <!-- clustering -->
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"  channelStartOptions="3">
                <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
                <Channel className="org.apache.catalina.tribes.group.GroupChannel">
                        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
                        </Sender>
                        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                        address="127.0.0.1"
                        port="4055"
                        autoBind="0"
                        selectorTimeout="5000"
                        maxThreads="6"/>

                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor" staticOnly="true"/>
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                        <Member
                                className="org.apache.catalina.tribes.membership.StaticMember"
                                port="4056"
                                host="127.0.0.1"
                                uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2}"
                        />
                        </Interceptor>
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
                </Channel>

                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" />
                <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
                <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
        </Cluster>
        <!-- clustering  -->

 

2번 WAS

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
        <!-- clustering -->
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"  channelStartOptions="3">
                <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
                <Channel className="org.apache.catalina.tribes.group.GroupChannel">
                        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
                        </Sender>
                        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                        address="127.0.0.1"
                        port="4056"
                        autoBind="0"
                        selectorTimeout="5000"
                        maxThreads="6"/>

                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor" staticOnly="true"/>
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                        <Member
                                className="org.apache.catalina.tribes.membership.StaticMember"
                                port="4055"
                                host="127.0.0.1"
                                uniqueId="{0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}"
                        />
                        </Interceptor>
                        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
                </Channel>

                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" />
                <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
                <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
        </Cluster>
        <!-- clustering  -->

 

의 설정으로 실행 후 정상적으로 세션클러스터링이 동작함.

물론 iptables에서 각 4055, 4056 포트는 열어줌..

'개발자 > Server' 카테고리의 다른 글

톰켓 운영 옵션  (0) 2019.01.18
톰켓 심볼릭 링크 인식하기  (1) 2019.01.03
PHP CONFIGURE  (0) 2014.05.23
MYSQL CONFIGURE  (0) 2014.05.23
mysql 외부연결  (0) 2014.05.23
Posted by Swamp of hope
,
vi %TOMCAT_HOME%\bin\setenv.sh

CATALINA_OPTS="-Dserver=dev"
JAVA_OPTS=$JAVA_OPTS" -Dfile.encoding=UTF-8 -server -Xms2048m -Xmx2048m -XX:NewSize=512m"
JAVA_OPTS=$JAVA_OPTS" -XX:MaxNewSize=512m -XX:PermSize=1024m -XX:MaxPermSize=1024m"
JAVA_OPTS=$JAVA_OPTS" -Djava.security.egd=file:/dev/./urandom"
JAVA_OPTS=$JAVA_OPTS" -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs"
JAVA_OPTS=$JAVA_OPTS" -XX:ParallelGCThreads=2 -XX:-UseConcMarkSweepGC"
JAVA_OPTS=$JAVA_OPTS" -XX:-PrintGC -XX:-PrintGCDetails -XX:-PrintGCTimeStamps"
JAVA_OPTS=$JAVA_OPTS" -XX:-TraceClassUnloading -XX:-TraceClassLoading"
CATALINA_OPTS="-Dserver=dev"
는 운영서버와 개발서버 구분으로 context-config.xml등 프로퍼티 설정에서
#{systemProperties['server'] != null ?systemProperties['server'] : 'dev'}
를 이용하면 된다.

아래는 예제.
<util:properties id="dbProp" location="classpath:conf/spring/db.#{systemProperties['server'] != null ?systemProperties['server'] : 'dev'}.properties" />
를 이용하여 local dev live 등으로 서버등을 구분할 수 있다.
JAVA_OPTS 는 다른 부분은 별 상관 없으나 CENTOS 또는 JAVA버전에서 톰켓 실행이 늦을 때
-Djava.security.egd=file:/dev/./urandom
의 옵션을 붙여주면 빠르게 실행 된다.
%TOMCAT_HOME%\BIN 폴더에
setenv.sh파일에 넣어주면 catalina.sh 안에 설정을 안해줘도 알아서 인식


'개발자 > Server' 카테고리의 다른 글

Tomcat 세션 클러스터링 멀티캐스트를 이용하지 않는 방법.  (2) 2020.01.15
톰켓 심볼릭 링크 인식하기  (1) 2019.01.03
PHP CONFIGURE  (0) 2014.05.23
MYSQL CONFIGURE  (0) 2014.05.23
mysql 외부연결  (0) 2014.05.23
Posted by Swamp of hope
,

한동안 톰켓 6버전만 사용하고 7버전때 잠깐 고생했던거 같은데 1년전이라 기억도 안남.


심볼릭링크로 연결된 upload 폴더가 톰켓 8.5버전에서 인식이 안됨.


<-- 기존 사용법 -->
<Host name="localhost" docBase="webaaps" allowlinking="true" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="경로" reloadable="true" useHttpOnly="false" allowLinking="true" />
</Host>
<!-- 변경1 -->
<Host name="localhost" docBase="webaaps" allowlinking="true" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="경로" reloadable="true" useHttpOnly="false">
<Resources allowLinking="true" />
</Context>
</Host>
<!-- 변경2 -->
<Host name="localhost" docBase="webaaps" allowlinking="true" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="경로" reloadable="true" useHttpOnly="false">
<Resources>
<PreResourcesa
className="org.apache.catalina.webresources.DirResourceSet"
base="경로/upload"
webAppMount="/upload"
internalPath="/"/>
</Resources>
</Context>
</Host>

이것 저것 다 시도 해봤으나 적용 안됨.
안그래도 바쁜 시기에 별것도 아닌거 가지고 한시간을 날려버럼..

Tomcat 폴더/conf/context.xml 안에 
<Context> 태그가 있다 그 안에 

<Resources allowLinking="true" />

한줄 넣고 모든게 해결.


'개발자 > Server' 카테고리의 다른 글

Tomcat 세션 클러스터링 멀티캐스트를 이용하지 않는 방법.  (2) 2020.01.15
톰켓 운영 옵션  (0) 2019.01.18
PHP CONFIGURE  (0) 2014.05.23
MYSQL CONFIGURE  (0) 2014.05.23
mysql 외부연결  (0) 2014.05.23
Posted by Swamp of hope
,
MYSQL에서 마이그레이션 도중에 AES_ENCRYPT, AES_DECRYPT를 사용 한 컬럼 때문에 고민

google 신이 도와줌..

아 어짜피 MYSQL 이제 오라클꺼니까..  서로 호환 되는건가..






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.GregorianCalendar;
 
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
 
import org.apache.commons.codec.binary.Hex; 
 
public class AesUtil {
    public static void main(String[] args) throws Exception{
        // Encrypt
        final Cipher encryptCipher = Cipher.getInstance("AES");                            
        encryptCipher.init(Cipher.ENCRYPT_MODE, generateMySQLAESKey("암호키""UTF-8"));        
        System.out.println(new String(Hex.encodeHex(encryptCipher.doFinal("암호화 될 변수".getBytes("UTF-8")))).toUpperCase()); 
        
        // Decrypt
        final Cipher decryptCipher = Cipher.getInstance("AES");                            
        decryptCipher.init(Cipher.DECRYPT_MODE, generateMySQLAESKey("암호키""UTF-8"));
        System.out.println(new String(decryptCipher.doFinal(Hex.decodeHex("33362642F191A6FA40E6F2341001D969AE9640831F2314DD7B18832DA8A077B0".toCharArray()))));
    }
    
    public static SecretKeySpec generateMySQLAESKey(final String key, final String encoding) {
        try {
            final byte[] finalKey = new byte[16];
            int i = 0;
            for(byte b : key.getBytes(encoding))
                finalKey[i++%16] ^= b;            
            return new SecretKeySpec(finalKey, "AES");
        } catch(UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
}
 
 
cs


Posted by Swamp of hope
,

오라클 UTL_URL.ESCAPE

개발자 2016. 7. 27. 10:21

오라클에서 URL을 만들 때, 영문을 제외한 문자들이 IE주소창에서 변환이 안되어 깨지는 경우


아래 함수 사용.


SELECT UTL_URL.ESCAPE(URL => '한글', URL_CHARSET =>  'UTF-8') FROM DUAL



'개발자' 카테고리의 다른 글

윈도우 팁.  (0) 2015.05.10
SYBASE 에서 ALIAS 적용 시 에러 발생 처리 법  (0) 2014.10.22
MS-SQL 에서 쿼리로 컬럼 조회방법  (0) 2014.08.07
Posted by Swamp of hope
,

전자정부 프레임워크에서 발생하는 iBatis 에러 .


Caused by: com.ibatis.sqlmap.client.SqlMapException: Error.  Could not initialize class.  Cause: java.lang.ClassNotFoundException



typeAlias 로 선언된 건 resultClass

resultMap 으로 선언한 건 resultMap 


대충 복붙으로 하다보니 생긴 에러.


Posted by Swamp of hope
,

윈도우 팁.

개발자 2015. 5. 10. 01:47

적은 용량의 ssd를 사용하다 보니 아래와 같은 폴더 때문에 하드가 꽉차서 해결방안을 찾다보니 나온방법.


원글은


http://blog.daum.net/sunyup/80


입니다.



Windows 7/8에서 사용자(Users), Program Files, Program Files (x86) 폴더를 D드라이브로 이동켜서 심볼릭 링크로 링크시키는 방법을 소개하고자 합니다. 심볼릭 링크에 대한 자세한 설명은 이전 글의 내용을 읽어보시길 바랍니다. 사용자 폴더의 경우 간단하게 사용자 폴더의 자신의 계정 폴더 안의 [내 문서], [내 사진] , [즐겨찾기] 등의 폴더를 잘라내기해서 옮겨줄 수도 있지만 저 처럼 사용자 폴더 자체를 통째로 옮기길 원하시는 분들도 계실 것입니다. 저는 그 방법을 소개하고자 합니다.

 

심볼릭 링크를 이용하는 이유는 보통 프로그램이나 게임을 설치하면 C드라이브에 설치가 됩니다. 설치 경로를 D드라이브로 변경할 수 있지만 일부의 경우 레지스트리 등의 문제로 실행이 안되는 경우도 있고, C드라이브로 자동으로 설치되는 경우도 있습니다. 심볼릭 링크를 이용하면 설치 경로가 C드라이브로 돼있어도 실질적으로는 D드라이브에 설치가 되지만 실행해는 문제가 생기지 않기 때문에 사용자(Users), Program Files, Program Files (x86) 폴더를 통째로 D드라이브로 옮겨주고 링크를 걸어주는 것입니다.

 

바로 본론으로 들어가겠습니다. 먼저 PE 화면으로 진입을 해야하는데 잘 모르시는 분들도 계실테니 PE 화면 진입하는 방법부터 알아보겠습니다. 각각 방법은 2가지 정도 됩니다.

 

Windows 7 사용자

- 1. 부팅 시 [F8] 키를 눌러 [컴퓨터 복구]를 눌러 나오는 화면에서 [명령 프롬프트]를 실행

- 2. Windows 7 DVD나 USB로 부팅하여 첫 화면에서 Shift+F10 키를 눌러 [명령 프롬프트]를 실행

 

Windows 8 사용자

- 1. 부팅 속도가 빨라 부팅 시 [F8] 키가 잘 안먹히므로 Windows 상에서 [명령 프롬프트]를 관리자 권한으로 실행하여 shutdown.exe /r /o 명령어를 입력하여 [복구 모드]로 진입한다음 [문제 해결]-[고급 옵션]에서 [명령 프롬프트]를 실행

- 2. Windows 8 DVD나 USB로 부팅하여 첫 화면에서 Shift+F10 키를 눌러 [명령 프롬프트]를 실행

 

 

위의 방법으로 [명령 프롬프트]를 띄웠다면 아래 명령어를 차례대로 입력해줍니다. 세줄만 입력해 주면 끝이므로 매우 쉽습니다.

 

 

※참고로 타이핑이 번거롭거나 귀찮으신 분들은 아래 명령어를 전체 다 메모장에 복사해서 외장하드 or USB 등의 저장 매체나 C, D드라이브에 텍스트 파일로 저장해 줍니다. 그리고나서 PE 화면의 [명령 프롬프트]에서 'notepad'를 입력하여 [메모장]을 실행한 후 [열기]를 눌러 저장했던 텍스트 파일을 불러와서 입력되어 있는 명령어를 세줄씩 복사한 다음 [명령 프롬프트] 창에 마우스 오른쪽 클릭을 하면 붙여넣기기 됩니다. 한줄씩 복사해도 되고 세줄다 한꺼번에 복사해도 됩니다. 마지막 줄에선 Enter를 쳐줘야 마지막 줄이 실행이 됩니다. 그러면 모든 작업이 완료가 됩니다.

 

 

[사용자(Users) 폴더 옮기기]

robocopy C:\Users D:\Users /E /COPYALL /XJ

rd /q/s C:\Users

mklink /D C:\Users D:\Users

 

[Program Files 폴더 옮기기]

robocopy "C:\Program Files" "D:\Program Files" /E /COPYALL /XJ

rd /q/s "C:\Program Files"

mklink /D "C:\Program Files" "D:\Program Files"

 

[Program Files (x86) 폴더 옮기기]

robocopy "C:\Program Files (x86)" "D:\Program Files (x86)" /E /COPYALL /XJ

rd /q/s "C:\Program Files (x86)"

mklink /D "C:\Program Files (x86)" "D:\Program Files (x86)"

 

여기서 내용 추가합니다. [ProgramData] 폴더 옮기는 걸 깜빡해서 말입니다. 숨긴 항목으로 되어있어 눈에 안보여서 깜박했네요. ㅡㅡ;

[ProgramData 폴더 옮기기]

robocopy "C:\ProgramData" "D:\ProgramData" /E /COPYALL /XJ

rd /q/s "C:\ProgramData"

mklink /D "C:\ProgramData" "D:\ProgramData"

'개발자' 카테고리의 다른 글

오라클 UTL_URL.ESCAPE  (0) 2016.07.27
SYBASE 에서 ALIAS 적용 시 에러 발생 처리 법  (0) 2014.10.22
MS-SQL 에서 쿼리로 컬럼 조회방법  (0) 2014.08.07
Posted by Swamp of hope
,

eclipse.ini




-startup

plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar

--launcher.library

plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20120913-144807

-product

org.eclipse.epp.package.jee.product

--launcher.defaultAction

openFile

--launcher.XXMaxPermSize

256M

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256m

--launcher.defaultAction

openFile

-vm

c:/JAVA/1.6-64/bin/javaw.exe

-vmargs

-Dfile.encoding=UTF-8

-Dosgi.requiredJavaVersion=1.6

-Xverify:none

-Dhelp.lucene.tokenizer=standard

-XX:+AggressiveOpts

-XX:+UseConcMarkSweepGC        

-XX:+CMSParallelRemarkEnabled

-XX:+UseParNewGC

-XX:PermSize=128m

-XX:MaxPermSize=512m

-XX:NewSize=128m

-XX:MaxNewSize=512m

-Xms1024m

-Xmx1024m

Posted by Swamp of hope
,

기본적인 쿼리는 MS-SQL 과 비슷한 듯하다.


다만 ALIAS 를 사용 시에  + '' 을 붙여주지 않으면 에러가 발생하게 되어있음.


제주도에서 이거 때문에 30분 날림


그래도 밥은 먹었으니까..


1
SELECT TOP 10 COLUMN_NAME + '' AS NEW_CULUMN_NAME FROM TABLE


'개발자' 카테고리의 다른 글

오라클 UTL_URL.ESCAPE  (0) 2016.07.27
윈도우 팁.  (0) 2015.05.10
MS-SQL 에서 쿼리로 컬럼 조회방법  (0) 2014.08.07
Posted by Swamp of hope
,
1
2
3
4
5
select o.name TableName, c.name ColumnName, t.name usertypename, c.max_length
from sys.all_columns  c
inner join sys.types t on c.user_type_id = t.user_type_id
inner join sys.all_objects o on c.object_id = o.object_id and o.type = 'U'
WHERE o.name = '테이블명'

쿼리를 보면 이것저것 변환할 수 있을 듯.


'개발자' 카테고리의 다른 글

오라클 UTL_URL.ESCAPE  (0) 2016.07.27
윈도우 팁.  (0) 2015.05.10
SYBASE 에서 ALIAS 적용 시 에러 발생 처리 법  (0) 2014.10.22
Posted by Swamp of hope
,