Home
Analytics
Build Birt report engine with GWT
ssekhar
Hi,
How can I build BIRT report engine with GWT (or j2ee). can you please let me know where can I find documentation.
Thanks,
Sekhar.
Find more posts tagged with
Comments
stilden
Getting the deapi or reapi to work in GWT eclipse projects can be trivial depending on your implementation. Interacting with those aspects of BIRT on a user by user basis however is not if the implementation was trivial.
To explain, BIRT APIs rely heavily on various functionality that is difficult to incorporate into a GWT project on the client end since GWT wants all the source files in order to create and compile the end result javascript code that is the beauty of GWT. And I believe we all know the amount of incorporated functionality that BIRT uses, so even if you were to get all the BIRT source, you would still need to get all the class source for the classes BIRT utilizes as well. That is nearly impossible, if not truly impossible.
So the only real path you have is to create your engine code on the GWT service side using RemoteServletService wrapper classes and a simple POJO which actually perform the direct calls to the BIRT DEAPI and REAPI. This allows you to create well-formed GWT client calls on events and actions that call into a server side instance of the BIRT API platform objects.
There is however the crux. Since server side objects in GWT are actual RemoteServletService objects, they act like servlets. This means that each instance is in actuality a singleton and supports only one shared instance. For web-based applications that wish to support advanced actions, such as a web-based designer (something I'm towards completion on), this is not such a good thing as multiple users will overwrite each other's object properties and states.
The solution I've found is to use the DEAPI and REAPI on the service side but create instances of the objects in the users session and I maintain my own session state for users.
Now obviously this is not so easy, and requires some work. But the service wrappers themselves for your POJO that uses the DEAPI or REAPI is fairly simple.
Let me know if you would like some simple examples to work off of.
Shiloam
meltac
Hi i found this thread upon my work on a GWT application which is using BIRT on server side.
I want to generate HTML output which is then sent back to client side. Is it possible in any way?
Thanks in advance!
sas4exel
stilden,<br />
<br />
Thank-you for the outline of how to work with GWT and BIRT. I am interested in a simple example. My reading of Scott Rosenbaum's EclipseCon 2008 slides was all I have found on this subject, <a class='bbc_url' href='
http://www.scribd.com/full/3273267?access_key=key-ijrslng27hqapry0wcf'>Intergrating
Reporting Into your Application </a>. The UML is suggestive, but it would be great to have some simple code.<br />
<br />
Stuart<br />
<br />
<br />
<blockquote class='ipsBlockquote' data-author="'stilden'" data-cid="60713" data-time="1266953956" data-date="23 February 2010 - 12:39 PM"><p>
Getting the deapi or reapi to work in GWT eclipse projects can be trivial depending on your implementation. Interacting with those aspects of BIRT on a user by user basis however is not if the implementation was trivial.<br />
<br />
<br />
To explain, BIRT APIs rely heavily on various functionality that is difficult to incorporate into a GWT project on the client end since GWT wants all the source files in order to create and compile the end result javascript code that is the beauty of GWT. And I believe we all know the amount of incorporated functionality that BIRT uses, so even if you were to get all the BIRT source, you would still need to get all the class source for the classes BIRT utilizes as well. That is nearly impossible, if not truly impossible.<br />
<br />
<br />
So the only real path you have is to create your engine code on the GWT service side using RemoteServletService wrapper classes and a simple POJO which actually perform the direct calls to the BIRT DEAPI and REAPI. This allows you to create well-formed GWT client calls on events and actions that call into a server side instance of the BIRT API platform objects.<br />
<br />
<br />
There is however the crux. Since server side objects in GWT are actual RemoteServletService objects, they act like servlets. This means that each instance is in actuality a singleton and supports only one shared instance. For web-based applications that wish to support advanced actions, such as a web-based designer (something I'm towards completion on), this is not such a good thing as multiple users will overwrite each other's object properties and states.<br />
<br />
<br />
The solution I've found is to use the DEAPI and REAPI on the service side but create instances of the objects in the users session and I maintain my own session state for users.<br />
<br />
<br />
Now obviously this is not so easy, and requires some work. But the service wrappers themselves for your POJO that uses the DEAPI or REAPI is fairly simple.<br />
<br />
<br />
Let me know if you would like some simple examples to work off of.<br />
<br />
<br />
Shiloam<br /></p></blockquote>
johnw
Check my EclipseCon 2007 (or was it 2008) slides on the subject.
There are a number of different ways to integrate the output of BIRT reports into GWT.
The easiest way is to just generate HTML (either a full HTML report page, or a "reportlet", which strips the HEAD and body tags, and just returns the child elements, great for AJAX implementations).
Basically, you would have a RPC call to "getReport(reportName)", which would create a iRunAndRender task, and you just return the result. Then its up to the client to render.
The next step is to do things like add pagination and use a GWT viewer.
The most difficult, and most flexible in my opinion, is to build a special emitter that generates GWT widgets instead of HTML, and returns those, and you display your result using the GWT UIBinder or something along those lines.
I am afraid I don't have any sample code that works with any current version of GWT. I have plans to update, I just have not had time to do so.
John
bognekadje
Hi,<br />
I am begginner on the topics od GWT and BIRT. I am working on a project with use these two technologies.<br />
When johnw have said : <br />
<blockquote class='ipsBlockquote' ><p>
Basically, you would have a RPC call to "getReport(reportName)", which would create a iRunAndRender task, and you just return the result. Then its up to the client to render.</p></blockquote>
is it possible then for client-side to generate the report in all possible form (html, pdf, xsl,...)?<br />
How should client-side to do to realize it?<br />
<br />
Thank you
johnw
That is going to totally depend on how you implement your application. Yes, it can render in whatever format you want, but how you display it is going to be very different due to limitations of web technology. The easiest way is to determine your format that is being rendered. If it is anything other than HTML, force it to open in a new window and let your browsers MIME table handle how to open it, it will just be the responsibility of your servlet to define that as part of the HTTP header. This won't be done client side, it is done server side.
Giulio Roggero
Hi Sekhar,<br />
I've integrate BIRT with GWT with this approach:<br />
- BIRT singleton is instantiated by Spring and managed by GWT Server<br />
- All information about reports are asked to Birt singleton via GWT-RPC: report descriptions and parameters<br />
- The GWT Client Application list all available reports on a left pane <br />
- When a report is clicked the parameter list is passed, via GWT-RPC, to GWT Client. GWT Client creates a windows that prompt the user to enter parameter values.<br />
- <strong class='bbc'>When parameters are submitted, GWT Client builds the URL in order to execute the report using BIRT Viewer and visualizes the result in an iFrame</strong><br />
- <strong class='bbc'>Report interaction</strong>, like links between reports, are set by GWT Client parsing the DOM of BIRT Viewer and looking for <a href=#action_name>. All anchors href are changed in order to call a GWT Client function that perform the action defined in action_name (eg: open a pop-up, a context menu, another report).<br />
<br />
I hope that this could help. I'm sorry but I cannot publish the source code because of my client restrictions.<br />
<br />
Ciao<br />
Giulio<br />
<br />
<blockquote class='ipsBlockquote' data-author="'ssekhar'" data-cid="49477" data-time="1245343752" data-date="18 June 2009 - 09:49 AM"><p>
Hi,<br />
<br />
How can I build BIRT report engine with GWT (or j2ee). can you please let me know where can I find documentation. <br />
<br />
<br />
Thanks,<br />
<br />
Sekhar.<br /></p></blockquote>
bognekadje
Thanks for reply,
Hi Johnw,
I have made a test. my GWT-client make a request to the GWT-server which reply an IRunAndRenderTask objetc, which have an option to be an Html output. but i am trapped because IRunAndRenderTask don't have method to get his html code and add it to a GWT widget such as widget.add(new HTML());
For detail, i created a gwt project in eclipse which implement MVP pattern. I want first to display report in a GWT interface of my application because if my application launch birt webviewer, the user can use some button of the birt web viewer, what i won't.
Thanks for help!
bognekadje
Hi Giulio Roggero,
Please, can you be more explicit. because i would make the same schema like you. In my application, report design file are on the server side. When user selects report he want and enters parameters, i think that it is the GWT server which have to generate or execute the report, but how this should be rendered by GWT client?
Thank you
johnw
<blockquote class='ipsBlockquote' data-author="'bognekadje'" data-cid="73117" data-time="1297259533" data-date="09 February 2011 - 06:52 AM"><p>
Thanks for reply,<br />
Hi Johnw,<br />
I have made a test. my GWT-client make a request to the GWT-server which reply an IRunAndRenderTask objetc, which have an option to be an Html output. but i am trapped because IRunAndRenderTask don't have method to get his html code and add it to a GWT widget such as widget.add(new HTML());<br />
<br />
For detail, i created a gwt project in eclipse which implement MVP pattern. I want first to display report in a GWT interface of my application because if my application launch birt webviewer, the user can use some button of the birt web viewer, what i won't.<br />
<br />
Thanks for help!<br /></p></blockquote>
<br />
Your IRunAndRenderTask needs to have a ByteArrayStream, and convert that to a StringWriter or something similar as the output stream. You will then have an String containing your HTML output. Its best if you set the embeddible flag to true so you don't get the HTML and HEAD tags in your output. Your not getting a GWT widget from this, although you could write an emitter that does that (I had a POC concept, but it is way out of date at this point). In your GWT Client, your remote call will take that string, and assign it some sort of inner text. In the viewers I use, I use a GWT HTML widget, and just assign it the value of my result using setHTML.<br />
<br />
So, assuming you have a remote service already defined that returns a string with the HTML result of your rendering, that reportOutput is a HTML widget that is defined in the ReportViewer class, in the call back class for the request, it would look something like:<br />
<br />
public void onSuccess(final Object result) {<br />
ReportViewer.this.reportOutput.setHTML((String) result);<br />
}
bognekadje
hi everybody,<br />
I am really desperate and crazy, since the last post of johnw and Giulio, i am trying to implement solution they suggest. explictly, i want to create the reeport on server-side in html output, and then transfer it to the client-side. i saw an example in the eclipse web site, but when i use it, i have an error.within this function <br />
<pre class='_prettyXprint _lang-auto _linenums:0'>private static void loadEngineProps() {
try {
//Config File must be in classpath
ClassLoader cl = Thread.currentThread ().getContextClassLoader();
InputStream in = null;
in = cl.getResourceAsStream(configFile);//this instruction launch an error
in = new FileInputStream(new File(fichier.getPath()+configFile));
if(in == null){
System.out.println("in == null");
}
configProps.load(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}</pre>
<br />
i have put the config file in all directory but the error always occurs. I don't understand that.<br />
<br />
Thanks you.
Giulio Roggero
Following the GWT guidelines I've create a Backend project that exposes via Web Services methods and a GWT project that in GWT Server Side call the Web Service and, via GWT-RPC, propagate the result to GWT-Client.<br />
<br />
You can put all together avoiding the WS using Spring with GWT (here an example that I've published for Hibernate - <a class='bbc_url' href='
http://code.google.com/p/gwt-spring-jpa-lucene'>http://code.google.com/p/gwt-spring-jpa-lucene</a>)
. <br />
<br />
Use or don't use WS it's your choice, at the end you have to call BIRT. I post here the code of my servlet that export in JSON the parameter list. Using GWT Client you can parse JSON e create your Window Parameter.<br />
<br />
An alternative is, instead of JSON, pass to GWT Client the bean with the list of paramters.<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
String reportName = request.getParameter("reportName");
String categoryName = request.getParameter("categoryName");
BirtReportManager birtManager = (BirtReportManager)SpringUtils.getBean(request, "birtReportManager");
DefaultValuesWS defaultProperties = (DefaultValuesWS)SpringUtils.getBean(request, "defaultProperties");
XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new Json0Writer(writer, JsonWriter.DROP_ROOT_MODE);
}
});
//XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("reportParam", ReportParameterWS.class);
PrintWriter out = response.getWriter();
StringBuffer outBuff = new StringBuffer();
int index = 0;
Map<String,ReportParameterWS> paramMap = new HashMap<String, ReportParameterWS>(0);
paramMap = birtManager.getParameters(categoryName, reportName);
int totalCount = paramMap.size();
for (String paramKey : paramMap.keySet()){
ReportParameterWS paramWS = paramMap.get(paramKey);
if (defaultProperties.getProperties().containsKey(paramKey)){
paramWS.setDefaultValue(defaultProperties.getProperties().get(paramKey));
}
paramWS.setSelectionListWS(null);
if (index!=0)outBuff.append(",");
outBuff.append(xstream.toXML(paramWS));
index++;
}
//Print
String callback = request.getParameter("callback");
if (callback!=null && !callback.equals("")){
out.print(callback+"(");
}
out.println("{");
out.println("\"totalCount\":"+totalCount+",");
out.println("\"reportParams\":[");
out.println(outBuff.toString());
out.println("]");
out.println("}");
if (callback!=null && !callback.equals("")){
out.print(");");
}
}
</pre>
<br />
birt manager<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
public Map<String, ReportParameterWS> getParameters(String categoryName, String reportName) {
try {
IReportRunnable design = getDesign(categoryName, reportName);
// Setting report parameters
BirtParametersCollector paramColl = new BirtParametersCollector(engine.getReportEngine(), design);
return paramColl.loadParameterMapDetails();
} catch (BirtException e) {
logger.error(ExceptionUtils.getStackTrace(e));
} catch (Exception e) {
logger.error(ExceptionUtils.getStackTrace(e));
}
return Collections.emptyMap();
}
</pre>
<br />
parameter collection<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>public Map<String, ReportParameterWS> loadParameterMapDetails()
{
//Retrieve parameter definitions
parameterMap = new LinkedHashMap<String, ReportParameterWS>();
Collection<IParameterDefnBase> params = task.getParameterDefns(true);
//Iterate over each parameter
Iterator iter = params.iterator();
while (iter.hasNext()){
IParameterDefnBase param = (IParameterDefnBase) iter.next();
if (param instanceof IParameterGroupDefn){
IParameterGroupDefn group = (IParameterGroupDefn) param;
// Do something with the parameter group.
// Iterate over group contents.
Iterator i2 = group.getContents().iterator();
while (i2.hasNext()){
IScalarParameterDefn scalar = (IScalarParameterDefn) i2.next();
//Get details on the parameter
parameterMap.put(scalar.getName(),loadParameterDetails(scalar,group));
}
}
else {
IScalarParameterDefn scalar = (IScalarParameterDefn) param;
//get details on the parameter
parameterMap.put( scalar.getName(), loadParameterDetails( scalar, null));
}
}// End while
logger_.debug("Found " + parameterMap.size() + " parameters stored in Map.");
return parameterMap;
}</pre>
to get single parameter<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>private ReportParameterWS loadParameterDetails(IScalarParameterDefn scalar, IParameterGroupDefn group)
{
//Get report design and find default value, prompt text and data set expression using the DE API
ReportDesignHandle reportHandle = ( ReportDesignHandle ) report.getDesignHandle();
ScalarParameterHandle parameterHandle = ( ScalarParameterHandle ) reportHandle.findParameter( scalar.getName() );
.
.
.
</pre>
<br />
to init Birt Engine<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
public synchronized void initReportEngine() {
try {
Platform.startup(birtConfig.getEngineConfig());
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
reportEngine = factory.createReportEngine( birtConfig.getEngineConfig() );
} catch (BirtException be) {
logger.fatal("Failure starting BIRT platform: " + ExceptionUtils.getFullStackTrace(be));
}
}
</pre>
<br />
when you have the list of parameters it's simple to move that list in JSON or with a Bean to GWT Cliet - details here: <br />
- <a class='bbc_url' href='
http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSON.html'>http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSON.html</a><br
/>
- <a class='bbc_url' href='
http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes'>http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes</a><br
/>
<br />
<blockquote class='ipsBlockquote' data-author="'bognekadje'" data-cid="73118" data-time="1297259848" data-date="09 February 2011 - 06:57 AM"><p>
Hi Giulio Roggero,<br />
<br />
Please, can you be more explicit. because i would make the same schema like you. In my application, report design file are on the server side. When user selects report he want and enters parameters, i think that it is the GWT server which have to generate or execute the report, but how this should be rendered by GWT client?<br />
<br />
Thank you<br /></p></blockquote>
adlonfp
Sorry if this is a little off topic, but I do have a newbie question on trying to get BIRT reports running through GWT. I tried to get the Servlet example on the eclipse BIRT site running. But I get a noclassdeffounderror on IHTMLImageHandler on running the project.
Is there documentation I could reference to understand setup needed in GWT?
Any help would be greatly appreciated.
Thanks,
Ed.
azuniga
Great forum. I am currently tasked to do the same thing with integrating BIRT and GWT. Have you had any success integrating the 2 yet, or maybe you have some sample code you can post? I have to display reports in my gwt app and I found out late last week that this is slightly more complex than we had anticipated. Oh well, now I've got to figure out how to integrate the 2 in the simplest, least buggiest fashion.<br />
<br />
<blockquote class='ipsBlockquote' data-author="'bognekadje'" data-cid="73293" data-time="1297689682" data-date="14 February 2011 - 06:21 AM"><p>
hi everybody,<br />
I am really desperate and crazy, since the last post of johnw and Giulio, i am trying to implement solution they suggest. explictly, i want to create the reeport on server-side in html output, and then transfer it to the client-side. i saw an example in the eclipse web site, but when i use it, i have an error.within this function <br />
<pre class='_prettyXprint _lang-auto _linenums:0'>private static void loadEngineProps() {
try {
//Config File must be in classpath
ClassLoader cl = Thread.currentThread ().getContextClassLoader();
InputStream in = null;
in = cl.getResourceAsStream(configFile);//this instruction launch an error
in = new FileInputStream(new File(fichier.getPath()+configFile));
if(in == null){
System.out.println("in == null");
}
configProps.load(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}</pre>
<br />
i have put the config file in all directory but the error always occurs. I don't understand that.<br />
<br />
Thanks you.<br /></p></blockquote>
vigisselle
<blockquote class='ipsBlockquote' data-author="'Giulio Roggero'" data-cid="73414" data-time="1297852773" data-date="16 February 2011 - 03:39 AM"><p>
Following the GWT guidelines I've create a Backend project that exposes via Web Services methods and a GWT project that in GWT Server Side call the Web Service and, via GWT-RPC, propagate the result to GWT-Client.<br />
<br />
You can put all together avoiding the WS using Spring with GWT (here an example that I've published for Hibernate - <a class='bbc_url' href='
http://code.google.com/p/gwt-spring-jpa-lucene'>http://code.google.com/p/gwt-spring-jpa-lucene</a>)
. <br />
<br />
Use or don't use WS it's your choice, at the end you have to call BIRT. I post here the code of my servlet that export in JSON the parameter list. Using GWT Client you can parse JSON e create your Window Parameter.<br />
<br />
An alternative is, instead of JSON, pass to GWT Client the bean with the list of paramters.<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
String reportName = request.getParameter("reportName");
String categoryName = request.getParameter("categoryName");
BirtReportManager birtManager = (BirtReportManager)SpringUtils.getBean(request, "birtReportManager");
DefaultValuesWS defaultProperties = (DefaultValuesWS)SpringUtils.getBean(request, "defaultProperties");
XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {
public HierarchicalStreamWriter createWriter(Writer writer) {
return new Json0Writer(writer, JsonWriter.DROP_ROOT_MODE);
}
});
//XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("reportParam", ReportParameterWS.class);
PrintWriter out = response.getWriter();
StringBuffer outBuff = new StringBuffer();
int index = 0;
Map<String,ReportParameterWS> paramMap = new HashMap<String, ReportParameterWS>(0);
paramMap = birtManager.getParameters(categoryName, reportName);
int totalCount = paramMap.size();
for (String paramKey : paramMap.keySet()){
ReportParameterWS paramWS = paramMap.get(paramKey);
if (defaultProperties.getProperties().containsKey(paramKey)){
paramWS.setDefaultValue(defaultProperties.getProperties().get(paramKey));
}
paramWS.setSelectionListWS(null);
if (index!=0)outBuff.append(",");
outBuff.append(xstream.toXML(paramWS));
index++;
}
//Print
String callback = request.getParameter("callback");
if (callback!=null && !callback.equals("")){
out.print(callback+"(");
}
out.println("{");
out.println("\"totalCount\":"+totalCount+",");
out.println("\"reportParams\":[");
out.println(outBuff.toString());
out.println("]");
out.println("}");
if (callback!=null && !callback.equals("")){
out.print(");");
}
}
</pre>
<br />
birt manager<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
public Map<String, ReportParameterWS> getParameters(String categoryName, String reportName) {
try {
IReportRunnable design = getDesign(categoryName, reportName);
// Setting report parameters
BirtParametersCollector paramColl = new BirtParametersCollector(engine.getReportEngine(), design);
return paramColl.loadParameterMapDetails();
} catch (BirtException e) {
logger.error(ExceptionUtils.getStackTrace(e));
} catch (Exception e) {
logger.error(ExceptionUtils.getStackTrace(e));
}
return Collections.emptyMap();
}
</pre>
<br />
parameter collection<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>public Map<String, ReportParameterWS> loadParameterMapDetails()
{
//Retrieve parameter definitions
parameterMap = new LinkedHashMap<String, ReportParameterWS>();
Collection<IParameterDefnBase> params = task.getParameterDefns(true);
//Iterate over each parameter
Iterator iter = params.iterator();
while (iter.hasNext()){
IParameterDefnBase param = (IParameterDefnBase) iter.next();
if (param instanceof IParameterGroupDefn){
IParameterGroupDefn group = (IParameterGroupDefn) param;
// Do something with the parameter group.
// Iterate over group contents.
Iterator i2 = group.getContents().iterator();
while (i2.hasNext()){
IScalarParameterDefn scalar = (IScalarParameterDefn) i2.next();
//Get details on the parameter
parameterMap.put(scalar.getName(),loadParameterDetails(scalar,group));
}
}
else {
IScalarParameterDefn scalar = (IScalarParameterDefn) param;
//get details on the parameter
parameterMap.put( scalar.getName(), loadParameterDetails( scalar, null));
}
}// End while
logger_.debug("Found " + parameterMap.size() + " parameters stored in Map.");
return parameterMap;
}</pre>
to get single parameter<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>private ReportParameterWS loadParameterDetails(IScalarParameterDefn scalar, IParameterGroupDefn group)
{
//Get report design and find default value, prompt text and data set expression using the DE API
ReportDesignHandle reportHandle = ( ReportDesignHandle ) report.getDesignHandle();
ScalarParameterHandle parameterHandle = ( ScalarParameterHandle ) reportHandle.findParameter( scalar.getName() );
.
.
.
</pre>
<br />
to init Birt Engine<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
public synchronized void initReportEngine() {
try {
Platform.startup(birtConfig.getEngineConfig());
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
reportEngine = factory.createReportEngine( birtConfig.getEngineConfig() );
} catch (BirtException be) {
logger.fatal("Failure starting BIRT platform: " + ExceptionUtils.getFullStackTrace(be));
}
}
</pre>
<br />
when you have the list of parameters it's simple to move that list in JSON or with a Bean to GWT Cliet - details here: <br />
- <a class='bbc_url' href='
http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSON.html'>http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSON.html</a><br
/>
- <a class='bbc_url' href='
http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes'>http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes</a><br
/></p></blockquote>
<br />
Hi Giulio Roggero!<br />
first excuse me the wording, but is not fully mastered English. I have little experience in developing applications on GAE with GWT, and I need to build some reports, and i don't know what is the best option. I considered using Birt, based on the information I have found. I understand a little, the example you posted, so I would greatly appreciate if you could help me with the following questions. I'm confused about the possibility of using Birt with GWT application, which is developed in GAE, and also do not know if there is some problem with non-relational storage offering GAE and its integration with BIRT.<br />
<br />
thanks for help!
Giulio Roggero
Hi vigisselle,<br />
I'm sorry but I think that it is not possible to deploy BIRT on GAE because of GAE restrictions on Threads and filesystem that instead are required by Eclipse OSGI implementation (see also <a class='bbc_url' href='
http://stackoverflow.com/questions/8651872/create-an-osgi-bundle-from-a-gwt-application'>http://stackoverflow.com/questions/8651872/create-an-osgi-bundle-from-a-gwt-application</a>).<br
/>
<br />
The example I've posted more than one year ago is a subset of source code of an application that completely integrates BIRT and GWT. If you need just to run some reports you can deploy the war of BIRT viewer and embed it into a GWT Frame. This is the simplest way
, but without using GAE. Have a look at Amazon EC2, the micro instances are free for one year.<br />
<br />
Ciao<br />
Giulio<br />
<br />
<blockquote class='ipsBlockquote' data-author="'vigisselle'" data-cid="101925" data-time="1338963320" data-date="05 June 2012 - 11:15 PM"><p>
Hi Giulio Roggero!<br />
first excuse me the wording, but is not fully mastered English. I have little experience in developing applications on GAE with GWT, and I need to build some reports, and i don't know what is the best option. I considered using Birt, based on the information I have found. I understand a little, the example you posted, so I would greatly appreciate if you could help me with the following questions. I'm confused about the possibility of using Birt with GWT application, which is developed in GAE, and also do not know if there is some problem with non-relational storage offering GAE and its integration with BIRT.<br />
<br />
thanks for help!<br /></p></blockquote>
vigisselle
<blockquote class='ipsBlockquote' data-author="'Giulio Roggero'" data-cid="101930" data-time="1338968995" data-date="06 June 2012 - 12:49 AM"><p>
Hi vigisselle,<br />
I'm sorry but I think that it is not possible to deploy BIRT on GAE because of GAE restrictions on Threads and filesystem that instead are required by Eclipse OSGI implementation (see also <a class='bbc_url' href='
http://stackoverflow.com/questions/8651872/create-an-osgi-bundle-from-a-gwt-application'>http://stackoverflow.com/questions/8651872/create-an-osgi-bundle-from-a-gwt-application</a>).<br
/>
<br />
The example I've posted more than one year ago is a subset of source code of an application that completely integrates BIRT and GWT. If you need just to run some reports you can deploy the war of BIRT viewer and embed it into a GWT Frame. This is the simplest way
, but without using GAE. Have a look at Amazon EC2, the micro instances are free for one year.<br />
<br />
Ciao<br />
Giulio<br /></p></blockquote>
<br />
<br />
Hi Giulio.<br />
<br />
thank you very much for your help!
. <br />
thanks for your answer,I'm going to focus on other options, such as g2-report-engine which seems to be a way to build reports in GAE. At this time, by time I can not try Amazon EC2,so I must find the solution for GWT on GAE.<br />
<br />
thanks
.