jvm을 사용하는 R 패키지를 사용하려고 할때 
아래와 같은 에러메시지가 나오면서 JVM을 Load 하지 못할 수 있습니다.

JavaVM: requested Java version ((null)) not available. Using Java at "" instead.  
JavaVM: Failed to load JVM: /bundle/Libraries/libserver.dylib  
JavaVM FATAL: Failed to load the jvm library.  
Error : .onLoad failed in loadNamespace() for 'xlsx', details:  
  call: .jinit()
  error: JNI_GetCreatedJavaVMs returned -1

이럴때는 먼저 터미널 창에서 
$ sudo R CMD javareconf

그리고 R창에서 
>install.packages("rJava", type='source')

라고 해보시면 될겁니다.

http://stackoverflow.com/questions/35179151/cannot-load-r-xlsx-package-on-mac-os-10-11

Posted by 빨강토끼
,

Thrift는 페이스북이 개발한 규모 가변적인(scalable) 이종 언어 서비스 개발을 위한 소프트웨어 프레임워크이다.

Thrift을 이용하는 목적은 다양한 언어를 사용하여 개발한 소프트웨어를 쉽게 결합(통신)하기 위함이다.

Apache에서 제공하는 Thrift 는 다양한 플랫폼간에 매우 편리하게 사용할 수 있는 통합 RPC환경을 제공한다.

Thrift는 쉽게 다른 언어간 RPC 통신을 지원한다고 생각하시면 될지도.....

Thrift 스크립트를 한번 작성해 놓으면 다양한 언어에서 사용될 수 있는 코드를 자동으로 생성할 수 있습니다.

.thrift란 파일을 생성하고 Thrift compiler로 이 파일을 컴파일하면 C++이나 Java등 여러 언어에서 사용할 수 있는 인터페이스를 자동으로 생성해 준다. 이 인터페이스를 사용해 RPC(Remote Procedure Call) 통신을 한다..

  • 서블릿 제공(org.apache.thrift.server.TServlet)
  • 멀티쓰레드 지원 (org.apache.thrift.server.ThreadPoolServer : worker thread 지정)
  • Async 지원 (org.apache.thrift.server. TNonblockingServer : single threaded)
  • Multi-thread Half-Sync/Half-Async지원 : org.apache.thrift.server. THsHaServer
  • Exception을 제공 (Google Protocol Buffer에는 없는 기능)
  • Set, Map 지원 (Google Protocol Buffer에는 없는 기능)

https://thrift.apache.org/ 
http://coreawin.tistory.com/245 
http://mwmw7.tistory.com/311 
http://theeye.pe.kr/archives/2063 
http://knight76.tistory.com/1427 
http://rocksea.tistory.com/100

Posted by 빨강토끼
,

학습비용이 높은 편이라 팀에 하이버네이트 전문가가 없다면, 초기 도입비용이 높을수 있다.

  • 쿼리 힌트나 DB에 종속적인 쿼리에 대한 의존도가 높은 경우
  • 네이티브 쿼리(하이버네이트가 생성해주는 쿼리가 아니라 데이터베이스 벤더에 종속적으로 작성한 SQL을 사용하는) 비율이 높은 경우
  • 애플리케이션 개발이 객체지향적이지 않은 경우

Write Behind, Dirty Checking, Lazy Fetching 등의 장점을 살리기 어렵다.

참고로.

Write behind

Write-behind caching. 하이버네이트의 Session에서 기본으로 제공해주는 기능으로서, 정말로 쿼리를 실행해야 하는 순간까지 최대한 쓰기 작업을 미루는 기능.

Dirty Checking

하이버네이트를 사용해서 읽어온 객체는 항상 그 상패의 변화를 주시하고 있다. 그러다가 만약 트랜잭션이 커밋되면 , 하이버네이트가 알아서 테이터베이스에 해당 객체의 상태 변화를 적용시킨다.

Lazy Fetching

객체를 조회시 실제로는 비어있는 가짜객체(Proxy 객체)를 만들어 가짜객체의 데이터에 접근하면 하이버네이트가 그제서야 해당 객체를 채우는데 필요한 데이터를 가져다 준다.

Posted by 빨강토끼
,