블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
Ant (2)
Maven (29)
iBATIS (7)
Regular Expression (6)
Java Web Start (4)
WebServices (14)
JAXB (12)
CAS (13)
JBoss Seam (6)
OSGi (1)
Hibernate (2)
James (6)
Alfresco (17)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
11-16 13:37
 

달력

« » 2024.11
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
 

최근에 올라온 글

최근에 달린 댓글

사용자 정의 매크로를 쓰려고 보니 세미콜론(;)이 나왔다. 쌩뚱맞게 나온 세미콜론... 어떤 용도로 쓰는지 알기 위해 freemarker 홈페이지에서 확인해보았다.


매크로를 사용할 때 파라미터 뒤에 세미콜론을 붙이고 변수나 상수를 콤마(,) 구분자로 설정하면, 매크로 내의 <#nested> 의 파라미터로 사용할 수 있다.

<#macro do_thrice>
  <#nested 1>
  <#nested 2>
  <#nested 3>
</#macro>
<@do_thrice ; x> <#-- user-defined directive uses ";" instead of "as" -->
  ${x} Anything.
</@do_thrice>

<#macro repeat count>

  <#list 1..count as x>

    <#nested x, x/2, x==count>

  </#list>

</#macro>

<@repeat count=4 ; c, halfc, last>

  ${c}. ${halfc}<#if last> Last!</#if>

</@repeat>  


이렇게 쓰는 용도는 매크로 본문부가 반복이 되는 경우 해당 본문부에 파라미터를 매크로를 정의할 때 넘겨주게 설정할 때 사용하게 된다. (음;;;)


일단 이해했으니... 정리가 되면 고쳐야겠다.


참고자료: http://freemarker.org/docs/dgui_misc_userdefdir.html



Posted by 자수씨
, |


2014/04/26 - [JAVA/Alfresco] - Web Scripts 에서 Request Header 조회하기

2014/04/27 - [JAVA/Alfresco] - Web Scripts 에서 모바일 기기 체크하기

2014/04/28 - [JAVA/Alfresco] - Web Scripts 에서 Cookie 에 접근하기



이번에는 세션에 접근할 수 있도록 기능을 추가하고 내부 개선작업을 진행했다.




이번에 추가된 함수는 setSession(), getSession(), removeSession() 이다.


테스트 결과 정상적으로 동작하는 것을 확인했다.




Posted by 자수씨
, |


2014/04/26 - [JAVA/Alfresco] - Web Scripts 에서 Request Header 조회하기

2014/04/27 - [JAVA/Alfresco] - Web Scripts 에서 모바일 기기 체크하기


지난 포스팅에서 정리했던 Web Scripts 스크립트 헬퍼 부분에 쿠키에 접근하는 로직을 추가하였다.




사용법은 아래와 같다.





Posted by 자수씨
, |

2014/04/26 - [JAVA/Alfresco] - Web Scripts 에서 Request Header 조회하기


이전 글에서는 Alfresco Web Scripts 에서 Header 를 조회하는 방식을 알아보았다. 이번 글에서는 User-Agent 를 조사하여 모바일 기기인지를 체크하는 방법을 설명한다.




getMobileDevice() 함수와 isMobile() 함수가 추가되었으며, 사용법은 아래와 같다.






Posted by 자수씨
, |

Template component 로 Web Scripts 에서 Request 헤더에 쉽게 접근할 수 있는 방법이 보이지 않았다.

(그냥 컴포넌트를 요청하면 헤더를 사용할 수 있는데...)



그리하여 요리조리 테스트해보면서 아래와 같은 헬퍼클래스를 만들었다.




사용법은 아래와 같다.





Posted by 자수씨
, |


Alfresco 는 CMIS 이다. CMIS 를 대상으로 컨텐츠 모델링을 할 때는 일반 RDB 모델링 하듯이 하면 완전 피본다는 것을 뼈저리게 느끼고 있다.


일단, JOIN 이 지원되지 않는다는 것은 타격이 크다. SOLR 은 4.0 이상 부터 JOIN 을 지원하는데, Alfresco 4.0 에서는 SOLR 1.4 버전을 사용한다. CMIS Query 에서 JOIN 을 제공해주는 예제를 확인하여 테스트를 해보았으나 커스텀 타입의 데이터 모델은 "Advanced join is not supported" 익셉션만 뱉을 뿐이다...


검색을 하다가 찾은 내용인데, 안습...


The bottom-line is that Alfresco isn't relational. You can set up associations and through the API you can ask a give node for its associations, but you cannot run queries across associations like you can when you do joins in a relational database.


Maybe you should add a location property to your content node and update its value with a behavior any time an association is created, updated, or deleted on that node. Then you'd be able to run a query by AND-ing the location with other criteria on the node.


Obviously, if you have many such properties that you need to keep in sync your behavior could start to affect performance negatively, but if you have only a handful you should be okay.


출처: http://stackoverflow.com/questions/11193275/alfresco-solr-custom-search


