오라클은 300여 가지의 신규 기능과 향상된 기능을 제공하는 오라클 솔라리스 11.1(Oracle Solaris 11.1)을 발표했다. 고객들은 현재 사용하고 있는 있는 오라클 솔라리스 11의 업그레이드 툴을 활용해 신규 버전으로 쉽고 빠르게 업그레이드할 수 있다.

오라클 솔라리스 11은 고객들이 대규모의 엔터프라이즈급 클라우드 인프라를 구축할 수 있게 하는 최초의 클라우드 운영체제로 스팍(SPARC), x86 및 엔지니어드 시스템에서 인프라 서비스(IaaS), 플랫폼 서비스(PaaS), 소프트웨어 서비스(SaaS) 등의 클라우드를 구현할 수 있다.

오라클 솔라리스 11은 오라클 스팍 T4 서버 제품군(SPARC T-Series server line), 스팍 슈퍼 클러스터T4-4(SPARC SuperCluster T4-4), 오라클 엑사데이타 데이터베이스 머신(Oracle Exadata Database Machine), 오라클 엑사로직 엘라스틱 클라우드(Oracle Exalogic Elastic Cloud) 등을 지원하는 운영체제이며, 오라클 데이터센터 최적화(Oracle optimized data center)를 구성하는 핵심요소다.

이미 수만 대의 오라클 솔라리스 11이 금융, 통신, 헬스케어, 유통, 공공, 미디어 분야 등의 수 천여 고객사에서 채택돼 많은 미션 크리티컬한 시스템 운영에 활용되고 있다.

오라클 솔라리스 11.1은 최신의 데이터베이스를 강화할 수 있는 신기능을 포함하고 있어, 유닉스 상에서 오라클 데이터베이스 운영 시 최고의 성능과 가용성을 제공한다.

오라클 솔라리스 커널 내에서 락(Lock) 관리를 제거해 오라클 리얼 애플리케이션 클러스터(Oracle Real Application Clusters)의 락 지연을 17%까지 향상시켰다. 또한 리부팅 없이 오라클 데이터베이스 SGA(Oracle Database SGA)를 리사이즈 할 수 있다.

오라클 솔라리스 디트레이스(Oracle Solaris DTrace)를 활용해 데이터베이스의 I/O 병목현상을 쉽게 확인할 수 있다. 오라클 데이터베이스에 대한 컴플라이언스 리포트를 단순화해 오라클 오딧 볼트(Oracle Audit Vault)에 시스템 감사 결과를 바로 보낼 수 있다.

신규 컴플라이언스 리포팅 툴과 신용카드 데이터 보안 표준(PCI) 프로파일인 OpenSCAP을 통해 감사관이 요구하는 컴플라이언스 리포트를 빠르게 생성할 수 있다. 이외에도 32TB 램(RAM)과 수천 개의 CPU를 장착하고 있는 오라클의 최신 서버의 성능을 극대화해 준다.

솔라리스 11의 효율적으로 내장된 가상화 기능에 새롭게 클라우드 인프라 기능이 추가됐다. 업계 최초로 새로운 공개 표준인 FedFS(Federated File System)을 지원해 클라우드 스케일의 데이터 환경을 위한 통합된 네임스페이스를 제공한다.

SDN(소프트웨어 정의 네트워크) 지원을 확대해 EVB(Edge Virtual Bridging) 기능을 강화했다. 이를 통해 네트워크 자원의 활용과 클라우드 환경에서의 대역폭 관리를 극대화해 주며, 새로운 데이터센터 브릿징(Data Center Bridging)은 이더넷 스토리지 네트워크를 통합해 네트워크 인프라 비용을 절감할 수 있게 한다.

매우 빠른 오라클 솔라리스 존(Superfast Oracle Solaris Zone)을 업데이트 해 솔라리스 11의 성능을 최대 4배까지 향상시킬 수 있다. 또한, 자동화된 공유 스토리지 지원을 통해 고객들은 쉽게 오라클 솔라리스 존에서 시스템으로 이동할 수 있다.

오라클 솔라리스 클러스터(Oracle Solaris Cluster)의 안전한 고가용성 기능이 솔라리스 11.1의 내장된 가상화 기능과 결합해 미션 크리티컬한 애플리케이션을 비용 효율적으로, 민첩하게 클라우드 환경으로 가져올 수 있다. 오라클 솔라리스 존 클러스트(Oracle Solaris Zone clusters) 내에서 빠른 속도의 애플리케이션 장애 차단이 이뤄져 솔라리스 10과 11 애플리케이션의 안전하고, 가상화된 구축이 가능하다.

오라클의 썬 ZFS 스토리지 어플라이언스의 복제를 통해 지역적으로 분리된 데이터센터 사이에서 장애 발생시 복구가 가능하다.
오라클 솔라리스 트러스티드 익스텐션(Oracle Solaris Trusted Extensions)을 통해 클러스터 환경을 위한 다중 보안을 지원한다.

오라클 엔터프라이즈 매니저 Ops Center(Oracle Enterprise Manager Ops Center)는 포괄적인 시스템 관리를 제공해, 엔터프라이즈급의 하드웨어, OS, 가상화 자원 제어가 가능하다. 솔라리스 고객들은 추가적인 비용 없이 어디서든 가능한 Ops Center프로그램(Ops Center Everywhere Program)에 따라 이 기능을 이용할 수 있다. 

오라클 솔라리스 11.1은 스팍을 위한 오라클 VM 서버(Oracle VM Server for SPARC), x86을 위한 오라클 VM 서버(Oracle VM Server for x86)의 가상화 환경에서 운영체제의 성능과 용량을 최적화했다.

OPN(Oracle PartnerNetwork) 회원사들은 오라클 솔라리스 툴과 자원을 오라클 솔라리스 지식 존(Oracle Solaris Knowledge Zone)에서 활용할 수 있다. 또한, 오라클 솔라리스 레디(Oracle Solaris Ready), 오라클 솔라리스 11 스페셜라이제이션(Oracle Solaris 11 Specialization), 오라클 솔라리스 개발 이니시에이티브(Oracle Solaris Development Initiative) 등에서도 툴과 자원을 이용할 수 있다.

오라클 솔라리스 트레이닝(Oracle Solaris Training)과 오라클 솔라리스 클러스터 트레이닝(Oracle Solaris Cluster Training)
은 고객들과 파트너사가 미션 크리티컬한 클라우드 인프라 시스템을 구축, 관리 및 업데이트 방법을 빠르게 배울 수 있도록 지원한다.

오라클 시스템 사업부의 존 파울러(John Fowler) 총괄 부사장은 “오라클 솔라리스 11은 오라클 애플리케이션을 구동하거나 미션 크리티컬한 클라우드 인프라를 구축하기 위한 최고의 유닉스 운영체제”라며, “오라클 솔라리스 엔지니어링 팀은 오라클 데이터베이스 팀과 협업해 고객들이 혜택을 얻을 수 있도록 오라클 솔루션만의 가치를 불어 넣었으며, 오라클 솔라리스11은 미션 크리티컬한 클라우드 인프라를 위한 최고의 솔루션이 될 것”이라고 말했다.


출처 - http://www.acrofan.com/ko-kr/commerce/news/?mode=view&cate=01&seq=28201&wd=20121023&ucode=00000024&page=1




