blob: ee495a7748ce509dc2dee2c3b0cdbc5a5474c059 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Apache TomEE</title>
<meta name="description"
content="Apache TomEE is a lightweight, yet powerful, JavaEE Application server with feature rich tooling." />
<meta name="keywords" content="tomee,asf,apache,javaee,jee,shade,embedded,test,junit,applicationcomposer,maven,arquillian" />
<meta name="author" content="Luka Cvetinovic for Codrops" />
<link rel="icon" href="../../favicon.ico">
<link rel="icon" type="image/png" href="../../favicon.png">
<meta name="msapplication-TileColor" content="#80287a">
<meta name="theme-color" content="#80287a">
<link rel="stylesheet" type="text/css" href="../../css/normalize.css">
<link rel="stylesheet" type="text/css" href="../../css/bootstrap.css">
<link rel="stylesheet" type="text/css" href="../../css/owl.css">
<link rel="stylesheet" type="text/css" href="../../css/animate.css">
<link rel="stylesheet" type="text/css" href="../../fonts/font-awesome-4.1.0/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="../../fonts/eleganticons/et-icons.css">
<link rel="stylesheet" type="text/css" href="../../css/jqtree.css">
<link rel="stylesheet" type="text/css" href="../../css/idea.css">
<link rel="stylesheet" type="text/css" href="../../css/cardio.css">
<script type="text/javascript">
<!-- Matomo -->
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
/* We explicitly disable cookie tracking to avoid privacy issues */
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function () {
var u = "//matomo.privacy.apache.org/";
_paq.push(['setTrackerUrl', u + 'matomo.php']);
_paq.push(['setSiteId', '5']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.async = true;
g.src = u + 'matomo.js';
s.parentNode.insertBefore(g, s);
})();
<!-- End Matomo Code -->
</script>
</head>
<body>
<div class="preloader">
<img src="../../img/loader.gif" alt="Preloader image">
</div>
<nav class="navbar">
<div class="container">
<div class="row"> <div class="col-md-12">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/" title="Apache TomEE">
<span>
<img
src="../../img/apache_tomee-logo.svg"
onerror="this.src='../../img/apache_tomee-logo.jpg'"
height="50"
>
</span>
</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right main-nav">
<li><a href="../../docs.html">Documentation</a></li>
<li><a href="../../community/index.html">Community</a></li>
<li><a href="../../security/security.html">Security</a></li>
<li><a class="btn btn-accent accent-orange no-shadow" href="../../download.html">Downloads</a></li>
</ul>
</div>
<!-- /.navbar-collapse -->
</div></div>
</div>
<!-- /.container-fluid -->
</nav>
<div id="main-block" class="container main-block">
<div class="row title">
<div class="col-md-12">
<div class='page-header'>
<h1>JPA Hibernate Arquillian</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>This example shows the persist, remove and creation of an entity with JPA and Hibernate 5 using arquillian for the test.</p>
</div>
<div class="paragraph">
<p>The Java Persistence API (JPA) is a Java specification for accessing, persisting, and managing data between Java objects / classes and a relational database.</p>
</div>
<div class="paragraph">
<p>To exemplify the use of JPA, we will persist an Object (Movie) in the database.</p>
</div>
<div class="paragraph">
<p>Links to the documentation have been added in key parts of the example for the case of doubts and as a way to encourage their reading for details.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_movie">Movie</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Here we have a class with some details. See the annotation
<a href="https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/Entity.html">@Entity</a>
above the declaration, with it we are saying that this class is an entity (a table in the database). We still have two more annotations above the attribute id, one of them is
<a href="https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/Id.html">@Id</a>
annotation, it indicates that this attribute is the identifier of the entity and the other annotation
<a href="https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/GeneratedValue.html">@GeneratedValue</a>
indicates that the unique identifier value generation of the entity will be managed by the persistence provider.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.injection.h5jpa;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Movie {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String director;
private String title;
private int year;
public Movie() {
}
public Movie(String director, String title, int year) {
this.director = director;
this.title = title;
this.year = year;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_movies">Movies</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Now we have two important things:
<a href="https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/PersistenceContext.html">@PersistenceContext</a>
annotation and the
<a href="https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/EntityManager.html">EntityManager</a>
declaration.
The
<a href="https://tomee.apache.org/tomee-9.0/javadoc/javax/persistence/EntityManager.html">EntityManager</a>
is the interface with the core methods of JPA like persist, remove, merge, find and others&#8230;&#8203;
We annotate the
<a href="https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/EntityManager.html">EntityManager</a>
with
<a href="https://tomee.apache.org/tomee-9.0/javadoc/jakarta/persistence/PersistenceContext.html">@PersistenceContext</a>, a persistence context is an entity management where every persistence context associated with a persistence unit, we will create a persistence.xml soon for this.</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">import jakarta.ejb.Stateful;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.PersistenceContextType;
import jakarta.persistence.Query;
import jakarta.persistence.criteria.*;
import jakarta.persistence.metamodel.EntityType;
import java.util.List;
@Stateful
public class Movies {
@PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;
public void addMovie(Movie movie) throws Exception {
entityManager.persist(movie);
}
public void deleteMovie(Movie movie) throws Exception {
entityManager.remove(movie);
}
public List&lt;Movie&gt; getMovies() throws Exception {
Query query = entityManager.createQuery("SELECT m from Movie as m");
return query.getResultList();
}
public int count(String field, String searchTerm) {
CriteriaBuilder qb = entityManager.getCriteriaBuilder();
CriteriaQuery&lt;Long&gt; cq = qb.createQuery(Long.class);
Root&lt;Movie&gt; root = cq.from(Movie.class);
EntityType&lt;Movie&gt; type = entityManager.getMetamodel().entity(Movie.class);
cq.select(qb.count(root));
if (field != null &amp;&amp; searchTerm != null &amp;&amp; !"".equals(field.trim()) &amp;&amp; !"".equals(searchTerm.trim())) {
Path&lt;String&gt; path = root.get(type.getDeclaredSingularAttribute(field.trim(), String.class));
Predicate condition = qb.like(path, "%" + searchTerm.trim() + "%");
cq.where(condition);
}
return entityManager.createQuery(cq).getSingleResult().intValue();
}
}</code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_persistence_xml">persistence.xml</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Here we define which database will persist our movies, and we perform other configurations such as: define a persistence-unit with the name movie-unit, followed by the definition of the JPA provider/implementation (in this case Hibernate 5) and we set some properties for hibernate 5:</p>
</div>
<div class="listingblock">
<div class="content">
<pre> &lt;persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0"&gt;
&lt;persistence-unit name="movie-unit"&gt;
&lt;provider&gt;org.hibernate.jpa.HibernatePersistenceProvider&lt;/provider&gt;
&lt;jta-data-source&gt;movieDatabase&lt;/jta-data-source&gt;
&lt;non-jta-data-source&gt;movieDatabaseUnmanaged&lt;/non-jta-data-source&gt;
&lt;class&gt;org.superbiz.injection.h3jpa.Movie&lt;/class&gt;
&lt;properties&gt;
&lt;property name="hibernate.hbm2ddl.auto" value="update"/&gt;
&lt;property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/&gt;
&lt;property name="hibernate.show_sql" value="true"/&gt;
&lt;!--
JPA and CDI are linked, enabling JPA to use CDI for its
components but CDI can use JPA too. To solve issues with
hibernate you need to this property either as system property
or persistence unit
--&gt;
&lt;property name="tomee.jpa.factory.lazy" value="true"/&gt;
&lt;/properties&gt;
&lt;/persistence-unit&gt;
&lt;/persistence&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>You always can refer to <a href="https://tomee.apache.org/latest/docs/datasource-config.html">Datasource configuration</a> documentation for more details.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_arquillian_xml">arquillian.xml</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This file provides the configuration the server will have for running the tests.
The property <code>additionalLibs</code> provide to the server the jar files required for Hibernate 5 as explained in the <a href="https://tomee.apache.org/latest/docs/tomee-and-hibernate.html">TomEE and Hibernate</a> documentation.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;
&lt;arquillian xmlns="http://jboss.org/schema/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"&gt;
&lt;container qualifier="tomee" default="true"&gt;
&lt;configuration&gt;
&lt;property name="httpPort"&gt;-1&lt;/property&gt;
&lt;property name="ajpPort"&gt;-1&lt;/property&gt;
&lt;property name="stopPort"&gt;-1&lt;/property&gt;
&lt;property name="dir"&gt;target/tomee-remote&lt;/property&gt;
&lt;property name="appWorkingDir"&gt;target/arquillian-remote-working-dir&lt;/property&gt;
&lt;property name="cleanOnStartUp"&gt;true&lt;/property&gt;
&lt;property name="additionalLibs"&gt;
&lt;!-- add hibernate 5 need it jars to the server--&gt;
mvn:org.hibernate:hibernate-core-jakarta:5.6.8.Final
mvn:org.hibernate.common:hibernate-commons-annotations:5.1.2.Final
mvn:antlr:antlr:2.7.7
mvn:org.jboss:jandex:2.4.2.Final
mvn:org.jboss.logging:jboss-logging:3.3.2.Final
mvn:net.bytebuddy:byte-buddy:1.12.8
mvn:com.fasterxml:classmate:1.5.1
&lt;/property&gt;
&lt;/configuration&gt;
&lt;/container&gt;
&lt;/arquillian&gt;</pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_moviesarquilliantest">MoviesArquillianTest</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Now we do a test with the following workflow:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Insert a movie.</p>
</li>
<li>
<p>Confirm that a movie was persisted by querying the number of movies from the database.</p>
</li>
<li>
<p>Insert a second movie.</p>
</li>
<li>
<p>Delete the first movie</p>
</li>
<li>
<p>Confirm that the second movie is the only available in the database.</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">package org.superbiz.injection.h5jpa;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import jakarta.ejb.EJB;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(Arquillian.class)
public class MoviesArquillianTest {
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class, "test.war")
.addClasses(Movie.class, Movies.class, MoviesArquillianTest.class)
.addAsResource(new ClassLoaderAsset("META-INF/persistence.xml"), "META-INF/persistence.xml");
}
@EJB
private Movies movies;
@Test
public void shouldBeAbleToAddAMovie() throws Exception {
assertNotNull("Verify that the ejb was injected", movies);
//Insert a movie
final Movie movie = new Movie();
movie.setDirector("Michael Bay");
movie.setTitle("Bad Boys");
movie.setYear(1995);
movies.addMovie(movie);
//Count movies
assertEquals(1, movies.count("title", "a"));
//Insert a movie
movies.addMovie(new Movie("David Dobkin", "Wedding Crashers", 2005));
//Get movies
assertEquals(2, movies.getMovies().size());
//Delete
movies.deleteMovie(movie);
//Get movies
assertEquals(2005, movies.getMovies().get(0).getYear());
}
}</code></pre>
</div>
</div>
</div>
</div>
<h1 id="_running" class="sect0">Running</h1>
<div class="paragraph">
<p>To run the example via maven:</p>
</div>
<div class="paragraph">
<p>Access the project folder:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">cd jpa-hibernate-arquillian</code></pre>
</div>
</div>
<div class="paragraph">
<p>And execute:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-java" data-lang="java">mvn clean install</code></pre>
</div>
</div>
<div class="paragraph">
<p>Which will generate output similar to the following:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="highlight"><code class="language-console" data-lang="console">...
INFO [http-nio-56012-exec-3] org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized MyFaces Core has started, it took [2112] ms.
INFO [http-nio-56012-exec-5] org.hibernate.jpa.internal.util.LogHelper.logPersistenceUnitInformation HHH000204: Processing PersistenceUnitInfo [name: movie-unit]
INFO [http-nio-56012-exec-5] org.hibernate.Version.logVersion HHH000412: Hibernate Core {5.4.10.Final}
INFO [http-nio-56012-exec-5] org.hibernate.annotations.common.reflection.java.JavaReflectionManager.&lt;clinit&gt; HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
INFO [http-nio-56012-exec-5] org.hibernate.dialect.Dialect.&lt;init&gt; HHH000400: Using dialect: org.hibernate.dialect.HSQLDialect
INFO [http-nio-56012-exec-5] org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator.initiateService HHH000490: Using JtaPlatform implementation: [org.apache.openejb.hibernate.OpenEJBJtaPlatform2]
Hibernate: create table Movie (id bigint not null, director varchar(255), title varchar(255), year integer not null, primary key (id))
Hibernate: create sequence hibernate_sequence start with 1 increment by 1
INFO [http-nio-56012-exec-5] org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createDelegate PersistenceUnit(name=movie-unit, provider=org.hibernate.jpa.HibernatePersistenceProvider) - provider time 4033ms
Hibernate: call next value for hibernate_sequence
Hibernate: insert into Movie (director, title, year, id) values (?, ?, ?, ?)
Hibernate: select count(movie0_.id) as col_0_0_ from Movie movie0_ where movie0_.title like ?
Hibernate: call next value for hibernate_sequence
Hibernate: insert into Movie (director, title, year, id) values (?, ?, ?, ?)
Hibernate: select movie0_.id as id1_0_, movie0_.director as director2_0_, movie0_.title as title3_0_, movie0_.year as year4_0_ from Movie movie0_
Hibernate: delete from Movie where id=?
Hibernate: select movie0_.id as id1_0_, movie0_.director as director2_0_, movie0_.title as title3_0_, movie0_.year as year4_0_ from Movie movie0_
...
INFO [main] org.apache.openejb.assembler.classic.Assembler.doResourceDestruction Closing DataSource: Default Unmanaged JDBC Database
INFO [main] sun.reflect.DelegatingMethodAccessorImpl.invoke Destroying ProtocolHandler ["http-nio-56012"]
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0</code></pre>
</div>
</div>
<div class="sect1">
<h2 id="_apis_used">APIs Used</h2>
<div class="sectionbody">
<div class="ulist">
<ul>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/ejb/EJB.html">jakarta.ejb.EJB</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/ejb/Stateful.html">jakarta.ejb.Stateful</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/Entity.html">jakarta.persistence.Entity</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/EntityManager.html">jakarta.persistence.EntityManager</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/GeneratedValue.html">jakarta.persistence.GeneratedValue</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/GenerationType.html">jakarta.persistence.GenerationType</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/Id.html">jakarta.persistence.Id</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/PersistenceContext.html">jakarta.persistence.PersistenceContext</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/PersistenceContextType.html">jakarta.persistence.PersistenceContextType</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/Query.html">jakarta.persistence.Query</a></p>
</li>
<li>
<p><a href="../../jakartaee-10.0/javadoc/jakarta/persistence/metamodel/EntityType.html">jakarta.persistence.metamodel.EntityType</a></p>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="margin-bottom: 30px;"></div>
<footer>
<div class="container">
<div class="row">
<div class="col-sm-6 text-center-mobile">
<h3 class="white">Be simple. Be certified. Be Tomcat.</h3>
<h5 class="light regular light-white">"A good application in a good server"</h5>
<ul class="social-footer">
<li><a href="https://www.facebook.com/ApacheTomEE/"><i class="fa fa-facebook"></i></a></li>
<li><a href="https://twitter.com/apachetomee"><i class="fa fa-twitter"></i></a></li>
</ul>
<h5 class="light regular light-white">
<a href="../../privacy-policy.html" class="white">Privacy Policy</a>
</h5>
</div>
<div class="col-sm-6 text-center-mobile">
<div class="row opening-hours">
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../latest/docs/" class="white">Documentation</a></h5>
<ul class="list-unstyled">
<li><a href="../../latest/docs/admin/configuration/index.html" class="regular light-white">How to configure</a></li>
<li><a href="../../latest/docs/admin/file-layout.html" class="regular light-white">Dir. Structure</a></li>
<li><a href="../../latest/docs/developer/testing/index.html" class="regular light-white">Testing</a></li>
<li><a href="../../latest/docs/admin/cluster/index.html" class="regular light-white">Clustering</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../latest/examples/" class="white">Examples</a></h5>
<ul class="list-unstyled">
<li><a href="../../latest/examples/simple-cdi-interceptor.html" class="regular light-white">CDI Interceptor</a></li>
<li><a href="../../latest/examples/rest-cdi.html" class="regular light-white">REST with CDI</a></li>
<li><a href="../../latest/examples/ejb-examples.html" class="regular light-white">EJB</a></li>
<li><a href="../../latest/examples/jsf-managedBean-and-ejb.html" class="regular light-white">JSF</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../community/index.html" class="white">Community</a></h5>
<ul class="list-unstyled">
<li><a href="../../community/contributors.html" class="regular light-white">Contributors</a></li>
<li><a href="../../community/social.html" class="regular light-white">Social</a></li>
<li><a href="../../community/sources.html" class="regular light-white">Sources</a></li>
</ul>
</div>
<div class="col-sm-3 text-center-mobile">
<h5><a href="../../security/index.html" class="white">Security</a></h5>
<ul class="list-unstyled">
<li><a href="https://apache.org/security" target="_blank" class="regular light-white">Apache Security</a></li>
<li><a href="https://apache.org/security/projects.html" target="_blank" class="regular light-white">Security Projects</a></li>
<li><a href="https://cve.mitre.org" target="_blank" class="regular light-white">CVE</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="row bottom-footer text-center-mobile">
<div class="col-sm-12 light-white">
<p>Copyright &copy; 1999-2022 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
</div>
</div>
</div>
</footer>
<!-- Holder for mobile navigation -->
<div class="mobile-nav">
<ul>
<li><a hef="../../latest/docs/admin/index.html">Administrators</a>
<li><a hef="../../latest/docs/developer/index.html">Developers</a>
<li><a hef="../../latest/docs/advanced/index.html">Advanced</a>
<li><a hef="../../community/index.html">Community</a>
</ul>
<a href="#" class="close-link"><i class="arrow_up"></i></a>
</div>
<!-- Scripts -->
<script src="../../js/jquery-1.11.1.min.js"></script>
<script src="../../js/owl.carousel.min.js"></script>
<script src="../../js/bootstrap.min.js"></script>
<script src="../../js/wow.min.js"></script>
<script src="../../js/typewriter.js"></script>
<script src="../../js/jquery.onepagenav.js"></script>
<script src="../../js/tree.jquery.js"></script>
<script src="../../js/highlight.pack.js"></script>
<script src="../../js/main.js"></script>
</body>
</html>