대충 내용은 Alfresco 는 relational 하지 않다. RDB 처럼 join 을 할 수 없다. 노드의 생성, 갱신, 삭제 시에 관련 프로퍼티를 업데이트 해주어야 한다. 이 것은 성능에 부정적인 영향을 끼친다. 얼마 안되는 정도라면 괜찮다.


결국, behaviour 를 이용하여 업데이트 하는 방법은 절대 절대 피해야 하는데 방법이 보이질 않는다...


SOLR 을 4.0 으로 올릴 수는 없을까?



Posted by 자수씨
, |

[ALFRESCO_HOME]/webapps/alfresco/WEB-INF/classes/log4j.properties

###### File appender definition #######

log4j.appender.File=org.apache.log4j.DailyRollingFileAppender

log4j.appender.File.File=alfresco.log

log4j.appender.File.Append=true

log4j.appender.File.DatePattern='.'yyyy-MM-dd

log4j.appender.File.layout=org.apache.log4j.PatternLayout

log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n



[ALFRESCO_HOME]/webapps/awe/WEB-INF/classes/log4j.properties

###### File appender definition #######

log4j.appender.File=org.apache.log4j.DailyRollingFileAppender

log4j.appender.File.File=awe.log

log4j.appender.File.Append=true

log4j.appender.File.DatePattern='.'yyyy-MM-dd

log4j.appender.File.layout=org.apache.log4j.PatternLayout

log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n



[ALFRESCO_HOME]/webapps/solr/WEB-INF/classes/log4j.properties

###### File appender definition #######

log4j.appender.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.File=solr.log
log4j.appender.File.Append=true
log4j.appender.File.DatePattern='.'yyyy-MM-dd
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n



[ALFRESCO_HOME]/webapps/wcmqs/WEB-INF/classes/log4j.xml

<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">

<param name="File" value="webquickstart.log" />

<param name="Append" value="true" />

<param name="Encoding" value="UTF-8" />

<param name="DatePattern" value="'.'yyyy-MM-dd" />

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

<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] %m%n" />

</layout>

</appender>




Posted by 자수씨
, |


UI 를 구성하는 Web Scripts 는 request 나 response 객체에 접근이 어렵기 때문에 Web Scripts 내에서 redirect 를 하려면 약간의 꼼수를 이용해야 한다.


Response Status 를 이용하는 꼼수인데, Response Status 로 핸들링하는 예제는 아래 더보기를 통해 확인할 수 있다. 




이번 포스팅에서 사용하는 방식은 "Package level template named <format>.status.ftl" 으로 사용하는 Web Scripts 와 같은 패키지(디렉토리)에 위치시키고 js 파일에서 status 를 제어하여 redirect 를 시킬 것이다.



/alfresco/web-extension/site-webscripts/test/package/test.content.get.js



위에서 redirectCondition 이 true 이면, status.code 에 899 값을 설정하고, status.location 에는 redirect 할 url 을, status.redirect 는 true 로 설정을 하고 실행하는 함수 자체를 return 시켜서 아래 코드가 실행되지 않도록 한다.


/alfresco/web-extension/site-webscripts/test/package/html.status.ftl


html.status.ftl 은 "/alfresco/web-extension/site-webscripts/test/package/" 하위에 있는 *.html.ftl 에서 status 값이 설정되면 해당 페이지로 리다이렉트하게 된다.



잘만 이용하면 다양한 기능을 활용할 수 있을 듯 하다.



Posted by 자수씨
, |

파라미터로 long 형 timestamp 를 넘겨주면, 

  1분 이내는 방금

  1시간 이내는 ~분 전

  하루 이내는 ~시간 전

  나머지는 날짜 출력





=ㅁ= //


Posted by 자수씨
, |

참고자료: http://wiki.alfresco.com/wiki/Full-Text_Search_Configuration



각 프로퍼티의 인덱싱 행위는 컨텐츠 모델에서 설정될 수 있다. 기본적으로 원자적으로 인덱싱 된다. 프로퍼티 값은 인덱스 안에 저장되지 않고, 프로퍼티는 인덱싱 될 때, 토큰화 된다.


The following example shows how indexing can be controlled.


Enabled="false"

false 이면, 인덱스에 이 프로퍼티를 위한 엔트리는 없다.


Atomic="true"

true 이면, 프로퍼티는 트랜잭션 내에서 인덱싱되며, false 이면 프로퍼티는 백그라운드에서 인덱싱 된다.

(Indexing of content that requires transformation before being indexed (e.g. PDFs) will only obey Atomic=true if the transformation takes less time than the value specified for lucene.maxAtomicTransformationTime. See #General.)


Stored="true"

true 이면, 프로퍼티 값은 인덱스 내에 저장되고, 루씬 로우 레벨 쿼리 API를 통해 얻을 수 있다.

(This can be useful while debugging systems to see exactly what is being indexed, but do not set this to true on production systems.)


Tokenised="true"

"true" 이면, 프로퍼티의 문자열 값은 인덱싱 전에 토큰화 된다.

"false" 이면, 단일 문자열로 인덱싱 된다.

"both" 이면, 두 가지 형태로 인덱에 존재하기 된다.



Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백