'System > Solaris' 카테고리의 다른 글

솔라리스 명령어  (0) 2012.03.02
오라클, 스팍 T4 출시  (0) 2012.01.04
raw device  (0) 2011.12.08
/dev/dsk , /dev/rdsk  (0) 2011.12.08
한국오라클 시스템사업부 전략발표회  (0) 2011.11.22
Posted by linuxism
,


프로젝트 패싯(facet)을 사용한 WTP 확장#

요약

플러그인 개발자는 Faceted Project Framework 덕분에 웹 개발도구 플랫폼(WTP)에서 생성된 프로젝트를 기능 별 단위가 조합된 것으로 다룰 수 있게 한다. WTP 프로젝트의 기능 별 단위는 패싯(facet)이라고 부르며 사용자에 의해 추가/삭제될 수 있다. 이 학습서는 기본적인 패싯 몇가지를 작성해보고, 그 과정에서 프레임워크의 확장점 대부분을 다루어 본다. 이 학습서는 WTP 1.5를 기준으로 작성되었다.


Konstantin Komissarchik
BEA Systems, Inc.

September 5, 2006

Translation: Seok-Ho, Yang <javanese (at) naver.com> http://cafe.naver.com/eclipseplugin


소개#

Faceted Project Framework는 WTP의 기능을 확장할수 있는 강력한 메카니즘을 제공한다. 일반적으로 프로젝트 패싯은 프로젝트에 기능을 추가하는 수단으로 사용된다. 패싯이 프로젝트에 추가될 때는 리소스 복사, 빌더 설치, 네이처 추가 등의 필요한 셋업 액션을 수행할 수 있다. 패싯은 사용자 인터페이스 요소를 활성화하기 위한 마커로도 사용될 수 있다.

어떤 독자는 이클립스 플랫폼에서 제공하는 프로젝트 네이처와 패싯이 어떻게 다른지 궁금할 것이다. 네이처는 사용자의 관점에서는 숨겨지도록 설계된 것이다. 네이처는 본질적으로 뒷단의 도구에 의해 다뤄지는 마커 역할을 한다. 프로젝트 패싯은 반면 최종 사용자가 다룰 수 있게 드러내지도록 설계된 것이다. Faceted Project Framework는 프로젝트의 패싯을 관리하기 위해 필요한 모든 사용자 인터페이스 요소를 제공하며, 패싯에는 관련 정보를 함께 기록해서 사용자가 잘못된 구성을 작성하는 것을 피하도록 한다. 최소한 새 맞춤 프로젝트 생성 마법사를 개발하거나 "기능 X 활성화" 메뉴 액션을 추가할 필요는 없다. 프로젝트에 어느 패싯을 설치할 것인지 관리하는 범용적인 수단이 제공됨으로써 플러그인 개발자의 부담이 줄어들고 더 나은 사용자 경험을 제공한다.

이 학습서는 프로젝트 패싯을 작성하는 데 필요한 확장점과 자바 API를 다룬다. 독자는 이미 이클립스 플러그인 개발에 익숙하며 WTP를 사용할 수 있는 것으로 가정한다.

학습서 시나리오#

당신은 FormGen이라 불리는 제품을 개발하는 회사의 개발자이다. FormGen은 기본적으로 XML 정의 파일을 기반으로한 HTML 폼을 생성하는 서블릿이다. 이 제품은 서블릿과 몇몇 기본 위짓을 포함하는 jar로 구성되어 있다. 별도 위짓을 제공하는 추가 jar도 존재한다. 사용자는 웹 프로젝트 내의 WEB-INF/lib 디렉토리에 jar를 직접 추가해왔으며 web.xml에 서블릿 정의를 직접 편집했다. 당신이 맡은 일은 이러한 액션을 자동으로 수행해주는 몇가지 프로젝트 패싯을 작성해서 사용자의 설정 과정을 편하게 만들어 주는 것이다.

Table of Contents#

 

1.시작하기#

이 학습서를 따라하려면, WTP 1.5를 설치해야 한다. 이 학습서는 1.5에서 추가된 다양한 확장점과 API를 사용하므로 WTP 1.0.x 버전에서는 사용할 수 없다. WTP 인스톨러와 이클립스 플랫폼 v3.2 등의 필수 구성요소는 다음 위치에서 다운로드할 수 있다.

필수 소프트웨어를 설치한 다음에는 새 작업공간을 생성해야 하고, 시작용 프로젝트를 추가해야 한다. 시작용 프로젝트는 이 학습서에서 사용되는 재료와 유틸리티 코드를 포함하고 있다. 어디선가 막히는 부분이 있다면 솔루션 프로젝트을 참고할 수 있다.

2. 기본 패싯 정의 생성#

프로젝트 패싯은 org.eclipse.wst.common.project.facet.core.facets 확장점을 통해서 선언된다. 이 확장점은 매우 많은 기능을 갖춘 거대한 확장점이다. 하지만 여기서는 작게 시작하고, 학습서 패싯을 구축하는 과정에서 점점 키워나갈 것이다. 다음은 처음에 작업할 스키마의 일부이다.

<extension point="org.eclipse.wst.common.project.facet.core.facets">

   <project-facet id="{string}"> (0 or more)
<label>{string}</label>
<description>{string}</description> (optional)
</project-facet>

<project-facet-version facet="{string}" version="{string}"/> (0 or more)

</extension>

예제 코드를 보면, 확장점 선언에 두 개의 최상위 요소가 있음을 알 수 있다.  <project-facet> 요소는 패싯 자체를 선언하기 위해 사용한다. <project-facet-version> 요소는 패싯의 버전을 선언하기 위해 사용한다. 모든 패싯 구현은 최소한 하나의 패싯 버전 선언을 제공해야 한다. 실제로, 이 튜토리얼 뒤에서 볼 수 있듯 <project-facet-version> 선언에서 상당히 많은 작업을 해야 한다. 지금 당장 기억해야할 것은 최소한 하나의 버전이 있어야만 패싯을 사용할수 있다는 것이다.

  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">

    <project-facet id="formgen.core">
    <label>FormGen Core</label>
    <description>
    Enables generation of HTML forms based on XML definition files.
    </description>
    </project-facet>

    <project-facet-version facet="formgen.core" version="1.0"/>

    <project-facet id="formgen.ext">
    <label>FormGen Extensions</label>
    <description>
    Enables additional FormGen widgets.
    </description>
    </project-facet>

    <project-facet-version facet="formgen.ext" version="1.0"/>

    </extension>

plugin.xml 파일에 위의 코드를 삽입하고 어떻게 동작하는지 보자. FormGen 플러그인을 포함시킨 이클립스를 실행하고 Dynamic Web Project 마법사를 열라. 첫 페이지에서 Target Runtime 필드에 <none>이 선택되어 있는지 확인하고 두번째 페이지로 넘어간다. 다음과 같은 화면을 보게 될 것이다. 방금 생성한 FormGen 패싯이 나타남을 유의하라.

3. 제한조건 지정#

