Quantcast
Channel: Ajka + Andrej = Olivia | Dominik » JBoss
Viewing all articles
Browse latest Browse all 3

JBoss BIRT Integration

$
0
0

Jeden z projektov, na ktorom pracujem, používa BIRT Report integrovaný do JBoss servera. V rámci projektu JBoss-Reports bola spravená implementácia BIRT enginu ako service. Tento projekt už nie je aktuálny, no poslúžil mi ako návod na vytvorenie vlastnej integrácie linka. V našom príklade si ukážeme, ako integrovať BIRT report do JBoss 6 servera. Použijeme verziu 2.6.2 BIRT reportu. Najskôr si musíte stiahnuť BIRT runtime z tejto adresy linka a rozpakovať do adresára. Ďalej v článku sa budem odkazovať na tento adresár ako na adresár BIRT_RUNTIME_DIR.

BIRT_RUNTIME_DIR
+—about_files
+—ReportEngine
¦ +—configuration –> default/birt/configuration
¦ +—lib –> default/lib/
¦ +—plugins –> default/birt/plugins
¦ +—samples
+—WebViewerExample

Z priečinku BIRT_RUNTIME_DIR/lib nakopírujte všetky knižnice do priečinka /default/lib. Taktiež v priečinku …/default/ vytvorte adresár s názvom birt. Tento adresár bude domovský adresár BIRT report systému. Teraz skopírujte adresár BIRT_RUNTIME_DIR/plugins a BIRT_RUNTIME_DIR/configuration do novo vytvoreného pričienka birt.

Report systém vytvorí po spustení adresár workspace v priečinku …/default/birt. V ňom nájdete aj log report systému. To je všetko, čo potrebujete nastaviť a skopírovať z BIRT reportu. Nezabudnite skopírovať váš JDBC ovládač do …/default/lib adresára a tiež do … /default/birt/plugins/org.eclipse.birt.report.data.oda.jdbc_2.6.2.r262_v20110127/drivers priečinku.

jboss-6.0.0.Final
+—bin
+—client
+—common
+—docs
+—lib
+—server
+—all
+—default
¦ +—birt // BIRT runtime directory
¦ ¦ +—configuration
¦ ¦ +—plugins
¦ ¦ ¦ +—org.apache.derby.core_10.5.1.1_v20100129
¦ ¦ ¦ +—org.eclipse.birt.report.data.oda.jdbc_2.6.2.r262_v20110127
¦ ¦ ¦ ¦ +—drivers // BIRT JDBC driver directory
¦ ¦ ¦ +—org.eclipse.birt.report.data.oda.sampledb_2.6.2.r262_v20110127
¦ ¦ ¦ +—org.eclipse.birt.report.engine.fonts_2.6.2.r262_v20110127
¦ ¦ ¦ +—org.eclipse.core.runtime.compatibility.registry_3.3.0.v20100520
¦ ¦ ¦ +—org.w3c.sac_1.3.0.v20100915
¦ ¦ +—workspace
¦ +—conf
¦ +—data
¦ +—deploy
¦ +—deployers
¦ +—lib // BIRT API libraries
¦ +—log
¦ +—reports // Reports directory
¦ +—tmp
¦ +—work
+—jbossweb-standalone
+—minimal
+—standard

Teraz sa môžete pustiť do tvorby MBeanu, ktorý predstavuje Birt Report Service. V rámci JBoss servera je MBean singleton service a je plne kontrolovaný serverom. MBean sa dá vytvoriť niekoľkými spôsobmi, napríklad JBoss anotáciou @Management. V Birt Report Service triede musíte implementovať metódy start a stop (linka) z MBean rozhrania. V metóde start budete spúštať BIRT report systém. Na to, aby ste správne naštartovali report systém, musíte definovať jeho domovský priečinok. Na to využijete ServerConfigImplMBean.

 

@Override
public void start() throws Exception {
LOGGER.info(“Start the report service – start.”);

MBeanServer server = MBeanServerLocator.locate();
ServerConfigImplMBean<?> serverConfig = (ServerConfigImplMBean<?>) MBeanProxyExt.create(ServerConfigImplMBean.class, ServerConfigImplMBean.OBJECT_NAME, server);

String birtRuntimeDir = serverConfig.getServerHomeLocation().getPath() + “/birt/”;
LOGGER.info(“Birt runtime directory: ” + birtRuntimeDir);

reportsHomeDirectory = serverConfig.getServerHomeLocation().getPath() + “/reports/”;
LOGGER.info(“Birt reports directory: ” + reportsHomeDirectory);

if (engine == null) {

LOGGER.info(“Create BIRT engine – start.”);

System.setProperty(“RUN_UNDER_ECLIPSE”, “false”);

EngineConfig engineConfig = new EngineConfig();
engineConfig.setEngineHome(birtRuntimeDir);
engineConfig.setResourcePath(reportsHomeDirectory);

engineConfig.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, BirtReportService.class.getClassLoader());

try {
Platform.startup(engineConfig);
} catch (BirtException ex) {
LOGGER.error(“Error by starting the BIRT platform.”, ex);
}

IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
engine = factory.createReportEngine(engineConfig);
engine.changeLogLevel(Level.FINE);

LOGGER.info(“Create BIRT engine – end.”);
}

