Taverna

Taverna Plugins 개발하기

hongiiv 2007. 10. 24. 21:24
반응형
뭐하나 새로운걸 만드는 것보다는 Taverna에 통합하는 편이 나을듯 해서 Taverna 개발자 가이드를 보고 있습니다. 나름 이런저런 설명을 친절하게 해 놓았지만, 실제 뭔가를 만들기에는 좀더 공부를 해야겠습니다. 문서에는 가장 좋은 레퍼런스는 Taverna 자신의 소스코드라니 소스코드를 뚫어지게 쳐다보는 수 밖엔 ^^;;

Taverna를 이용하여 Plugins을 개발하기 위해서는 우선 SVN, SPI(Service Provider Interface), Maven에 대한 내용을 숙지하고 시작해야 한다.

SVN은 Taverna의 소스코드를 다운로드 받기 위한 것이고, SPI와 Maven은 실제 plugins을 만들고 빌드하기 위해 필요한 내용이다. 여기에 덧붙여 eclipse에 대해서 알면 더 좋다. 개발자 가이드에도 나와 있듯이 eclipse와 maven을 연동해서 plugins 코드를 작성하고 빌드하는것을 추천(?)하고 있다.

앞서 언급했듯이 Taverna는 SPI라는 프로그래밍 인터페이스(API)를 통해서 프로그래밍 할 수 있도록 하고 있는데, 일반적으로 인터페이스만을 정의하고 실제 구현을 통해 plugin을 개발하도록 되어 있다. 예를 들어 JCE의 암호 알고리즘이나 XML Parser의 경우 인터페이스만을 정의하고 실제 암호알고리즘이나 XML Parser는 서로 다른 곳에서 제공하는 혹은 만들어서 사용할 수 있도록 하고 있다. Taverna에서는 12개의 SPI를 제공하고 있는데 중요한 몇가지를 살펴보면 다음과 같다.

  • org.embl.ebi.escience.scuflworkers.java.LocalWorker
  • org.embl.ebi.escience.scuflui.spi.UIComponentFactorySPI
  • net.sf.taverna.perspectives.PerspectiveSPI
LocalWorker는 Available Processors의 Local Java Widget 부분에서 사용할 수 있는 Processors plugins을 만들때 사용하는 인터페이스다. 여기서 입력과 출력 등을 구현해서 사용하면 된다.

그럼 이제부터 실제로 plugins을 개발해 보도록 하자. 첫번째로 프로젝트의 구조(폴더)를 다음과 같이 작성한다.

  • src/main/java/ - 메인 자바 소스코드
  • src/main/resources/ - 정의된 SPI(META-INF/services/)와 리소스(이미지, 아이콘 등)
  • src/test/java/ - 자바 유닛 테스트
  • pom.xml - 프로젝트 설정파일로 Maven에서 사용된다.

그림. plugins을 개발하기 위한 기본 구조
maven_structure
그림. org.embl.ebi.escience.scuflworkers.java.LocalWorker 인터페이스 구성

사용자 삽입 이미지

리스트. TestPlugins.java - plugins 예제

package org.homelinux.socmaster.taverna.scuflworkers.io;

import org.embl.ebi.escience.scuflworkers.java.LocalWorker;
import uk.ac.soton.itinnovation.taverna.enactor.entities.TaskExecutionException;

public class TestPlugins implements LocalWorker{
    public String[] inputNames() {
            returin new String {"inputlist1", "inputlist2"};
    }
    public String[] inputTypes() {
           returin new String {"text/plain", "text/plain"};
   }
    public String[] outputNames() {
           returin new String {"outputlist"};
   }
    public String[] outputTypes() {
           returin new String {"text/plain"};
   }
    pubic Map execute(Map inputMap) throws TaskExecutionException {
            HashMap outputMap = new HashMap();
            String mergeString = inputMap.get("inputlist1")+inputMap.get("inputlist2);
            outputMap.put("outputlist", mergeString);

            return outputMap;
   }
}

위 코드는 입력으로 받은 두 개의 문장을 합쳐서 출력으로 내보내는 plugins 예제로 LocalWorker의 execute(), inputNames(), inputTypes(), outputNames(), outputTypes() 메소드를 구현하면 된다.

src/main/resource/META-INF/services/org.embl.ebi.escience.scuflworkers.java.LocalWorker 파일을 생성하고 자신의 SPI를 구현한 클래스 이름을 적어준다.

$ cat src/main/resource/META-INF/services/org.embl.ebi.escience.scuflworkers.java.LocalWorker

org.homelinux.socmaster.taverna.scuflworkers.io.TestPlugins

마지막으로 pom.xml 파일을 통해서 repository 등을 설정하고 해당 plugin에 대한 설명을 넣은 plugin-test-0.1.xml, plugins의 목록을 담은 pluginlist.xml을 각각 생성하여 publishing 하면 된다.

pluginlist.xml은 http://socmaster.homelinux.org/taverna/1.5/plugins/로 접속 가능한 곳에 위치하도록 한다.

리스트. pluginlist.xml
<plugins>
    <plugin>plugin-test-0.1.xml</plugin>
</plugins>

plugin-test-0.1.xml도 http://socmaster.homelinux.org/taverna/1.5/plugins/에 위치하도록 한다.

리스트. plugin-test-0.1.xml
<plugin>
     <name>TestPlugins</name>

      <description>
           Example Taverna Plugins
      </description>
      <identifier>org.homelinux.socmaster.taverna.zzzzzzzzzzzzz</identifier>
      <version>0.1</version>
      <provider>socmaster.homelinux.org</provider>

      <repositories>
           <repository>http://socmaster.homelinux.org/maven/repository/</repository>
      </repositories>

      <profile>
           <artifact groupId="socmaster.homelinux.org.taverna" artifactId="TestPlugins" version="0.1"/>
      </profile>

      <taverna>
      <version>1.5</version>
      </taverna>

</plugin>

만들어진 jar 파일은 http://socmaster.homelinux.org/maven/repository/org/homelinux/socmaster/taverna/TestPlugins/0.1에 위치하도록 한다.

그림. Taverna에서 plugin 등록하기

plugin_sites

그림. 최종적으로 완성된 프로젝트 구조

final_source_structure


Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
반응형