지금까지 나타난 문제점 중 하나는 FormGen 패싯이 EJB  Project 마법사와 같은 다른 모듈 프로젝트 마법사에도 나타난다는 것이다. 물론 FormGen은 서블릿 기반 기술이기 때문에 전혀 의미가 없으며 J2EE 웹 애플리케이션에만 적용할 수 었다. 이 문제를 해결하기 위해 종속성을 지정하는 제한조건(constraint) 메카니즘을 사용할 것이다.

다음은 확장점 스키마의 일부 예시이다.

  1. <extension point="org.eclipse.wst.common.project.facet.core.facets">
      <project-facet-version>
        <constraint> (optional)
          [expr]
        </constraint>
      </project-facet-version>
    </extension>

    [expr] =
      <requires facet="{string}" version="{version.expr}" soft="{boolean}"/> or
      <conflicts facet="{string}" version="{version.expr}"/> or
      <conflicts group="{string}"/> or
      <and>
        [expr] (1 or more)
      </and> or
      <or>
        [expr] (1 or more)
      </or>

예제에서 보듯, 제한조건은 연산식 트리이며 4개의 연산자를 사용할 수 있다. 연산자의 의미를 하나씩 살펴보자.

requires

The requires operator is the most frequently used of all the operators. It is used to specify a dependency on another facet. If the version attribute is not specified, any version of the referenced facet will satisfy the constraint. If only specific versions will do, the version attribute can contain a version expression.

The soft attribute is used to create a special kind of a dependency. Facet selection will not be prevented if the dependency is not met, but if the dependency is met, the facet is guaranteed to be installed after the referenced facet.

conflicts

The conflicts constraint is used to indicate that the declaring facet will not work correctly if installed into the same project as referenced facets. The conflicts constraint comes in two flavors. You can either specify a conflict with a single facet or with a group of facets.

What are groups of facets? Facet groups are a way to designate a conflict with a certain class of facets without having to list all of the facets explicitly. For instance, the WTP module facets all belong to the "modules" group. They also each declare a conflict with the "modules" group. This prevents two module facets from being installed into the same project. By declaring a conflict with a group whose membership can expand as necessary, third parties can add module facets on top of WTP and have the new facets interact correctly with the built-in module facets.

A facet group is created the first time a facet declares group membership. Here is the extension point schema for declaring group membership:

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<project-facet-version>

<group-member id="{string}"/> (0 or more)
</project-facet-version>
</extension>

and & or

The and & or constraints are used to perform logical conjunction and disjunction over their operands. Although it is legal for these operators to have only one operand, typically they will have two or more.

We can now specify the constraints for the FormGen facets. The facet id that marks a project as a J2EE web module isjst.web. We will setup a dependency on it from the formgen.core facet. The formgen.ext facet can then depend on theformgen.ext facet. That latter constraint will ensure that the FormGen Extensions are not installed without installing FormGen Core.

          <extension point="org.eclipse.wst.common.project.facet.core.facets">

<project-facet-version id="formgen.core" version="1.0">

<constraint>
<requires facet="jst.web" version="2.2,2.3,2.4"/>
</constraint>
</project-facet>

<project-facet-version id="formgen.ext" version="1.0">

<constraint>
<requires facet="formgen.core" version="1.0"/>
</constraint>
</project-facet>

</extension>

Once the above code is added, the FormGen facets should only appear in the Dynamic Web Project wizard.

4. Implementing Actions#

Let's now try selecting the FormGen Core facet on the facets selection page of the Dynamic Web Project wizard. If you do that, you should see the following error message appear.

This error message is displayed because the install action has not been implemented for this facet. What's an action? An action is an operation that a user can perform on a facet. There are three action types INSTALLUNINSTALL, andVERSION_CHANGE. We will now implement the install actions for the FormGen facets.

Here is what that part of the extension point schema looks like:

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<action id="{string}" facet="{string}" version="{version.expr}" type="INSTALL|UNINSTALL|VERSION_CHANGE">
<delegate class="{class:org.eclipse.wst.common.project.facet.core.IDelegate}"/>
<property name="{string}" value="{string}"/> (0 or more)
</action>
</extension>
  • The version attribute can contain a single version or a version expression. It can also be omitted if the action applies to all versions of the facet.

  • The id attribute is optional. If not specified, the framework will automatically generate one using the following pattern:

    [facet-id]#[version-expression]#[action-type](#[prop-name]=[prop-value])*

    As you can see, it is better to provide an explicit id rather than letting the framework generate it. Later in the tutorial we will cover extension points that make references to action ids.

  • The <action> element can also be embeded inside the <project-facet-version> element. In that case, the facet andversion attributes should be omitted. Note that if the same delegate implementation applies to multiple facet versions, it is better to provide a single action declaration externally. This allows the framework to perform certain kinds of optimizations

  • For the VERSION_CHANGE action, it is possible to restrict the applicability of the action definition with regards to the starting version. To do that, simply specify "from.versions" property in the action definition. The value is a version expression. If this property is not specified, the framework will assume that the delegate is capable of converting from any starting version.

          package org.eclipse.wst.common.project.facet.core;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;

/**
* This interface is implemented in order to provide logic associated with
* a particular event in project facet's life cycle, such as install or
* uninstall.
*/


public interface IDelegate
{
/**
* The method that's called to execute the delegate.
*
* @param project the workspace project
* @param fv the project facet version that this delegate is handling; this
* is useful when sharing the delegate among several versions of the same
* project facet or even different project facets
* @param config the configuration object, or null if defaults
* should be used
* @param monitor the progress monitor
* @throws CoreException if the delegate fails for any reason
*/


void execute( IProject project,
IProjectFacetVersion fv,
Object config,
IProgressMonitor monitor )

throws CoreException;
}

Let's now dive in and implement the install delegates for the FormGen facets. The formgen.core facet should (a) copyformgen-core.jar into the project's WEB-INF/lib directory, and (b) register the FormGen servlet in web.xml. The formgen.extfacet should copy the formgen-ext.jar into the project's WEB-INF/lib directory.

          <extension point="org.eclipse.wst.common.project.facet.core.facets">

<project-facet-version facet="formgen.core" version="1.0">
<action type="INSTALL">
<delegate class="com.formgen.eclipse.FormGenCoreFacetInstallDelegate"/>
</action>
</project-facet-version>

<project-facet-version facet="formgen.ext" version="1.0">
<action type="INSTALL">
<delegate class="com.formgen.eclipse.FormGenExtFacetInstallDelegate"/>
</action>
</project-facet-version>

</extension>
          package com.formgen.eclipse;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;

public final class FormGenCoreFacetInstallDelegate implements IDelegate
{
public void execute( final IProject pj,
final IProjectFacetVersion fv,
final Object config,
final IProgressMonitor monitor )

throws CoreException

{
monitor.beginTask( "", 2 );

try
{
final IFolder webInfLib = Utils.getWebInfLibDir( pj );

Utils.copyFromPlugin( new Path( "libs/formgen-core.jar" ),
webInfLib.getFile( "formgen-core.jar" ) );

monitor.worked( 1 );

Utils.registerFormGenServlet( pj );

monitor.worked( 1 );
}
finally
{
monitor.done();
}
}
}
          package com.formgen.eclipse;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;

