2015-02-06 9 views
1

일련의 애플리케이션에 대한 정보 묶음을 맵으로로드하는 applicationScope 관리 빈이 있습니다. 다음 메소드는 bean의 일부입니다.언제 재활용해야합니까?

public Database getAppDB() { 
    Database appDB = null; 
    try{ 
     Session s = ExtLibUtil.getCurrentSession(); 
     serverName = s.createName(s.getCurrentDatabase().getServer()).getCommon(); 
     appDB = s.getDbDirectory(serverName).openDatabaseByReplicaID(this.getAppRepID()); 
     return appDB; 
    }catch (NotesException e){ 
     System.out.println(e.toString()); 
     return appDB; 
    } 

} 

이제이 메소드는 두 개의 오브젝트 (Session 및 appDB)를 선언합니다. 반환하기 전에 재활용해야하는지 잘 모르겠다면 appDB가 반환 된 값이기 때문에 어떻게 처리 할 수 ​​있을지 확실하지 않습니다. Session은 쉽게 재활용 될 수 있습니다.

var thisDB:NotesDatabase = appProps[ssApplication].appDB; 

내가 SSJS에 thisDB을 재활용해야합니다 이제 좀 SSJS에서이 메소드를 호출 분명합니다. 또한

나는 SSJS에서이 같은 것을 할 경우 :

var cNames = appProps[ssApplication].appDB.getView("vwFTSearch").getColumnNames(); 

내가 재활용 아무것도 없다고 가정하고 있습니다를?

+0

여기 좀 봐 http://stackoverflow.com/a/17216904/2065611 및 http://stackoverflow.com/a/11160925/2065611 –

답변

2

자세한 답변은 다른 두 개의 질문에 붙여 넣습니다.

특정 질문에 짧은 대답은 당신이 getAppDB() 방법에서 이러한 개체를 재활용하지한다 것입니다.

세션이 제공된 후에 세션이 자동으로 재활용됩니다. 데이터베이스 개체는이 메서드의 호출자 (귀하의 경우 SSJS)에 의해 재생되어야합니다.

+0

감사합니다 - 내 코드를 모두 살펴보고 매달려있는 물건을 재활용해야합니다. 아직도 내가 언제 재활용하는지에 대해 완전히 이해하고 있는지 확신 할 수는 없지만, 나는 생각하고있다. :-) –

0

일반적인 규칙은 작성한 것을 파기 (재활용)하는 것입니다. 당신은 주어진 것을 떠납니다. 세션 및 데이터베이스는 시스템 제공 객체 (주어진)이므로 다른 함수를 사용하여 가져온 경우에도 혼자 남겨 둡니다.

나머지 부분에 대해서는 합리적인 연습을 발견했습니다. 객체를 만든 함수에서 다른 곳이 아닌 재활용됩니다. "창조 된"것을 조금 실용적으로 받아 들여야합니다. 예 :

var custDB = getCustDB(curUser); 

다음과 같이 getCustDB를 작성자로 생각하지는 않지만 해당 코드 줄에는 recycle()이 있습니다. 해당 코드가있는 함수에서.