LOGGER.info(“Start the report service – start.”);
}

 

V metóde stop musíte vypnúť BIRT report systém.

 

@Override
public void stop() throws Exception {
LOGGER.info(“Stop the BIRT service – start.”);

if (engine != null) {
LOGGER.info(“Destroy BIRT engine.”);
engine.destroy();
}

LOGGER.info(“Stop the BIRT service – end.”);
}

 

Hlavička nášho servisu bude obsahovať nasledovné dve anotácie: @Service and @Management.

 

@Service(name = “BirtReportService”)
@Management(BirtReportServiceMBean.class)
public class BirtReportService implements BirtReportServiceMBean {

 

Pokiaľ teraz spustíte server s nasadeným projektom, ktorý obsahuje náš report servis, v logu uvidíte nasledovné riadky:

 

17:41:57,940 INFO [com.ajkaandrej.jboss.report.impl.BirtReportService] Start the report service – start.
17:41:57,948 INFO [com.ajkaandrej.jboss.report.impl.BirtReportService] Birt runtime directory: /D:/jboss-6.0.0.Final/server/default//birt/
17:41:57,948 INFO [com.ajkaandrej.jboss.report.impl.BirtReportService] Birt reports directory: /D:/jboss-6.0.0.Final/server/default//reports/
17:41:57,949 INFO [com.ajkaandrej.jboss.report.impl.BirtReportService] Create BIRT engine – start.
17:42:00,140 INFO [com.ajkaandrej.jboss.report.impl.BirtReportService] Create BIRT engine – end.
17:42:00,141 INFO [com.ajkaandrej.jboss.report.impl.BirtReportService] Start the report service – start.

 

Server pri spustení naštartuje náš servis, ktorý naštartuje Birt report servis. V rámci servisu môžete implementovať aj viac metód na kontrolu report servisu. Napríklad metódu na reštart, či metódu na rekonfiguráciu report servisu. Všetky metódy report servisu môžete ovládať cez jmx-consolu servera.

 

Dalším krokom je spraviť servis viditelný pre EJB servis. Preto musíte definovať ďalšie rozhranie s metódou generatedReport. V tomto príklade nepotrebujete špeciálnu bezpečnostnú doménu, stačí použiť anotáciu @PermitAll. Taktiež nepotrebujete transakciu. Po týchto zmenách bude deklarácia report servisu vyzerať nasledovne:

@Service(name = “BirtReportService”)
@Local(ReportService.class)
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Management(BirtReportServiceMBean.class)
@PermitAll
public class BirtReportService implements BirtReportServiceMBean, ReportService {

Vstupné parametre pre metódu generatedReport budú meno, jazyk, formát a dynamické parametre pre report.

@Override
public byte[] createReport(String reportName, Map<String, Object> parameters, String outputFormat, Locale locale) throws Exception {

LOGGER.info(“Create the report – start.”);

byte[] result = null;

String reportPath = reportsHomeDirectory + reportName + “.rptdesign”;
if (reportPath == null || reportPath.isEmpty()) {
throw new Exception(“The report path is null or empty.”);
} else {
File reportFile = new File(reportPath);
if (!reportFile.exists()) {
throw new Exception(“Report file not found! Report: ” + reportPath);
}
}

try {
// Open the report design
LOGGER.info(“Report: ” + reportPath);

IReportRunnable design = engine.openReportDesign(reportPath);

LOGGER.info(“Create report options.”);
// Options
ByteArrayOutputStream stream = new ByteArrayOutputStream();
HTMLRenderOption options = new HTMLRenderOption();
options.setImageDirectory(“/image/”);
options.setOutputStream(stream);
options.setOutputFormat(outputFormat);

LOGGER.info(“Create report render task.”);
// Create task to run and render the report
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
task.setLocale(locale);
task.setRenderOption(options);
task.setParameterValues(parameters);

LOGGER.info(“Run report task.”);
task.run();
task.close();

LOGGER.info(“The report output size: ” + stream.size());
result = stream.toByteArray();

} catch (Exception ex) {
throw new Exception(“Generated report failed”, ex);
}

LOGGER.info(“Create the report – end.”);
return result;
}

Metóda pomocou vstupných parametrov pre report servis vygeneruje dokument. Tento dokument môžete uložiť do dočasného adresára a poslať používateľovi adresu na report dokument. Naša metóda vracia priamo tento dokument ako výstupný parameter. Na riadku 22 musíte nastaviť absolútnu cestu k reportu. To je všetko, čo musíte spraviť v BIRT report servise. A ako môžete zavolať náš servis z EJB metódy? Veľmi jednoducho:

@EJB
private ReportService reportService;

public byte[] callReport() throws Exception {

Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put(“parameter1″, “Value1″);
parameters.put(“parameter2″, 14343);

byte[] result = null;
try {
result = reportService.createReport(“report1″, parameters, “pdf”, Locale.ENGLISH);
} catch (Exception ex) {
throw ex;
}
return result;
}

Závislosti projektu sú nasledovné knižnice.

[INFO] — maven-dependency-plugin:2.1:tree (default-cli) @ birtservice —
[INFO] com.ajkaandrej.jboss.birt:birtservice:ejb:1.0-SNAPSHOT
[INFO] +- org.slf4j:slf4j-api:jar:1.6.1:provided
[INFO] +- javax:javaee-api:jar:6.0:provided
[INFO] +- org.jboss.ejb3:jboss-ejb3-ext-api:jar:1.1.1:provided
[INFO] +- org.jboss.jbossas:jboss-as-system-jmx:jar:client:6.0.0.Final:provided
[INFO] +- org.eclipse.birt:coreapi:jar:2.6.2:provided
[INFO] +- org.eclipse.birt:engineapi:jar:2.6.2:provided
[INFO] +- org.eclipse.birt:modelapi:jar:2.6.2:provided
[INFO] – com.ibm.icu:icu4j:jar:4.0.1:provided

Pre skompilovanie projektu potrebujete BIRT API knižnice. Ja som nenašiel žiadne verejné repository, kde by boli BIRT API knižnice verzie 2.6.2. Pre skompilovanie môžete použiť knižnice verzie 2.3.2, ktoré sú vo verejnom JBoss repository: link. Alebo si manuálne nainštalujte knižnice do svojho lokálneho repository. Nasledovným spôsobom:

mvn install:install-file -Dfile=coreapi.jar -DgroupId=org.eclipse.birt -DartifactId=coreapi -Dversion=2.6.2 -Dpackaging=jar
mvn install:install-file -Dfile=engineapi.jar -DgroupId=org.eclipse.birt -DartifactId=engineapi -Dversion=2.6.2 -Dpackaging=jar
mvn install:install-file -Dfile=modelapi.jar -DgroupId=org.eclipse.birt -DartifactId=modelapi -Dversion=2.6.2 -Dpackaging=jar

Uvedený príklad nie je komplexným riešením a preto odporúčam spraviť si vlastnú robustnejšiu implementáciu. Zdrojový kód príkladu nájdete tu.

 


Viewing all articles
Browse latest Browse all 3

Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC

Trending Articles


Ang Nobela sa “From Darna to ZsaZsa Zaturnnah: Desire and Fantasy, Essays on...


Lola Bunny para colorear


Dino Rey para colorear


Girasoles para colorear


Dibujos de animales para imprimir


Renos para colorear


Dromedario para colorear


The business quotes | Inspirational and Motivational Quotes for you


Love Quotes Tagalog


RE: Mutton Pies (mely)


Gwapo Quotes : Babaero Quotes


Kung Fu Panda para colorear


Libros para colorear


Mandalas de flores para colorear


Dibujos para colorear de perros


Toro para colorear


mayabang Quotes, Torpe Quotes, tanga Quotes


Long Distance Relationship Tagalog Love Quotes


Tropa Quotes


Mga Tala sa “Unang Siglo ng Nobela sa Filipinas” (2009) ni Virgilio S. Almario





Latest Images

Pangarap Quotes

Pangarap Quotes

Vimeo 10.7.0 by Vimeo.com, Inc.

Vimeo 10.7.0 by Vimeo.com, Inc.

HANGAD

HANGAD

MAKAKAALAM

MAKAKAALAM

Doodle Jump 3.11.30 by Lima Sky LLC

Doodle Jump 3.11.30 by Lima Sky LLC