public final class FormGenExtFacetInstallDelegate implements IDelegate
{
public void execute( final IProject pj,
final IProjectFacetVersion fv,
final Object config,
final IProgressMonitor monitor )

throws CoreException

{
monitor.beginTask( "", 1 );

try
{
final IFolder webInfLib = Utils.getWebInfLibDir( pj );

Utils.copyFromPlugin( new Path( "libs/formgen-ext.jar" ),
webInfLib.getFile( "formgen-ext.jar" ) );

monitor.worked( 1 );
}
finally
{
monitor.done();
}

}
}

Once the install actions have been implemented, you should be able to select the FormGen facets on the Facets Selection Page of the Dynamic Web Project Wizard without getting any error messages. You should also be able to complete the project creation and see the following highlighted artifacts in the new project. These artifacts have been created by the FormGen facet install delegates.

5. Creating Categories#

Project facets can be grouped into categories in order to provide the "one click" exprience for novice users and retain the fine-grained control for advanced users. You are told that most of FormGen users always add both of the jars to their web apps. These users would benefit from having the FormGen facets grouped into a category and so we will do just that.

Here is what that part of the extension point schema looks like:

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<category id="{string}">
<label>{string}</label>
<description>{string}</description> (optional)
</category>
<project-facet>
<category>{string}</category> (optional)
</project-facet>
</extension>

We can now create a category around the FormGen facets.

          <extension point="org.eclipse.wst.common.project.facet.core.facets">

<category id="formgen.category">
<label>FormGen</label>
<description>Enables generation of HTML forms based on XML definition files.</description>
</category>

<project-facet id="formgen.core">
<category>formgen.category</category>
</project-facet>

<project-facet id="formgen.ext">
<category>formgen.category</category>
</project-facet>

</extension>

Once the above change has been put in place, the facets selection page should look like this:

6. Decorating#

Custom icons can be provided for facets and categories. If an icon is not provided, a default icon is used. The icons are helpful as a way to better differentiate facets and to make them stand out.

Here is what that extension point looks like:

          <extension point="org.eclipse.wst.common.project.facet.ui.images">
<image facet="{string}" path="{string}"/> (0 or more)
<image category="{string}" path="{string}"/> (0 or more)
</extension>

Your starter project came with three icons in the icons folder. We will now associate them with the FormGen facets and the category.

          <extension point="org.eclipse.wst.common.project.facet.ui.images">
<image facet="formgen.core" path="icons/formgen-core.gif"/>
<image facet="formgen.ext" path="icons/formgen-ext.gif"/>
<image category="formgen.category" path="icons/formgen-cat.gif"/>
</extension>

Once the above snippet has been added to your plugin.xml file, the facets selection page should look like this:

7. Adding Wizard Pages#

It is often desirable to gather user input prior to installing a facet. The framework allows a sequence of wizard pages to be associated with facet actions. The supplied wizard pages are shown after the facets selection page. Based on user feedback, you known that FormGen users often customize the URL pattern of the FormGen servlet so you would like to give them the ability to do that in the wizard when the FormGen facets are being installed.

Here is what the relevant parts of the extension points look like:

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<action>

<config-factory class="class:org.eclipse.wst.common.project.facet.core.IActionConfigFactory"/>
</action>
</extension>


<extension point="org.eclipse.wst.common.project.facet.ui.wizardPages">
<wizard-pages action="{string}"> (0 or more)
<page class="{class:org.eclipse.wst.common.project.facet.ui.IFacetWizardPage}"/> (1 or more)
</wizard-pages>
</extension>

One thing to note here is that in order to enable communication between the facet action delegate and the wizard pages, we go back to the action declaration and provide an action config factory. The object created by the factory is populated by the wizard pages and is read by the action delegate. No restrictions are placed on the shape of the config object. You may choose to implement a custom class or you can use a something generic like java.util.HashMap.

Another thing to note is that the wizardPages extension point refers to the actions by their ids, so it becomes more important to explicitly specify the id rather than letting the framework automatically generate one.

Here are the interfaces that are used in the above extension point schema:

          package org.eclipse.wst.common.project.facet.core;

import org.eclipse.core.runtime.CoreException;

/**
* This interface is implemented in order to provide a method for creating
* a config object that will be used for parameterizing the facet action
* delegate.
*/


public interface IActionConfigFactory
{
/**
* Creates a new facet action configuration object. The new configuration
* object should ideally be populated with reasonable defaults.
*
* @return a new facet action configuration object
* @throws CoreException if failed while creating the configuration object
*/


Object create() throws CoreException;
}
          package org.eclipse.wst.common.project.facet.ui;

import org.eclipse.jface.wizard.IWizardPage;

/**
* This interface is implemented by the wizard pages associated with project
* facet actions.
*/


public interface IFacetWizardPage extends IWizardPage
{
/**
* The framework will call this method in order to provide the wizard
* context to the wizard page. The wizard context can be used to find out
* about other actions being configured by the wizard.
*
* @param context the wizard context
*/


void setWizardContext( IWizardContext context );

/**
* The framework will call this method in order to provide the action config
* object that the wizard page should save user selection into. The
* populated config object will then be passed to the action delegate.
*
* @param config the action config object
*/


void setConfig( Object config );

/**
* This method is called after the user has pressed the Finish
* button. It allows the wizard page to transfer user selection into the
* config object. Alternative, instead of using this method, the wizard
* page could update the model on the fly as the user is making changes.
*/


void transferStateToConfig();
}

We will now implement a wizard page for the facet.core facet install action. The wizard page will allow the user to change the default servlet URL pattern for the FormGen servlet.

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<project-facet-version facet="formgen.core" version="1.0">
<action type="INSTALL"
id="formgen.core.install">
<config-factory class="com.formgen.eclipse.FormGenCoreFacetInstallConfig$Factory"/>
</action>
</project-facet-version>
</extension>


<extension point="org.eclipse.wst.common.project.facet.ui.wizardPages">
<wizard-pages action="formgen.core.install">
<page class="com.formgen.eclipse.FormGenCoreFacetInstallPage"/>
</wizard-pages>
</extension>
          package com.formgen.eclipse;

import org.eclipse.wst.common.project.facet.core.IActionConfigFactory;

public final class FormGenCoreFacetInstallConfig
{
private String urlPattern = "*.form";

public String getUrlPattern()
{
return this.urlPattern;
}

public void setUrlPattern( final String urlPattern )
{
this.urlPattern = urlPattern;
}

public static final class Factory implements IActionConfigFactory
{
public Object create()
{
return new FormGenCoreFacetInstallConfig();
}
}
}
          package com.formgen.eclipse;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.common.project.facet.ui.AbstractFacetWizardPage;

public final class FormGenCoreFacetInstallPage extends AbstractFacetWizardPage
{
private FormGenCoreFacetInstallConfig config;
private Text urlPatternTextField;

public FormGenCoreFacetInstallPage()
{
super( "formgen.core.facet.install.page" );

setTitle( "FormGen Core" );
setDescription( "Configure the FormGen servlet." );
}

public void createControl( final Composite parent )
{
final Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout( 1, false ) );

final Label label = new Label( composite, SWT.NONE );
label.setLayoutData( gdhfill() );
label.setText( "URL Pattern:" );

this.urlPatternTextField = new Text( composite, SWT.BORDER );
this.urlPatternTextField.setLayoutData( gdhfill() );
this.urlPatternTextField.setText( this.config.getUrlPattern() );

setControl( composite );
}

