JBoss.orgCommunity Documentation
This section contains information on manually setting up Errai and describes additional configurations and settings which may be adjusted.
In development mode we need to bootstrap the CDI environment on our own and make both Errai and CDI available through JNDI (common denominator across all runtimes). GWT by default uses Jetty, that only supports read only JNDI. The current solution for this is to use a custom launcher to control a JBoss AS 7 or Wildfly 8 instance instead of GWT’s built-in Jetty.
To do this, requires the following configurations in the gwt-maven-plugin configuration:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>${gwt.version}</version>
<configuration>
...
<extraJvmArgs>-Derrai.jboss.home=$JBOSS_HOME -Derrai.jboss.javaagent.path=${settings.localRepository}/org/jboss/errai/errai-client-local-class-hider/$ERRAI_VERSION/errai-client-local-class-hider-$ERRAI_VERSION.jar</extraJvmArgs>
<noServer>false</noServer>
<server>org.jboss.errai.cdi.server.gwt.JBossLauncher</server>
</configuration>
<executions>
...
</executions>
</plugin>
What does all this mean?
<noServer>false</noServer>
: Tells GWT to lauch a server for us.<server>org.jboss.errai.cdi.server.gwt.JBossLauncher</server>
: Tells GWT to use a custom launcher instead of it’s default JettyLauncher.<extraJvmArgs>...</extraJvmArgs>
-Derrai.jboss.home=$JBOSS_HOME
: Tells the JBossLauncher the location of the JBoss or Wildfly instance to use. Note that $JBOSS_HOME
should be replaced with a literal path (or pom property) to a JBoss or Wildfly instance you have installed.-Derrai.jboss.javaagent.path=${settings.localRepository}/org/jboss/errai/errai-client-local-class-hider/${ERRAI_VERSION}/errai-client-local-class-hider-${ERRAI_VERSION}.jar
: This scary looking line is necessary so that the JBoss instance does not see client-only dependencies. Note that $ERRAI_VERSION
should be replaced with the literal version of Errai (or a pom property).Here are some additional JVM arguments that can be passed to the JBossLauncher:
errai.dev.context
: Sets the context under which your app will be deployed (defaults to "webapp").errai.jboss.debug.port
: Sets the port for debugging server-side code (defaults to 8001).errai.jboss.config.file
: Sets the configuration file (in $JBOSS_HOME/configuration
) used by the JBoss/Wildfly instance (defaults to standalone-full.xml).errai.jboss.javaopts
: Sets additional java opts used by the JVM running JBoss/Wildfly.We provide integration with the JBoss Application Server, but the requirements are basically the same for other vendors. When running a GWT client app that leverages CDI beans on a Java EE 6 application server, CDI is already part of the container and accessible through JNDI (java:/BeanManager
).
ErraiApp.properties acts both as a marker file for JARs that contain Errai-enabled GWT modules, and as a place to put configuration settings for those modules in the rare case that non-default configuration is necessary.
An ErraiApp.properties
file must appear at the root of each classpath location that contains an Errai module. The contents of JAR and directory classpath entries that do not contain an ErraiApp.properties
are effectively invisible to Errai’s classpath scanner.
ErraiApp.properties is usually left empty, but it can contain configuration settings for both the core of Errai and any of its extensions. Configuration properties defined and used by Errai components have keys that start with " errai.
". Third party extensions should each choose their own prefix for keys in ErraiApp.properties.
In a non-trivial application, there will be several instances of ErraiApp.properties on the classpath (one per JAR file that contains Errai modules, beans, or portable classes).
Before using the configuration information from ErraiApp.properties, Errai reads the contents of every ErraiApp.properties on the classpath. The configuration information in all these files is merged together to form one set of key=value pairs.
If the same key appears in more than one ErraiApp.properties file, only one of the values will be associated with that key. The other values will be ignored. In future versions of Errai, this condition may be made into an error. It’s best to avoid specifying the same configuration key in multiple ErraiApp.properties files.
false
, Errai will not use the precompiled server-side marshallers even if the generated ServerMarshallingFactoryImpl
class is found on the classpath. This is useful when using Dev Mode in conjunction with an external server such as JBoss AS 7 or EAP 6.true
, Errai will not use dynamic marshallers. If the generated ServerMarshallingFactoryImpl
cannot be loaded (possibly after an attempt to generate it on-the-fly), the Errai web app will fail to start.Errai also supports configuring portable types in ErraiApp.properties
as an alternative to the @Portable
annotation. See the Errai Marshalling section on Manual Mapping for details.
The following compile-time dependency is required for Errai Messaging:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-bus</artifactId>
<version>${errai.version}</version>
</dependency>
Or if you are not using Maven, have errai-bus-${errai.version}.jar
on the classpath.
If you are also using Errai IOC or Errai CDI and wish to use inject Errai Messaging dependencies, you will also want this dependency:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>erria-ioc-bus-support</artifactId>
<version>${errai.version}</version>
</dependency>
Or if you are not using Maven, have errai-ioc-bus-support-${errai.version}.jar
on the classpath.
In some cases it might be desirable to prevent the client bus from communicating with the server. One use case for this is when all communication with the server is handled using JAX-RS and the constant long polling requests for message exchange are not needed.
To turn off remote communication in the client bus the following JavaScript variable can be set in the HTML host page:
<script type="text/javascript">
erraiBusRemoteCommunicationEnabled = false;
</script>
By default the remote bus is expected at the GWT web application’s context path. In case the remote bus is part of a different web application or deployed on a different server, the following configuration can be used in the HTML host page to configure the remote bus endpoint used on the client.
<script type="text/javascript">
erraiBusApplicationRoot = "/MyRemoteMessageBusEnpoint";
</script>
The ErraiService.properties file contains basic configuration for the bus itself. Unlike ErraiApp.properties, there should be at most one ErraiService.properties file on the classpath of a deployed application. If you do not need to set any properties to their non-default values, this file can be omitted from the deployment entirely.
Dispatchers encapsulate the strategy for taking messages that need to be delivered somewhere and seeing that they are delivered to where they need to go. There are two primary implementations that are provided with Errai, depending on your needs.
SimpleDispatcher is basic implementation that provides no asychronous delivery mechanism. Rather, when you configure the Errai to use this implementation, messages are delivered to their endpoints synchronously. The incoming HTTP thread will be held open until the messages are delivered.
While this sounds like it has almost no advantages, especially in terms of scalablity. Using the SimpleDispatcher can be far preferable when you’re developing your application, as any errors and stack traces will be far more easily traced and some cloud services may not permit the use of threads in any case.
The AsyncDispatcher provides full asynchronous delivery of messages. When this dispatcher is used, HTTP threads will have control immediately returned upon dispatch of the message. This dispatcher provides far more efficient use of resources in high-load applications, and will significantly decrease memory and thread usage overall.
SimpleDispatcher
and the AsyncDispatcher
. See ERRAI:Dispatcher Implementations for more information about the differences between the two.errai.bus.buffer_segment_count
, then the segment count is inferred by the calculation buffer_segment_count / buffer_size}. If {{errai.bus.buffer_segment_count
is also defined, it will be ignored in the presence of this property. Default value: 32.errai.bus.buffer_size
, the buffer size is inferred by the calculation buffer_segment_size / buffer_segment_count
.direct
and heap
. Direct allocation puts buffer memory outside of the JVM heap, while heap allocation uses buffer memory inside the Java heap. For most situations, heap allocation is preferable. However, if the application is data intensive and requires a substantially large buffer, it is preferable to use a direct buffer. From a throughput perspective, current JVM implementations pay about a 20% performance penalty for direct-allocated memory access. However, your application may show better scaling characteristics with direct buffers. Benchmarking under real load conditions is the only way to know the optimal setting for your use case and expected load. Default value: direct
.false
.org.jboss.errai.bus.server.cluster.ClusteringProvider
. Currently the only build-in provider is the org.jboss.errai.bus.server.cluster.jgroups.JGroupsClusteringProvider
.false
.true
.## ## Request dispatcher implementation (default is SimpleDispatcher) ## #errai.dispatcher_implementation=org.jboss.errai.bus.server.SimpleDispatcher errai.dispatcher_implementation=org.jboss.errai.bus.server.AsyncDispatcher # ## Worker pool size. This is the number of threads the asynchronous worker pool should provide for processing ## incoming messages. This option is only valid when using the AsyncDispatcher implementation. ## errai.async.thread_pool_size=5 ## ## Worker timeout (in seconds). This defines the time that a single asychronous process may run, before the worker pool ## terminates it and reclaims the thread. This option is only valid when using the AsyncDispatcher implementation. ## errai.async.worker.timeout=5 ## ## Specify the Authentication/Authorization Adapter to use ## #errai.authentication_adapter=org.jboss.errai.persistence.server.security.HibernateAuthenticationAdapter #errai.authentication_adapter=org.jboss.errai.bus.server.security.auth.JAASAdapter ## ## This property indicates whether or not authentication is required for all communication with the bus. Set this ## to 'true' if all access to your application should be secure. ## #errai.require_authentication_for_all=true
Errai has several different implementations for HTTP traffic to and from the bus. We provide a universally-compatible blocking implementation that provides fully synchronous communication to/from the server-side bus. Where this introduces scalability problems, we have implemented many webserver-specific implementations that take advantage of the various proprietary APIs to provide true asynchrony.
These included implementations are packaged at: org.jboss.errai.bus.server.servlet
.
You should use just one of the options below. Configuring multiple ErraiServlet implementations in the same application will lead to unpredictable behaviour!
Remember that all Errai demos and archetypes are preconfigured with DefaultBlockingServlet as a servlet. You will need to remove this default setup if you choose to use a different ErraiServlet implementation in your app.
All of the following examples use a wildcard mapping for \*.erraiBus
with no path prefix. This allows Errai Bus to communicate from any point in your application’s URI hierarchy, which allows bus communication to work properly no matter where you choose to put your GWT host page.
For example, all of the following are equivalent from Errai’s point of view:
If you rely on your own security rules or a custom security filter to control access to Errai Bus (rather than the security framework within Errai Bus,) ensure you use the same mapping pattern for that filter-mapping
or security-constraint
as you do for the Errai Servlet itself.
This ErraiServlet implementation should work in virtually any servlet container that supports Java Servlets 2.0 or higher. It provides purely synchronous request handling. The one scenario where this servlet will not work is in servers that put restrictions on putting threads into sleep states.
The default DefaultBlockingServlet which provides the HTTP-protocol gateway between the server bus and the client buses.
As its name suggests, DefaultBlockingServlet is normally configured as an HTTP Servlet in the web.xml
file:
<servlet>
<servlet-name>ErraiServlet</servlet-name>
<servlet-class>org.jboss.errai.bus.server.servlet.DefaultBlockingServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ErraiServlet</servlet-name>
<url-pattern>*.erraiBus</url-pattern>
</servlet-mapping>
Alternatively, the DefaultBlockingServlet can be deployed as a Servlet Filter. This may be necessary in cases where an existing filter is configured in the web application, and that filter interferes with the Errai Bus requests. In this case, configuring DefaultBlockingServlet to handle \*.erraiBus
requests ahead of other filters in web.xml will solve the problem:
<filter>
<filter-name>ErraiServlet</filter-name>
<filter-class>org.jboss.errai.bus.server.servlet.DefaultBlockingServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>ErraiServlet</filter-name>
<url-pattern>*.erraiBus</url-pattern>
</filter-mapping>
The Jetty implementation leverages Jetty’s continuations support, which allows for threadless pausing of port connections. This servlet implementation should work without any special configuration of Jetty.
<servlet>
<servlet-name>ErraiServlet</servlet-name>
<servlet-class>org.jboss.errai.bus.server.servlet.JettyContinuationsServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ErraiServlet</servlet-name>
<url-pattern>*.erraiBus</url-pattern>
</servlet-mapping>
This implementation leverages asynchronous support in Servlet 3.0 to allow for threadless pausing of port connections. Note that <async-supported>true</async-supported>
has to be added to the servlet definition in web.xml
.
<servlet>
<servlet-name>ErraiServlet</servlet-name>
<servlet-class>org.jboss.errai.bus.server.servlet.StandardAsyncServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>ErraiServlet</servlet-name>
<url-pattern>*.erraiBus</url-pattern>
</servlet-mapping>
By default Errai relies on a provided CDI container to do server-side service discovery. But if you intend to use Errai Messaging without a CDI container, Errai can scan for services on its own if the following initialization parameter is added to the servlet configuration:
<init-param>
<param-name>auto-discover-services</param-name>
<param-value>true</param-value>
</init-param>
This configuration will cause issues (such as duplicate services) if it is set to true and a server-side CDI container is available.
To use Errai JAX-RS, you must include it on the compile-time classpath. If you are using Maven for your build, add this dependency:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-jaxrs-client</artifactId>
<version>${errai.version}</version>
<scope>provided</scope>
</dependency>
Or if you are not using Maven for dependency management, add errai-jaxrs-client-${errai.version}.jar
to your classpath.
If you intend to use Errai’s JSON format on the wire you will need to add Errai’s JAX-RS JSON provider to your classpath and make sure it gets deployed to the server.
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-jaxrs-provider</artifactId>
<version>${errai.version}</version>
</dependency>
Or manually add errai-jaxrs-provider-${errai.version}.jar
in case you’re not using Maven. If your REST service returns Jackson generated JSON you do not need the errai-jaxrs-provider (see Configuration ) .
Once you have Errai JAX-RS on your classpath, ensure your application inherits the GWT module as well. Add this line to your application’s *.gwt.xml
file:
<inherits name="org.jboss.errai.enterprise.Jaxrs"/>
All paths specified using the @Path
annotation on JAX-RS interfaces are by definition relative paths. Therefore, by default, it is assumed that the JAX-RS endpoints can be found at the specified paths relative to the GWT client application’s context path.
To configure a relative or absolute root path, the following JavaScript variable can be set in either:
The host HTML page;
<script type="text/javascript">
erraiJaxRsApplicationRoot = "/MyJaxRsEndpointPath";
</script>
By using a JSNI method;
private native void setMyJaxRsAppRoot(String path) /*-{
$wnd.erraiJaxRsApplicationRoot = path;
}-*/;
Or by simply invoking.
RestClient.setApplicationRoot("/MyJaxRsEndpointPath");
The root path will be prepended to all paths specified on the JAX-RS interfaces. It serves as the base URL for all requests sent from the client.
The following options are available for activating Jackson marshalling on the client. Note that this is a client-side configuration, the JAX-RS endpoint is assumed to already return a Jackson representation (Jackson is supported by all JAX-RS implementations). The errai-jaxrs-provider-${errai.version}.jar
does not have to be deployed on the server in this case!
To use the Jackson marshaller add on of these configurations:
Set a Javascript variable in the GWT Host Page;
<script type="text/javascript">
erraiJaxRsJacksonMarshallingActive = true;
</script>
Use a JSNI method;
private native void setJacksonMarshallingActive(boolean active) /*-{
$wnd.erraiJaxRsJacksonMarshallingActive = active;
}-*/;
Or invoke a method in RestClient.
RestClient.setJacksonMarshallingActive(true);
To use Errai JPA, you must include it on the compile-time classpath. If you are using Maven for your build, add this dependency:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-jpa-client</artifactId>
<version>${errai.version}</version>
</dependency>
If you are not using Maven for dependency management, add errai-jpa-client-${errai.version}.jar
, Hibernate 4.1.1, and Google Guava for GWT 12.0 to your compile-time classpath.
First, ensure your pom.xml
includes a dependency on the Data Sync module. This module must be packaged in your application’s WAR file, so include it with the default scope (compile):
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-jpa-datasync</artifactId>
<version>${errai.version}</version>
</dependency>
To use Errai’s data binding module, you must include it on the compile-time classpath. If you are using Maven for your build, add this dependency:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-data-binding</artifactId>
<version>${errai.version}</version>
</dependency>
If you are not using Maven for dependency management, add errai-data-binding-${errai.version}.jar
to your classpath.
The easiest way to get Errai UI on your classpath is to depend on the special errai-javaee-all
artifact, which brings in most Errai modules:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-javaee-all</artifactId>
<version>${errai.version}</version>
</dependency>
Or if you prefer to manage your project’s dependency in a finer-grained way, you can depend on errai-ui
directly:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-ui</artifactId>
<version>${errai.version}</version>
</dependency>
To use Errai UI Navigation, you must include it on the compile-time classpath. If you are using Maven for your build, add these dependencies:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-navigation</artifactId>
<version>${errai.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-cdi-client</artifactId>
<version>${errai.version}</version>
<scope>provided</scope>
</dependency>
If you are not using Maven for dependency management, add errai-navigation-${errai.version}.jar
to the compile-time classpath of a project that’s already set up for Errai UI templating.
Using Errai Cordova requires the following compile-time dependency:
<dependency>
<groupId>org.jboss.errai</groupId>
<artifactId>errai-cordova</artifactId>
<version>${errai.verison}</version>
</dependency>
Errai Cordova allows you build an Errai app to natively run on a device. In order to make this as easy as possible we have a maven plugin that will create a native binary that you can install on a device. It will put the html and javascript of you application in a cordova application.
<build>
...
<plugins>
<plugin>
<groupId>org.jboss.errai</groupId>
<artifactId>cordova-maven-plugin</artifactId>
<version>${errai.version}</version>
</plugin>
Add the following to your application’s *.gwt.xml
module file:
<inherits name="org.jboss.errai.ui.Cordova"/>
Because the client is no longer served by the server the client will need to know how it can reach the server to do that place the following in your gwt.xml:
<replace-with class="com.company.application.Config">
<when-type-is class="org.jboss.errai.bus.client.framework.Configuration" />
</replace-with>
This class must implement org.jboss.errai.bus.client.framework.Configuration
and return the url where the server is configured.
import org.jboss.errai.bus.client.framework.Configuration;
public class Config implements Configuration {
@Override
public String getRemoteLocation() {
// you probably want to do something environment specify here instead of something like this:
return "https://grocery-edewit.rhcloud.com/errai-jpa-demo-grocery-list";
}
}
Now you can execute a native build with the following maven command:
#will build all supported platforms for now only ios and android mvn cordova:build-project #only build android mvn cordova:build-project -Dplatform=android #start the ios emulator with the deployed application mvn cordova:emulator -Dplatform=ios
For these to work you’ll need to have the SDK’s installed and on your path! In case of android you will additionally have to have ANDROID_HOME environment variable set.
For those not using maven, here is the dependency tree of Errai project jars.
org.jboss.errai:errai-bus:jar
org.jboss.errai:errai-common:jar:compile
org.jboss.errai:errai-marshalling:jar:compile
javax.enterprise:cdi-api:jar:1.0-SP4:compile
com.google.gwt:gwt-user:jar:2.5.1:provided
com.google.inject:guice:jar:3.0:compile
org.mortbay.jetty:jetty:jar:6.1.25:provided
org.apache.tomcat:catalina:jar:6.0.20:provided
com.sun.grizzly:grizzly-comet:jar:1.9.19-beta2:provided
com.sun.grizzly:grizzly-http:jar:1.9.19-beta2:provided
com.sun.grizzly:grizzly-nio-framework:jar:1.9.19-beta2:provided
com.sun.grizzly:grizzly-framework:jar:1.9.19-beta2:provided
com.sun.grizzly:grizzly-utils:jar:1.9.19-beta2:provided
junit:junit:jar:4.10:compile
org.jboss.errai:errai-weld-integration:jar
org.jboss.errai:errai-common:jar:compile
org.jboss.errai.reflections:reflections:jar:compile
dom4j:dom4j:jar:1.6.1:compile
org.jboss.errai:errai-bus:jar:compile
com.google.inject:guice:jar:3.0:compile
org.jboss.errai:errai-ioc:jar:provided
javax.enterprise:cdi-api:jar:1.0-SP4:provided
com.google.gwt:gwt-user:jar:2.5.1:provided
org.quartz-scheduler:quartz:jar:2.1.6:provided
junit:junit:jar:4.10:provided
org.jboss:jboss-common-core:jar:2.2.14.GA:provided
org.jboss.errai:errai-data-binding:jar:provided
com.google.guava:guava-gwt:jar:14.0.1:provided
org.jboss.errai:errai-cdi-client:jar
org.jboss.errai:errai-bus:jar:compile
org.jboss.errai:errai-common:jar:compile
org.jboss.errai.reflections:reflections:jar:compile
com.google.inject:guice:jar:3.0:compile
org.jboss.errai:errai-ioc-bus-support:jar:compile
javax.enterprise:cdi-api:jar:1.0-SP4:compile
org.quartz-scheduler:quartz:jar:2.1.6:provided
org.jboss.errai:errai-ioc:jar:compile
com.google.gwt:gwt-user:jar:2.5.1:provided
junit:junit:jar:4.10:provided
org.jboss.errai:errai-ioc:jar
org.jboss.errai:errai-codegen:jar:compile
org.jboss.errai:errai-common:jar:compile
org.jboss.errai.reflections:reflections:jar:compile
com.google.inject:guice:jar:3.0:compile
javax.enterprise:cdi-api:jar:1.0-SP4:compile
com.google.gwt:gwt-user:jar:2.5.1:provided
junit:junit:jar:4.10:provided
org.jboss.errai:errai-uibinder:jar
org.jboss.errai:errai-bus:jar:provided
org.jboss.errai:errai-common:jar:provided
org.jboss.errai.reflections:reflections:jar:provided
org.jboss.errai:errai-ioc:jar:provided
javax.enterprise:cdi-api:jar:1.0-SP4:provided
com.google.inject:guice:jar:3.0:provided
com.google.gwt:gwt-user:jar:2.5.1:provided
org.jboss.errai:errai-navigation:jar
org.jboss.errai:errai-cdi-client:jar:provided
org.jboss.errai:errai-bus:jar:provided
org.jboss.errai:errai-ioc:jar:provided
com.google.inject:guice:jar:3.0:provided
javax.enterprise:cdi-api:jar:1.0-SP4:provided
org.jboss.errai:errai-marshalling:jar:provided
org.jboss.errai:errai-common:jar:provided
org.jboss.errai.reflections:reflections:jar:provided
com.google.guava:guava-gwt:jar:14.0.1:compile
com.google.gwt:gwt-user:jar:2.5.1:provided
org.jboss.weld.se:weld-se-core:jar:1.1.6.Final:provided
org.jboss.weld:weld-spi:jar:1.1.Final:provided
org.jboss.weld:weld-core:jar:1.1.13.Final:provided
org.jboss.errai:errai-data-binding:jar
org.jboss.errai:errai-ioc:jar:provided
org.jboss.errai:errai-codegen:jar:compile
com.google.inject:guice:jar:3.0:provided
org.jboss.errai:errai-marshalling:jar:compile
org.jboss.errai:errai-common:jar:compile
org.jboss.errai.reflections:reflections:jar:compile
com.google.gwt:gwt-user:jar:2.5.1:provided
com.google.guava:guava-gwt:jar:14.0.1:compile
junit:junit:jar:4.10:provided
org.jboss.errai:errai-jpa-client:jar
org.hibernate:hibernate-entitymanager:jar:4.2.0.Final:compile
org.hibernate:hibernate-core:jar:4.2.0.Final:compile
org.jboss.errai:errai-ioc:jar:compile
org.jboss.errai:errai-codegen:jar:compile
org.jboss.errai:errai-common:jar:compile
com.google.inject:guice:jar:3.0:compile
javax.enterprise:cdi-api:jar:1.0-SP4:compile
org.jboss.errai:errai-data-binding:jar:compile
com.google.gwt:gwt-user:jar:2.5.1:compile
com.google.guava:guava-gwt:jar:14.0.1:compile
org.jboss.errai:errai-jpa-datasync:jar
org.jboss.errai:errai-jpa-client:jar:compile
org.hibernate:hibernate-entitymanager:jar:4.2.0.Final:compile
org.hibernate:hibernate-core:jar:4.2.0.Final:compile
org.jboss.errai:errai-ioc:jar:compile
javax.enterprise:cdi-api:jar:1.0-SP4:compile
com.google.gwt:gwt-user:jar:2.5.1:compile
com.google.guava:guava-gwt:jar:14.0.1:compile
org.jboss.errai:errai-bus:jar:compile
org.jboss.errai:errai-common:jar:compile
com.google.inject:guice:jar:3.0:compile
org.jboss.errai:errai-cdi-client:jar:compile
org.jboss.errai:errai-jaxrs-client:jar
org.jboss.errai:errai-marshalling:jar:compile
org.jboss.errai:errai-common:jar:compile
org.jboss.errai.reflections:reflections:jar:compile
org.jboss.errai:errai-codegen:jar:compile
com.google.gwt:gwt-user:jar:2.5.1:provided
junit:junit:jar:4.10:provided
com.google.guava:guava-gwt:jar:14.0.1:compile
org.jboss.errai:errai-jaxrs-provider:jar
org.jboss.errai:errai-marshalling:jar:compile
org.jboss.errai:errai-common:jar:compile
org.jboss.errai.reflections:reflections:jar:compile
org.jboss.errai:errai-codegen:jar:compile
javax.enterprise:cdi-api:jar:1.0-SP4:compile
org.jboss.errai:errai-cordova:jar
org.jboss.errai:errai-bus:jar:compile
org.jboss.errai:errai-common:jar:compile
org.jboss.errai:errai-marshalling:jar:compile
javax.enterprise:cdi-api:jar:1.0-SP4:compile
com.google.inject:guice:jar:3.0:compile
org.jboss.errai:errai-cdi-client:jar:compile
org.jboss.errai:errai-ioc-bus-support:jar:compile
org.jboss.errai:errai-jaxrs-client:jar:compile
com.google.guava:guava-gwt:jar:14.0.1:compile
org.jboss.errai:errai-html5:jar:compile
org.jboss.errai.reflections:reflections:jar:compile
dom4j:dom4j:jar:1.6.1:compile
com.google.gwt:gwt-user:jar:2.5.1:provided
com.googlecode.gwtphonegap:gwtphonegap:jar:2.4.0.0:compile
junit:junit:jar:4.10:provided