원본 : http://pcottle.github.io/learnGitBranching/
한글 : http://learnbranch.urigit.com/ (원본 대비 일부 내용 없음)
Java.Net loper
Java, .Net 관련 개발자 며리군의 포트폴리오
2014년 5월 29일 목요일
2014년 5월 20일 화요일
Spring 3 DefaultAdvisorAutoProxyCreator 와 자기 참조 이슈
신기하다.
자기참조(순환참조)가 있을 시 스프링 환경설정에서 DefaultAdvisorAutoProxyCreator 를 사용하게 되면 아래와 같은 오류가 나온다.
대충 검색해본 결과 DefaultAdvisorAutoProxyCreator가 ...
한다고 한다. -_ -
출처 : http://openframework.or.kr/framework_reference/spring/ver2.0-M4/html/aop.html
공부 좀 더 해봐야겠다d
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'sqlService': Bean with name 'sqlService' has been injected into other beans [sqlService] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:546)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:103)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
at org.springframework.test.context.support.DelegatingSmartContextLoader.loadContext(DelegatingSmartContextLoader.java:228)
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148)
... 24 more
자기참조(순환참조)가 있을 시 스프링 환경설정에서 DefaultAdvisorAutoProxyCreator 를 사용하게 되면 아래와 같은 오류가 나온다.
대충 검색해본 결과 DefaultAdvisorAutoProxyCreator가 ...
7.10.1.2. DefaultAdvisorAutoProxyCreator
좀더 일반적이고 굉장히 강력한 자동 프록시 생성자는 DefaultAdvisorAutoProxyCreator이다. 이것은 autoproxy advisor의 bean정의내 특정 bean이름을 포함할 필요없이 현재 컨텍스트에 적절한 advisor를 자동적으로 적용할것이다. 이것은 일관적인 설정의 장점과 BeanNameAutoProxyCreator처럼 중복의 회피를 제공한다.
한다고 한다. -_ -
출처 : http://openframework.or.kr/framework_reference/spring/ver2.0-M4/html/aop.html
공부 좀 더 해봐야겠다d
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'sqlService': Bean with name 'sqlService' has been injected into other beans [sqlService] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:546)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:103)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1)
at org.springframework.test.context.support.DelegatingSmartContextLoader.loadContext(DelegatingSmartContextLoader.java:228)
at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148)
... 24 more
2014년 5월 19일 월요일
JUnit 과 Maven test 에서 UTF-8 인코딩 이슈
이클립스를 기준으로 작성한다.
JUnit 테스트를 사용했을 경우 인코딩 이슈가 없으나,
이 JUnit 테스트를 Maven으로 돌릴경우 로그상 한글이 깨지는 경우가 있다.
JUnit의 경우에는
Windows > Run > Run Configurations > 해당 JUnit > Common 탭을 클릭하면
Encoding 항목을 UTF-8로 바꾸면 된다.
Maven test 골의 경우
Windows > Run > Run Configuration > 해당 메이븐실행 > Common 탭을 클릭
Encoding 항목을 UTF-8로 바꾸고
pom 파일에서
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
추가
후
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14</version>
<configuration><argLine>-Dfile.encoding=UTF-8</argLine</configuration>
</plugin>
하면 됨
메이븐 콘솔아웃이 말그대로 stdio가 아니라 fileio 라서 해당 설정이 필요함
JUnit 테스트를 사용했을 경우 인코딩 이슈가 없으나,
이 JUnit 테스트를 Maven으로 돌릴경우 로그상 한글이 깨지는 경우가 있다.
JUnit의 경우에는
Windows > Run > Run Configurations > 해당 JUnit > Common 탭을 클릭하면
Encoding 항목을 UTF-8로 바꾸면 된다.
Maven test 골의 경우
Windows > Run > Run Configuration > 해당 메이븐실행 > Common 탭을 클릭
Encoding 항목을 UTF-8로 바꾸고
pom 파일에서
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
추가
후
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14</version>
<configuration><argLine>-Dfile.encoding=UTF-8</argLine</configuration>
</plugin>
하면 됨
메이븐 콘솔아웃이 말그대로 stdio가 아니라 fileio 라서 해당 설정이 필요함
2014년 4월 24일 목요일
Oracle 에서 트리거(trigger)를 이용한 열 자동증분(auto increment) 기능 구현
CREATE TABLE T_API_AUTH
(
SEQ NUMBER (5) NOT NULL ,
KEY VARCHAR2 (20) NOT NULL ,
TITLE VARCHAR2 (200) ,
IPS VARCHAR2 (2000) ,
MEMO VARCHAR2 (4000)
)
;
COMMENT ON TABLE T_API_AUTH IS 'API 인증 정보'
;
COMMENT ON COLUMN T_API_AUTH.SEQ IS '순번'
;
COMMENT ON COLUMN T_API_AUTH.KEY IS '인증키'
;
COMMENT ON COLUMN T_API_AUTH.TITLE IS '제목'
;
COMMENT ON COLUMN T_API_AUTH.IPS IS '인증IP들'
;
COMMENT ON COLUMN T_API_AUTH.MEMO IS '메모'
;
CREATE UNIQUE INDEX T_API_AUTH_KEY_INDEX ON T_API_AUTH
(
KEY ASC
)
;
ALTER TABLE T_API_AUTH
ADD CONSTRAINT T_API_AUTH_PK PRIMARY KEY ( SEQ ) ;
CREATE SEQUENCE T_API_AUTH_SEQ_SEQ
NOCACHE
ORDER ;
CREATE OR REPLACE TRIGGER T_API_AUTH_SEQ_TRG
BEFORE INSERT ON T_API_AUTH
FOR EACH ROW
WHEN (NEW.SEQ IS NULL)
BEGIN
SELECT T_API_AUTH_SEQ_SEQ.NEXTVAL INTO :NEW.SEQ FROM DUAL;
END;
CentOS 6.X에 OpenLDAP 설치 매뉴얼
설치
아래의 명령어를 이용하여 OpenLDAP Server 를 설치합니다.
1
|
yum install -y openldap openldap-servers openldap-clients
|
설정전 준비
root 패스워드 생성
아래의 명령을 이용하여 OpenLDAP 의 암호화된 root 패스워드를 생성한 후 해당 데이터를 임의의 공간에 저장해 놓습니다.
1
|
slappasswd -s <password>
|
정상적을 실행시 아래와 같이 암호화된 패스워드가 출력이 됩니다.
1
|
{SSHA}PEZj3CnwpNAisWStq+Uqy6Hd6ZmEetBG
|
LDIF 파일생성
LDAP 의 기본 구조를 생성하기 위하여 아래와 같이 LDIF (LDAP Data Interchange Format) 파일을 생성합니다.
1
|
vi /root/base.ldif
|
아래와 같이 입력한 후 저장합니다.
/root/base.ldif
Vim
1
2
3
4
5
6
7
8
9
|
dn: dc=beany,dc=co,dc=kr
dc: beany
objectClass: top
objectClass: domain
dn: ou=dev,dc=beany,dc=co,dc=kr
ou: dev
objectClass: top
objectClass: organizationalUnit
|
설정
OpenLDAP
OpenLDAP Server 설정 정보파일을 복사하여 생성합니다.
1
|
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
|
설정파일을 편집합니다.
1
|
vi /etc/openldap/slapd.conf
|
아래와 같이 설정정보를 변경합니다.
/etc/openldap/slapd.conf
Vim
1
2
3
4
5
6
7
8
9
|
#######################################################################
# database definitions
#######################################################################
database bdb
suffix "dc=beany,dc=co,dc=kr"
checkpoint 1024 15
rootdn "cn=Manager,dc=beany,dc=co,dc=kr"
rootpw {SSHA}PEZj1CnwpFAisWStq+Uqy6Hd6ZmEetBG
|
최초 설치시에 있는 설정파일을 삭제한 후 DB_CONFIG 파일을 복사합니다.
1
2
|
rm -rf /etc/openldap/slapd.d/*
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
|
LDIF 파일을 통하여 LDAP 객체를 추가합니다.
1
|
slapadd -v -l /root/base.ldif
|
정상적으로 LDIF 파일 추가시 아래와 같은 메시지가 나타납니다.
1
2
3
4
5
|
The first database does not allow slapadd; using the first available one (2)
added: "dc=beany,dc=co,dc=kr" (00000001)
added: "ou=dev,dc=beany,dc=co,dc=kr" (00000002)
_#################### 100.00% eta none elapsed none fast!
Closing DB...
|
아래의 명령을 실행하여 설정 파일을 생성합니다.
1
|
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
|
정상적으로 명령수행시 아래와 같은 메시지가 나타납니다.
1
|
config file testing succeeded
|
설정폴더의 권한을 변경합니다.
1
2
|
chown ldap.ldap -Rf /etc/openldap/slapd.d/*
chown ldap.ldap -Rf /var/lib/ldap/*
|
방화벽 (iptables)
방화벽 정책파일을 편집합니다.
1
|
vi /etc/sysconfig/iptables
|
LDAP 기본 Port 389 번을 추가시킨후 저장합니다.
/etc/sysconfig/iptables
Vim
1
|
-A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT
|
iptables 서비스를 재시작합니다.
1
|
service iptables restart
|
정상적으로 실행시 아래와 같이 메시지가 출력됩니다.
1
2
3
4
|
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
iptables: Applying firewall rules: [ OK ]
|
실행
OpenLDAP 를 시작합니다.
1
|
service slapd start
|
OpenLDAP 가 정상적으로 기동시 아래와 같은 메시지가 나타납니다.
1
|
Starting slapd: [ OK ]
|
실행확인
아래의 명령을 이용하여 등록된 LDAP 데이터를 조회합니다.
1
|
ldapsearch -x -b dc=beany,dc=co,dc=kr
|
아래와 같이 등록된 데이터가 출력이 됩니다.
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
|
# extended LDIF
#
# LDAPv3
# base <dc=beany,dc=co,dc=kr> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# beany.co.kr
dn: dc=beany,dc=co,dc=kr
dc: beany
objectClass: top
objectClass: domain
# dev, beany.co.kr
dn: ou=dev,dc=beany,dc=co,dc=kr
ou: dev
objectClass: top
objectClass: organizationalUnit
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
|
서비스 등록
아래의 명령을 이용하여 서버 기동시에 실행될 수 있도록 서비스로 등록합니다.
1
|
chkconfig --level 345 slapd on
|
정상적으로 등록이 되었는지 아래의 명령을 이용하여 확인합니다.
1
|
chkconfig --list slapd
|
아래와 같이 slapd 서비스에 대한 등록 정보가 출력됩니다.
1
|
slapd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
|
출처
- http://blog.beany.co.kr/archives/2743
피드 구독하기:
글 (Atom)