public void setConfig( final Object config )
{
this.config = (FormGenCoreFacetInstallConfig) config;
}

public void transferStateToConfig()
{
this.config.setUrlPattern( this.urlPatternTextField.getText() );
}

private static GridData gdhfill()
{
return new GridData( GridData.FILL_HORIZONTAL );
}
}
          package com.formgen.eclipse;

import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;

public final class FormGenCoreFacetInstallDelegate implements IDelegate
{
public void execute( final IProject pj,
final IProjectFacetVersion fv,
final Object config,
final IProgressMonitor monitor )

throws CoreException

{
monitor.beginTask( "", 2 );

try
{

final FormGenCoreFacetInstallConfig cfg
= (FormGenCoreFacetInstallConfig) config;

final IFolder webInfLib = Utils.getWebInfLibDir( pj );

Utils.copyFromPlugin( new Path( "libs/formgen-core.jar" ),
webInfLib.getFile( "formgen-core.jar" ) );

monitor.worked( 1 );


Utils.registerFormGenServlet( pj, cfg.getUrlPattern() );

monitor.worked( 1 );
}
finally
{
monitor.done();
}
}
}

Once the above code changes have been made you should see another page appear in the Dynamic Web Project Wizard after the FormGen facets are selected. The new page will appear after the Web Module page, which is associated with thejst.web facet. That's because formgen.core facet depends on the jst.web facet. If this dependency relationship was not specified the relative order of these pages would be unspecified.

8. Defining Presets#

As the number of available facets grows, it becomes increasingly difficult for the user to figure out which combinations make sense. This is where presets come in. Presets (or Configurations, as they are referred to in the UI) are simply combinations of facets that someone has determined are useful in certain situations. Presets can be created by the user or supplied via an extension point.

Here is the extension point schema for declaring presets:

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<preset id="{string}">
<label>{string}</label>
<description>{string}</description> (optional)
<facet id="{string}" version="{string}"/> (1 or more)
</preset>
</extension>

Note that in order for a preset to apply to a given faceted project, the preset needs to include all of the project's "fixed facets". Fixed facets are the facets that are key to the proper operation of that project type and so cannot be removed. You can identify fixed facets by the lock icon.

Let's now create a preset that includes formgen facets.

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<preset id="formgen.preset">
<label>FormGen Web Project</label>
<description>Creates a web project with FormGen functionality.</description>
<facet id="jst.java" version="5.0"/>
<facet id="jst.web" version="2.2"/>
<facet id="formgen.core" version="1.0"/>
<facet id="formgen.ext" version="1.0"/>
</preset>
</extension>

Here is how the preset shows up on the facets selection page:

The preset can also be selected on the first page of all WTP project creation wizards. Here is how this looks in the Dynamic Web Project wizard:

9. Specifying Runtime Support Mappings#

One of the most important functions of the faceted project framework is to be able to accurately model whether a certain server runtime supports a given project. We do that by "mapping" project facets to runtime components that support them. If the artifacts created by a facet will run on any server that supports all of the facet's upstream dependencies, then the anywildcard can be used.

It's important to note that every facet needs to specify a support mapping of some kind. Facets that don't specify any support mappings are treated as not supported by any runtime, which is not very useful.

Here is the extension point that's used for specifying the support mappings:

          <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
<supported> (0 or more)
<runtime-component any="{boolean}"/> (optional)
<runtime-component id="{string}"/ version="{version.expr}"/> (0 or more)
<facet id="{string}"/ version="{version.expr}"/> (1 or more)
</supported>
</extension>

The <supported> block can reference any number of runtime components as well as any number of facets. The semantics of that is to declare as supported every combination in the resulting cross-product.

The version attributes of the <runtime-component> and <facet> elements can be omitted to include all versions.

The FormGen facets don't have any special support requirements. They will run on any server that supports the j2ee servlet spec. We will use the any wildcard to designate that.

          <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
<supported>
<runtime-component any="true"/>
<facet id="formgen.core"/>
<facet id="formgen.ext"/>
</supported>
</extension>

Alternative, if for some reason the FormGen functionality required a specific runtime, such as Tomcat, we would use something like the this instead:

          <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
<supported>
<runtime-component id="org.eclipse.jst.server.tomcat" version="[5.0"/>
<facet id="formgen.core"/>
<facet id="formgen.ext"/>
</supported>
</extension>

The above more restrictive specification will prevent FormGen facets from being selected if the project is targetted to any runtime other than Apache Tomcat 5.0 or newer.

10. Summary#

In this tutorial we created two fully-functional project facets by specifying constraints, implementing actions, grouping facets into categories, and creating wizard pages to allow users to parameterize facet installation. You should now be well prepared to create your own facets. Additional information not covered by this tutorial can be found in the following appendix sections.

Appendix A: Custom Version Comparators#

The faceted project framework needs to be able to compare facet version strings. The framework supplies a default version comparator that can handle version strings encoded using the standard decimal notation (such as 1.2 or 5.66.5533), but if you want to use a different format you will need to supply a custom version comparator.

Here is how you plug in a custom version comparator:

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<project-facet>

<version-comparator class="{class:java.util.Comparator<String>}"/>
</project-facet>
</extension>

When implementing a version comparator you can either start from scratch or subclass the default version comparator (org.eclipse.wst.common.project.facet.core.DefaultVersionComparator). Subclassing the default version comparator makes sense if the version format differs only slightly from the default format, such as using separators other than dots or having non-numeric characters at certain positions. Here are the protected methods exposed by the DefaultVersionComparatorclass that are designed to be overridden:

          /**
* Returns the string containing the separator characters that should be
* used when breaking the version string into segments. The default
* implementation returns ".". Subclasses can override this method.
*
* @return the separator characters
*/


protected String getSeparators();

/**
* Parses a segment of the version string. The default implementation parses
* the first segment as an integer (leading zeroes are ignored) and the
* rest of the segments as decimals (leading zeroes are kept). Subclasses
* can override this method to provide custom parsing for any number of
* segments.
*
* @param version the full version string
* @param segment the version segment
* @param position the position of the segment in the version string
* @return the parsed representation of the segment as a {@see Comparable}
* @throws VersionFormatException if encountered an error while parsing
*/


protected Comparable parse( final String version,
final String segment,
final int position )

throws VersionFormatException;

Appendix B: Version Expressions#

A version expression is a syntax for specifying more than one version. The version expressions are used throughout the framework's extension points, but you will most likely first encounter them while specifying the requires constraint.

A version expression is composed of multiple segments separated by commas. The commas function as an OR operation. Each segment is either a single version, a range, or a wildcard. Ranges are represented by bracket and dash notation such as [x-y). A bracket means inclusive, while the parenthesis means exclusive. Open ended ranges are also supported. A wildcard (represented by '*' character) can be used to match any version. It is not possible to use the wildcard to match part of the version string.

Here are some examples:

          1.2
