Birt(Business Intelligence and Reporting Tools), 즉 비즈니스 인텔리전스 및 보고 도구 프로젝트는 리치 클라이언트 및 웹 애플리케이션, 특히 Java 및 Java EE 기반 애플리케이션에 대한보고 및 비즈니스 인텔리전스 기능을 제공하는 오픈 소스 소프트웨어 프로젝트다.
1. Birt 설치
https://download.eclipse.org/birt/downloads/drops/
해당 사이트에 들어가서 최신 버전을 선택하고, designer-all-in-one을 받아준다.
프로그램을 받으면 위와 같이 eclipse 플러그인 형태의 프로그램을 받을 수 있는데, birt project는 이 이클립스를 사용해서 관리한다.
2. Birt 예제 사이트
https://www.eclipse.org/birt/documentation/tutorial/
공식 예제 사이트는 위 사이트를 참고하면 된다.
3. Birt Perspective
해당 프로그램을 실행하면 이클립스 프로그램이 실행되는데, Open Perpective에서 Report Design을 선택해준다.
그러면 위와 같이 Birt Plugin을 사용하기에 최적화된 화면으로 사용할 수 있게 된다.
4. Birt Project 생성
좌측 아래의 Navigator Tab에서 Birt Project를 생성해준다.
위 Business Intelligence and Reporting Tools 위자드가 안보인다면 전혀 다른 Eclipse를 설치하거나, 실행시킨 것이니 Birt Eclipse를 실행시킨 것이 맞는지 확인해보길 바란다.
이와 같이 빈 프로젝트가 생성되고 Birt에서 사용되는 .rpgdesign, .rpttemplate를 사용할 수 있게 된다.
5. Sample .rpttemplate
.rpttemplate 파일을 생성한다음 아래 소스를 XML Source Tab에 붙혀넣는다. 원본 소스는 아래 링크를 참고하면 된다.
https://www.eclipse.org/birt/resources/documentation/tutorial/customers.rptdesign
<?xml version="1.0" encoding="UTF-8"?>
<!-- Written by Eclipse BIRT 1.0 -->
<property name="createdBy">Eclipse BIRT Designer Version 1.0.0 Build <20050405-1230></property>
<property name="units">in</property>
<data-sources>
<oda-data-source extensionID="org.eclipse.birt.report.data.oda.sampledb" name="Sample" id="11"/>
</data-sources>
<data-sets>
<oda-data-set extensionID="org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet" name="Customers" id="12">
<property name="dataSource">Sample</property>
<property name="queryText">SELECT *
FROM CUSTOMERS
WHERE COUNTRY = 'USA'</property>
</oda-data-set>
</data-sets>
<styles>
<style name="report" id="2">
<property name="fontFamily">sans-serif</property>
</style>
<style name="label" id="3"/>
<style name="text" id="4"/>
<style name="data" id="5"/>
<style name="table" id="6"/>
<style name="grid" id="7"/>
<style name="list" id="8"/>
<style name="image" id="9"/>
<style name="Header" id="10">
<property name="backgroundColor">#0080FF</property>
<property name="fontWeight">bold</property>
<property name="color">#FFFFFF</property>
</style>
</styles>
<page-setup>
<simple-master-page name="Simple MasterPage" id="13">
<page-header>
<grid id="14">
<property name="width">100%</property>
<column id="15"/>
<row id="16">
<cell id="17">
<property name="fontSize">xx-large</property>
<property name="fontWeight">bold</property>
<property name="textAlign">center</property>
<text id="18">
<text-property name="content"><![CDATA[Title]]></text-property>
</text>
</cell>
</row>
</grid>
</page-header>
<page-footer>
<grid id="19">
<property name="width">100%</property>
<column id="20"/>
<column id="21"/>
<row id="22">
<cell id="23">
<text id="24">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>
</text>
</cell>
<cell id="25">
<property name="textAlign">right</property>
<text id="26">
<text-property name="content"><![CDATA[Page:]]></text-property>
</text>
</cell>
</row>
</grid>
</page-footer>
</simple-master-page>
</page-setup>
<body>
<grid id="27">
<property name="width">100%</property>
<column id="28">
<property name="width">33%</property>
</column>
<column id="29">
<property name="width">33%</property>
<property name="textAlign">center</property>
</column>
<column id="30">
<property name="width">33%</property>
<property name="textAlign">right</property>
</column>
<row id="31">
<property name="verticalAlign">top</property>
<cell id="32">
<image id="33">
"http://www.eclipse.org/birt/tutorial/basic/multichip-4.jpg"
</image>
</cell>
<cell id="34">
<property name="verticalAlign">top</property>
<text id="35">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<CENTER>
<FONT size="6" color=blue>
Customer Listing
</FONT>
<BR>
<I>For internal use only</I>
</CENTER>]]></text-property>
</text>
</cell>
<cell id="36">
<property name="verticalAlign">top</property>
<data id="37">
<structure name="dateTimeFormat">
<property name="category">Long Date</property>
<property name="pattern">Long Date</property>
</structure>
<expression name="valueExpr">new Date( )</expression>
</data>
</cell>
</row>
<row id="38">
<property name="height">0.25in</property>
<cell id="39"/>
<cell id="40"/>
<cell id="41"/>
</row>
</grid>
<table name="table1" id="42">
<property name="borderBottomColor">#000000</property>
<property name="borderBottomStyle">solid</property>
<property name="borderBottomWidth">medium</property>
<property name="borderLeftColor">#000000</property>
<property name="borderLeftStyle">solid</property>
<property name="borderLeftWidth">thin</property>
<property name="borderRightColor">#000000</property>
<property name="borderRightStyle">solid</property>
<property name="borderRightWidth">medium</property>
<property name="borderTopColor">#000000</property>
<property name="borderTopStyle">solid</property>
<property name="borderTopWidth">thin</property>
<property name="width">100%</property>
<property name="dataSet">Customers</property>
<list-property name="sort">
<structure>
<expression name="key">row["CUSTOMERNAME"]</expression>
</structure>
</list-property>
<column id="88">
<property name="width">1.208in</property>
</column>
<column id="89">
<property name="width">1.197in</property>
</column>
<column id="90">
<property name="width">2.114in</property>
</column>
<column id="91">
<property name="width">1.635in</property>
</column>
<header>
<row id="43">
<cell id="44">
<label id="45">
<property name="style">Header</property>
<text-property name="text">State</text-property>
</label>
</cell>
<cell id="46">
<label id="47">
<property name="style">Header</property>
<text-property name="text">City</text-property>
</label>
</cell>
<cell id="48">
<label id="49">
<property name="style">Header</property>
<text-property name="text">Name</text-property>
</label>
</cell>
<cell id="50">
<label id="51">
<property name="style">Header</property>
<text-property name="text">Phone</text-property>
</label>
</cell>
</row>
</header>
<group id="52">
<expression name="keyExpr">row["STATE"]</expression>
<header>
<row id="53">
<property name="backgroundColor">#BBDDFF</property>
<cell id="54">
<data id="55">
<property name="fontSize">large</property>
<property name="fontWeight">bold</property>
<expression name="valueExpr">row["STATE"]</expression>
</data>
</cell>
<cell id="56"/>
<cell id="57"/>
<cell id="58"/>
</row>
</header>
<footer>
<row id="59">
<cell id="60"/>
<cell id="61"/>
<cell id="62"/>
<cell id="63"/>
</row>
</footer>
</group>
<group id="64">
<property name="interval">none</property>
<property name="sortDirection">asc</property>
<expression name="keyExpr">row["CITY"]</expression>
<header>
<row id="65">
<cell id="66"/>
<cell id="67">
<data id="68">
<property name="fontSize">large</property>
<property name="color">#0080FF</property>
<expression name="valueExpr">row["CITY"]</expression>
</data>
</cell>
<cell id="69"/>
<cell id="70"/>
</row>
</header>
<footer>
<row id="71">
<cell id="72"/>
<cell id="73"/>
<cell id="74"/>
<cell id="75"/>
</row>
</footer>
</group>
<detail>
<row id="76">
<cell id="77"/>
<cell id="78"/>
<cell id="79">
<data id="80">
<expression name="valueExpr">row["CUSTOMERNAME"]</expression>
</data>
</cell>
<cell id="81">
<data id="82">
<structure name="stringFormat">
<property name="category">Custom</property>
<property name="pattern">(@@@)@@@-@@@@</property>
</structure>
<expression name="valueExpr">row["PHONE"]</expression>
</data>
</cell>
</row>
</detail>
<footer>
<row id="83">
<cell id="84"/>
<cell id="85"/>
<cell id="86"/>
<cell id="87"/>
</row>
</footer>
</table>
</body>
</report>
붙혀넣은 상태에서 Layout을 보면
이와 같은 화면을 볼 수 있고, .rpttemplate 우클릭 – Report – Run Report 를 선택하면
이런 사이트가 열리게 된다.
6. Data Source(JDBC 사용)
Birt의 표나 차트에 데이터베이스를 연결할 수 있는데, mariadb(mysql)을 사용할 수 있도록 테스트 해본다.
제일 먼저 Report Perspective를 사용한 상태면 좌측 상단에 Data Explorer 탭이 있을텐데, Data Sources를 선택하고 New Data Source를 선택해준다.
여기서 여러가지 JDBC를 선택할 수 있지만 mariadb를 사용하기 때문에 JDBC Data Source를 선택해준다.
제일 먼저 Driver Class를 설정해주어야 하기 때문에 Manage Drivers…를 선택해준다.
최종적으로 웹 서버에 표와 차트를 볼 수 있는 화면을 배포하는 것이 목적이기 때문에 Libirary 형태로 참조할 수 있도록 Jar Files을 추가해준다.
Mariadb를 사용하기 때문에 mariadb-java-client.jar을 인터넷에서 다운받아야 한다.
위 프로젝트에서 사용된 mariadb client 버전은 2.5.4버전이다.
추가를 하면 OK를 눌러서 완료해준다.
JDBC Driver가 추가가 완료 되면 콤보박스에 추가된 드라이버를 확인할 수 있는데, 이를 선택해준다.
후에 Database URL과 user name, password를 입력해주고 Test Connection을 선택해 연결이 정상적으로 된 것인지 확인해준다.
이 다이얼로그가 나와야 정상적으로 연결이 된 상태다.
이 다이얼로그에 오류가 발생한다면 url 혹은 계정이 문제가 있는 것이니 그쪽으로 확인해보면 된다.
Data Sources가 정상적으로 등록이 되었으면, 하단의 Data Sets에서 New Data Set을 선택해준다.
Data Set Name을 취향에 따라 작성하고 Next를 누른다.
위와 같이 Database에서 select 쿼리를 실행하는 Data Set을 설정할 수 있는 것으로, 표나 차트로 불러올 테이블과 컬럼을 선택해 쿼리를 작성하고 Finish를 눌러주면 된다.
Finish를 누르면 위와 같이 Output Columns에 대해 확인할 수가 있는데, 여기서 Type과 Name이 잘 일치하는지 확인해준다.
우측 화면은 Layout으로 설정해주고, 생성된 Data Set을 우측화면으로 드래그를 하면
Data Set을 Binding 시킬수 있는 화면이 나오는데, 이 화면은 어떤 컴포넌트에 어떤 값을 출력할 것인지를 셋팅하는 화면이다.
이와 같이 자동적으로 Table이 생성되며 컬럼에 맞게 데이터가 표시된다.
Run Report로 테스트를 해보면 Database에 있던 값을 위와 같은 형태로 볼 수 있게 된다.
7. Deploy Tomcat
톰캣에 배포하기 위해서 아래 링크에서 샘플 프로젝트를 받아준다.
https://download.eclipse.org/birt/downloads/drops/
처음 Birt를 설치했던 사이트에서 birt-runtime으로 된 파일을 다운받으면 된다.
압축 파일을 풀면, WebViewerExample 폴더가 있을 텐데, 폴더 통째로 Tomcat의 webapps에 넣어준다. 위 Birt-runtime을 테스트한 tomcat 버전은 8.5.61 버전이다.
그 후 폴더 이름을 Birt로 변경해준다(취향에 따라)
사용한 운영체제는 Linux이고, Tomcat을 Linux에서 가동 중인 상황이다.
톰캣의 bin폴더에 들어가서 start.sh로 톰캣을 실행시키면 자동적으로 톰캣에 birt-runtime이 deploy되고, TOMCAT_SERVER_URL:PORT/Birt(localhost:8080/Birt)에 접속해본다.
이와 같은 사이트가 나오면 정상적으로 Deploy가 된 것이다.
위의 View Example을 선택해보면
와 같은 페이지로 이동 된 것을 확인할 수 있다.
8. Tomcat JDBC 라이브러리 추가(연동)
Data Source에 mariadb JDBC를 추가해서 테스트한 .rptdesign파일을 다른 서버에 옮겨서 실행하면 JDBC를 찾을 수 없다는 에러가 발생한다.
이는 톰캣 서버에 maria jdbc가 추가가 되어 있지 않아서 발생하는 문제인데, jdbc jar파일을 lib 폴더에 추가해주는 것으로 해결 할 수가 있다.
7번에서 Tomcat 서버에 복사해서 붙여넣었던 WebViewerExample 폴더 기준으로 설명한다. 설명하기 전에 WebViewerExample폴더 이름을 Birt로 바꾸었기 때문에 Birt로 부른다.
Tomcat폴더/webapps/Birt/WEB-INF/lib/ 경로로 접근하면
위와 같이 Birt plugin에서 사용되는 무수히 많은 라이브러리(.jar)를 확인할 수 있다. 로컬 환경 이클립스에서 Data Source를 생성할 때 사용했던 mariadb jdbc .jar 파일을 위 경로에 복사해넣으면 정상적으로 데이터베이스를 읽어서 화면에 내용을 출력해준다.
localhost에서 테스트했던 .rptdesign 파일을 그대로 사용했고, 해당 파일의 경로는 tomcat폴더/webapps/Birt/report/로 잡았다.
위 경로에 파일을 붙여넣고,
http://192.168.0.177:8081/Birt/frameset?__report=report/new_report.rptdesign
http://ip주소:8081/Birt/frameset?__report=report/파일이름
위 주소와 같이 작성해서 접근하면 된다.
9. Chart View 설정
Table이 아닌 Chart 또한 사용할 수 있다. 기존의 new_report.rptdesign 파일을 사용한다.
Data Set을 Layout 쪽으로 드래그해서 생성한 표에 마우스를 올려두면 아래와 같이
Table 표시가 나올 텐데, 우측 버튼을 누르고 Create Chart View를 선택한다.
위와 같은 다이얼로그가 생성이 될텐데, 원하는 Chart Type을 선택하고 Next를 누른다.
그러면 Data Preview와 함께 차트의 값을 설정할 수 있는 화면으로 넘어간다.
기본 Bar Chart를 사용한다면 Y축의 데이터와 X축의 데이터를 선택할 수가 있는데, 처음에 Data Set을 사용해서 Drag를 했음으로, 데이터베이스의 컬럼 기준으로 선택할 수가 있게 된다.
Bar Chart를 사용했기 때문에 Y축은 수치, X축은 기준 값으로 설정했다. 그 다음 Next를 누르면
앞에서 설정했던 설정값을 기준으로 생성된 Bar Chart의 Preview가 생성된다.
Finish를 누르면
위와 같이 Table 옆에 Chart 칸이 하나가 더 생성이 되고, 이 Chart를 사용하려면 Toggle 해주면 된다.
위 .rptdesign 파일을 저장하고 Run Report를 하면
Chart 형태의 화면을 사용할 수 있게 된다.
'Java > 순수 Java' 카테고리의 다른 글
[Java] Java Modbus 사용법(JLibModbus) (0) | 2021.02.16 |
---|---|
[Java] Lombok Annotation 정리 (0) | 2020.09.07 |
[Java] Lombok Setter Custom (0) | 2020.09.07 |
[Java] Lombok 설치 방법 (0) | 2020.09.07 |
[Java] 자바 코드 실행시간 측정 방법 (1) | 2020.05.27 |