1.2,1.5,3.2
[1.2-3.2]
[3.7-5.0)
[3.7
5.0)
1.2,[3.0-4.5),[7.3
*

Appendix C: Event Handlers#

It is possible to register listeners for certain events in the faceted project's life cycle. Here is the list of the available events:

          PRE_INSTALL 
POST_INSTALL
PRE_UNINSTALL
POST_UNINSTALL
PRE_VERSION_CHANGE
POST_VERSION_CHANGE
RUNTIME_CHANGED

The way one declares event handlers is very similar to how actions are declared, however there are some key differences:

  • Unlike actions, events are not a direct result of something a user does. This means that it is not possible to associate wizard pages or provide a custom configuration object for event handlers.

  • Multiple event handlers can be declared for the same event. The relative order that they will be invoked in is not specified.

Here is the extension point schema for registering event handlers:

          <extension point="org.eclipse.wst.common.project.facet.core.facets">
<event-handler facet="{string}" version="{version.expr}" type="{event.type}">
<delegate class="{class:org.eclipse.wst.common.project.facet.core.IDelegate}"/>
</action>
</extension>

As you can see, just like with action definitions, the event handler has to implement the IDelegate interface. Also, just like with action definitions, the <event-handler> block can be embeded directly inside the <project-facet-version> element. In that case, the values for the facet and version attributes are implied and the attributes should be omitted.

The PRE_* and POST_* event handlers all get the same config object passed into their delegate's execute method as the corresponding action delegate. The RUNTIME_CHANGED event handlers get an instance of IRuntimeChangedEvent.

          package org.eclipse.wst.common.project.facet.core;

import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;

/**
* Describes the runtime changed event to the RUNTIME_CHANGED event handlers.
*/


public interface IRuntimeChangedEvent
{
/**
* Returns the runtime previously associated with the project.
*
* @return the runtime previously associated with the project, or null
*/


IRuntime getOldRuntime();

/**
* Returns the runtime that's now associated with the project.
*
* @return the runtime that's now associated with the project, or null
*/


IRuntime getNewRuntime();
}

Appendix D: Property Tester#

A property tester is provided by the Faceted Project Framework that allows the presence of the facet in a project to be tested by any extension point that works with org.eclipse.core.expressions package. The most common usage is to enable user interface elements (such as actions and project property pages). The property name isorg.eclipse.wst.common.project.facet.core.projectFacet and the value is either a facet id or a facet id followed by a colon and a version expression.

Here is an example of using facets property tester to control enablement of a project properties page:

          <extension point="org.eclipse.ui.propertyPages">
<page
adaptable="true"
objectClass="org.eclipse.core.resources.IProject"
name="FormGen Properties"
class="com.formgen.eclipse.FormGenPropertiesPage"
id="org.eclipse.jst.j2ee.internal.J2EEDependenciesPage">
<enabledWhen>
<test
forcePluginActivation="true"
property="org.eclipse.wst.common.project.facet.core.projectFacet"
value="formgen.core"/>
</enabledWhen>
</page>
</extension>

Appendix E: Wizard Context#

Sometimes it desirable to be able to adjust the behavior of facet action wizard pages based on user input in the wizard pages of other facets. The IWizardContext interface can be used for this purpose. The wizard page gets a handle onIWizardContext interface when it's setWizardContext method is called. When writing code that relies on the wizard context, there are a couple of points you should keep in mind.

  1. The facet whose value you wish to check may have already been installed in the past. In that case you will not find it's install configuration in the wizard context. You will need to write conditional logic that will consult the wizard context or looks at project state on disk.

  2. You should make sure that a reasonable default is provided in your config object for the API-only scenario where your wizard page will not be involved.

Here is what the IWizardContext interface looks like:

          package org.eclipse.wst.common.project.facet.ui;

import java.util.Set;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action.Type;

/**
* The interface exposed to the facet action wizard pages that allows them
* to gather information about the wizard state.
*/


public interface IWizardContext
{
/**
* Returns the name of the project that the wizard is operating on. If the
* wizard is in the project creation mode, the project will not yet exist
* in the workspace.
*
* @return the name of the project that the wizard is operating on
*/


String getProjectName();

/**
* Returns the set of facets currently selected in the wizard. If the wizard
* is in the add/remove facets mode (vs. project creation), this method will
* return the set of facets currently installed in a project after being
* modified by the current set of actions.
*
* @return the set of facets currently selected in the wizard (element type:
* {@see IProjectFacetVersion})
*/


Set getSelectedProjectFacets();

/**
* Determines whether the specified facet is currently selected in the
* wizard. See {@see getSelectedProjectFacets()} for more information.
*
* @param fv the project facet version object
* @return true if an only if the provided project facet is
* currently selected in the wizard
*/


boolean isProjectFacetSelected( IProjectFacetVersion fv );

/**
* Returns the set of actions currently specified by the user.
*
* @return the set of actions currently specified by the user
*/


Set getActions();

/**
* Finds the action of specified type that applies to the specified facet,
* if such action exists. If the wizard is in the add/remove facets mode
* (vs. project creation), you cannot depend on finding the install action
* for a required facet as that facet may have already been installed.
*
* @param type the action type
* @param fv the project facet version object
* @return the action object or null
*/


Action getAction( Action.Type type,
IProjectFacetVersion fv );
}


출처 - 







'IDE & Build > Eclipse' 카테고리의 다른 글

svn password 초기화  (0) 2013.01.16
eclipse.ini 설정  (0) 2012.12.29
eclipse - Web Tools Platform Project(WTP)  (0) 2012.10.24
eclipse - 이클립스 import/export 하기  (0) 2012.09.21
Eclipse - *.min.js 에러 표시 제거  (0) 2012.06.05
Posted by linuxism
,


Eclipse subproject 분석

Table of Contents

Introduction

WTP(Eclipse Web Tools Platform)프로젝트는 Eclipse를 Web/J2EE 웹 어플리케이션 개발을 위한 툴로 확장시키는 오픈 소스 프로젝트이다.
이 오픈 소스 프로젝트의 목적은 웹 중심 기술 제작을 위한 일반적이고 확장 가능한 표준 기반의 툴 플랫폼을 제공하는 것이다.
WTP는 애플리케이션 개발자를 위한 풍부한 툴과 기능은 물론 사용자 정의 가능한 프로젝트 모델 및 애플리케이션 서버 지원 등 부가 가치 확장을 위한 벤더 중립적 프레임워크도 제공한다.
BIRT는 이클립스 기반의 리포팅 시스템으로 리포트를 생성하기 위한 어플리케이션과 통합하게 한다. 정보를 추출하고 분석하여 요약과 차트를 만드는 플러그인 수트로 report layout, data access and scripting 과 같은 기본적인 리포팅 기능을 제공한다.

Eclipse Web Tools (WTP)

WTP는 다음과 같은 툴을 포함한다.

  • source editors for HTML, Javascript, CSS, JSP, SQL, XML, DTD, XSD, and WSDL;
  • graphical editors for XSD and WSDL;
  • J2EE project natures, builders, and models and a J2EE navigator;
  • a Web service wizard and explorer, and WS-I Test Tools;
  • database access and query tools and models

WTP 프로젝트의 원칙

  • Eclipse 가치의 확대: Eclipse 프로젝트는 Java IDE 영역에 기술적 우수성, 기능 혁신 및 전반적인 확장성에 대해 높은 수준의 표준을 제시한 바 있습니다. 이와 동일한 표준을 웹/J2EE 애플리케이션-툴 영역에도 적용하기 위해 시도하고 있습니다.
  • 벤더 체계: 이 프로젝트의 주요 목표는 애플리케이션 개발 툴 시장의 활성화를 지원하는 것입니다. WTP의 대표적인 기능은 그 자체만으로도 유용하지만 처음부터 확장 가능하도록 설계되었으므로 상업 벤더들은 이 프로젝트에서 제공하는 기능을 자체 제품을 혁신하고 개발 효율성을 높일 수 있는 발판으로 사용할 수 있습니다.
  • 벤더 중립성: 벤더 중립성은 이 프로젝트의 핵심입니다. 가장 많은 애플리케이션 개발 벤더들의 제품이 지닌 장기적인 가치 제안을 부각시킴으로써 Eclipse 참여를 독려하고 Eclipse에 대한 시장의 호평을 이끌어내는 것을 목표로 합니다.
  • 표준 기반 혁신: 이 프로젝트는 가능한 많은 벤더들이 자신의 고객 및 최종 사용자를 위해 부가 가치가 있는 개발 제품을 만들 수 있도록 확장 가능한 표준 기반의 툴을 제공합니다. WTP는 모든 표준을 준수합니다. WTP의 초점이 기존의 표준과 배포를 사용하는 런타임 기술에 있지만 최첨단 툴이 요구되는 신생 표준 또한 준수합니다. 하나의 주어진 기능을 위해 여러 기술들이 사용되는 경우 기술적 실행 가능성과 장기적으로 가장 가능성이 높고 확장 가능한 기반의 제공을 목표로 각 기술을 지원합니다.
  • 신속한 개발:
  • 포괄성과 다양성: 최종 사용자의 포괄적인 요구사항을 표현하는 많은 참여자들로 부터 좋은 아이디어를 끌어내는 것을 목표로 합니다. 그래서 이 프로젝트에 참여가기 위한 지역적 영역(geographical domains), 마켓, 기술 등의 넓은 범위에 걸친 기구(조직)을 장려할 것이다.

WEP 프로젝트 범위

J2EE 퍼스펙티브

WTP install

download install.

  1. Web Tools Platform (WTP) project http://download.eclipse.org/webtools/downloads/
    • WebTools Platform; All-in-one : 이클립스 sdk, emf, gef, jem이 모두 포함된 버전
    • WebTools Platform; Runtime : WST와 JST가 포함된 빌드 버전으로 WTP 런타임 모듈이다.
    • 참고) wtp-sdk-1.0.zip 와 같이 sdk가 포함된 파일은 소스가 포함됨.
  2. Tomcat 4.1.X 이상 http://jakarta.apache.org/tomcat/
  3. JDK 1.4.2 http://java.sun.com/j2se/1.4.2/download.html

Eclipse update install.

  1. Eclipse에서 Help -> Software Updates -> Find and install 선택.
  2. update창에서 Search for new features to install 선택.
  3. New Remote Site 메뉴로 web tool update URL추가.
    URL: http://download.eclipse.org/webtools/updates/
  4. URL을 추가하면 아래와 같이 등록된 Site이름이 나오고 해당 Site에 check를 한 후 Finish를 선택한다.
  5. Site에서 update가능한 목록이 보이고 update할 features를 선택 한다.
  6. 선택된 update항목에 대한 설명과 licenses들이 나오고 동의를 하고 Next를 선택하면 install한다.

웹 어플리케이선 실행을 위한 이클립스 환경설정
JRE설정과 서버설정(톰켓과 같은 웹어플리케이션 등록)이 필요하다.

  1. JRE 설정 : Preferences -> Java -> Installed JREs
  2. 런타임 서버 설정 : Preferences -> Server -> Installed Runtimes
    • 런타임 서버 추가 설정 : Preferences -> Server -> Installed Runtimes -> Add

런타임 서버를 프로젝트로 등록

  1. 런타임 서버 등록 : File -> New -> Other -> Server -> Server

  2. 서버 등록 후 perspective
  3. 서버 시작/종료/리스타트

*런타임 서버설정에서 여러개의 서버 설정하였을 경우 런타임 서버등록 절차를 반복해 여러개 서버를 등록 할 수 있다.

example - Building a School Schedule Web Application

학교 시간표(School Schedule) 웹어플리케이션을 만들어 보자.

  • J2EE Web 프로젝트 새로 만든 후 데이타를 담을 빈클래스, 결과를 보여줄 JSP페이지, action을 처리할 서블릿클래스들을 생성한다.
  1. J2EE Web 프로젝트 생성 : File -> New -> Project -> Web -> Dynamic Web Project

    • 생성결과
  2. 빈 클래스 생성 : School Schedule 프로젝트의 src폴더에서 Right Click -> New -> Class
    • SchoolClass 클래스 추가
      • SchoolClass.java 내용을 편집한다. SchoolClass.java
      • 편집시 Generate Getters and Setters... 를 사용해 본다. Right Click -> Source -> Generater Getters and Setters
    • SchoolSchedule 클래스 추가
  3. JSP 페이지 생성 : School Schedule 프로젝트의 WebContent 폴더에서 Right Click -> New File
    • Schedule.jsp 파일 추가
  4. 서블릿 클래스 생성 : School Schedule 프로젝트의 src폴더아래 org.eclipse.wtp.sample.classschedule package 패키지에서 right click -> New Class
    • ScheduleServlet 서블릿 추가
      • ScheduleServlet.java 내용을 편집한다. ScheduleServlet.java
      • /WEB-INF/web.xml 에 서블릿 정보를 추가한다.
        web.xml
                  <servlet>
                  <servlet-name>Schedule</servlet-name>
                  <servlet-class>
                  org.eclipse.wtp.sample.classschedule.ScheduleServlet
                  </servlet-class>
                  </servlet>
                  <servlet-mapping>
                  <servlet-name>Schedule</servlet-name>
                  <url-pattern>/Schedule</url-pattern>
                  </servlet-mapping>
                  
  5. standard tag libaries 사용
    • Schedule.jsp에서 테그 라이브러를 사용한다.
    • http://jakarta.apache.org/taglibs/로 부터 jstl.jar와 standard.jar파일을 다운받아 WEB=INF/lib에 복사한다.
      • tld파일도 복사 한다. /WEB-INF/tld/c-1_0.tld
  6. 실행하기
    • Schedule.jsp파일 선택 right click -> Run As -> Run On Server
      • 서버가 지정되어 있지 않을경우 선택
    • 결과

기타

SSE(The Structured Source Editing) in Milestone 2

XDoclet

  • Preference - > XDoclet. Enable XDoclet Builder 체크. XDoclet Home 지정

property editor

object web - lomboz

Business Intelligence and Reporting Tools (BIRT)

BIRT는 웹어플리케이션을 위한 이클립스 기반의 오픈소스 리포팅 플랫폼이다. 이클립스 플러그인 Report Designer와 웹디플로이 환경인 Runtime Engine으로 구성된다.

  • report designer perspective

BIRT install

  • 현재 BRIT 테스트 환경은 Eclipse 3.0.1, and 3.0.2. ,GEF 3.0.1. ,EMF 2.0.3. ,JRE 1.4.2. 와 Eclipse 3.1. ,GEF 3.1. ,EMF 2.1. ,JRE 1.4.2/JRE 1.5. 이다.
  • 이클립스 (Eclipse Platform 3.1 Release), GEF(Graphic Editor Framework - GEF 3.1 Release, GEF Runtime), EMF(Eclipse Modeling Framework - EMF & SDO RT version 2.1)을 다운 받는다.
  • Installation Example Flash
  • 추가적인 기능을위해 iText(PDF 문서 생성), Axis(자바 기반의 SOAP 프로세서), Prototype.js 등을 다운 받는다.
    • Itext-1.3.jar file needs to be copied to the plugins/org.eclipse.birt.report.engine.emitter.pdf_version/lib directory.
    • Axis 1.2.1 (axis.jar ,axis-ant.jar ,commons-discovery-0.2.jar ,jaxrpc.jar ,saaj.jar ,wsdl4j-1.5.1.jar ) copy into the plugins/org.eclipse.birt.report.viewer_version/birt/WEB-INF/lib directory.
    • prototype.js Copy it into the plugins/org.eclipse.birt.report.viewer_version/birt/ajax/lib directory

Example - My First Reports

  • BIRT Libraries
    • 리포트 아이템과 필수 기능들을 리이브러리안에 포함시켜 캡슐화 시킬 수 있다. 라이브러리는 리포트 디자이너와 템플릿에 임포트 되어 재사용 한다.
  • BIRT Templeate
    • 라이브러리와 이미 정의된 템플릿, 레이아웃 등을 이용해 템플릿을 작성할 수 있다. 복잡한 리포트나 특화된 리포트 양식을 미리 정의함으로써 반복 작업을 피할 수 있다.
    • Usiing Eclipse BIRT Report Libraries and Templates
  • BIRT플러그인에 포함되어 있는 데이터 예제를 이용해 리포트를 만들어 본다.
  1. 리포트 생성
    • 프로잭트 생성 : File -> New -> Project -> Business Intelligence and Reporting Tools -> Report Project -> 새 프로잭트 창
      • 프로젝트 이름 "My First Reports" 입력 -> Finish
    • 리포트 생성 : Navigator's My First Rerpots right click -> New -> Report -> 새 보고서 창.
      • 보고서 이름 "Customers" 입력 -> Fihish or Next -> 보고서 템플릿 선택 창 -> Finish
  2. 데이터 소스, 데이터 세트 생성
    • BIRT는 데이터 소스를 통해 데이터베이스 또는 데이터 프로바이더와 연결하고, 데이타 세트를 통해 데이트를 가져온다.
    • 데이터 소스 생성
      • Data Explorer's Data Source 노드 right click -> New Data Source -> 새 데이터 소스 창 -> data source name 입력("Sample") -> Next -> Finish
    • 데이터 세트 생성
      • Data Explorer's Data Set 노드 right click -> New Data Set -> 새 데이터 소스 창 -> Finish -> 데이터 세트 편집 창 -> editing query -> OK

  3. 리포트 테이블 생성
    • palette의 테이블 아이템을 이용해 테이블 레이아웃을 그린다. (drag & drop)
      • Data Explorer's Data Set의 컬럼을 테이블의 상세 정보행에 위치 시킨다. 머리글행에 자동으로 컬럼 이름이 들어간다.
      • 속성 편집기를 이용해 컬럼 스타일을 편집한다. 새스타일 정의 : Element -> Add New Style -> 스타일 속성 창
         
      • 결과 미리보기
      • 데이터 세트 편집 창에서 파라미터, 필터 등의 설정을 통해 원하는 데이터를 추출 할 수 있다.

  4. 리포트 예제

Dyploying a BIRT report

  1. install
    • download GIRT report engine runtime http://download.eclipse.org/birt/downloads/ - birt-runtime-xxx.zip
    • 압축 파일을 풀어 "Web View Example"디렉토리를 톰켓 webapps아래 복사 한다. (rename to "birt");
    • Copy itext-1.3.jar to TOMCAT_HOME/webapps/birt/plugins/org.eclipse.birt.report.engine.emitter.pdf/lib.
    • Copy prototype.js to TOMCAT_HOME/webapps/birt/ajax/lib.
    • Copy Axis jars to the TOMCAT_HOME/webapps/birt/WEB-INF/lib
  2. run

생각해 보기

참고문헌

문서에 대하여

최초작성자 : 박재성
최초작성일 : 2006년 1월 31일
버전 : 1.1
문서이력 :

  • 2006년 1월 31일 박재성 문서 최초 생성 : 문서 최초 생성 및 BIRT에 관한 참고문헌을 추가하였다.
  • 2006년 2월 민예원 Study 자료 추가.
  • 2006년 2월 21일 장진달 Eclipse update로 plugin설정 하기 추가.


출처 - http://pcguy7.springnote.com/pages/298867





Subprojects

  • Common Components More... 
    The common component contains common utilities and infrastructure which are required by the Web Tools Platform project, but which are not specific to web tooling. 
    more about common components »
  • Dali JPA Tools More... 
    The Dali Java Persistence Tools Project provides extensible frameworks and tools for the definition and editing of Object-Relational (O/R) mappings for Java Persistence API (JPA) entities. JPA mapping support focuses on minimizing the complexity of mapping by providing entity generation wizards, design-time validation, and a rich UI for entity and persistence unit configuration. 
    more about dali »
  • EJB Tools More... 
    The EJB Tools Project provides frameworks and tools focused on the development of EJB artifacts. 
    more about EJB Tools»
  • Enterprise Tools for the OSGi Service Platform (Libra) More... 
    The Libra project integrates the existing tooling provided by the Plug-in Development Environment project and the Web Tools Platform project to work together for implementing OSGi Enterprise scenarios. 
    more about Libra»
  • Java EE Tools More... 
    The Java EE Tools Project provides frameworks and tools focused on the development of J2EE artifacts. 
    more about Java EE Tools»
  • JavaScript Development Tools (JSDT) More... 
    The JavaScript Development Tools provide plug-ins that implement an IDE supporting the development of JavaScript applications and JavaScript within web applications. It adds a JavaScript project type and perspective to the Eclipse Workbench as well as a number of views, editors, wizards, and builders. 
    more about JavaScript Development Tools»
  • JavaServer Faces Tools (JSF) More... 
    The JSF Tools Project adds comprehensive support to the Eclipse Web Tools Platform Project to simplify development and deployment of JavaServer Faces (JSF) applications. 
    more about jsf »
  • Release Engineering (releng) More... 
    The WTP Release Engineering (releng) project is a sub-project in the Eclipse WTP top level Project. In provides frameworks to do the builds and run automated tests. 
    more about Releng»
  • Server Tools More... 
    The Server tools project is responsible for the framework and adapters for selected servers. It provides a generic infrastructure and J2EE specific server components. 
    more about Server Tools»
  • Source Editing More... 
    The Source Editing project provides source editing support for typical "web" languages and the mixing of them, with a focus on making the editors extensible and easily reusable. Here you will find tools for working with XML, XML Schema, XSL, HTML, CSS, DTD, and JSP resources, as well as an XML Perspective. 
    more about source editing»
  • Web Services Tools More... 
    The JST Web services component contains tools for developing and interacting with Java Web services. 
    more about Web services tools»
  • WTP Incubator More... 
    The WTP Incubator Project consists of components that are new, under development, but not yet ready or planned for release. 
    more about WTP Incubator»


출처 - http://www.eclipse.org/webtools/









Posted by linuxism
,