Skip to content

Commit f992d7a

Browse files
committed
Added Tutorial on how to run Furnace in a standalone app
1 parent fbd93f1 commit f992d7a

File tree

1 file changed

+192
-0
lines changed

1 file changed

+192
-0
lines changed
Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
== Running Furnace as a standalone application
2+
3+
Furnace can also be executed in a standalone app.
4+
5+
=== Setup your environment
6+
7+
Configure your pom.xml like the following:
8+
9+
[source,xml]
10+
----
11+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
12+
<modelVersion>4.0.0</modelVersion>
13+
<groupId>org.george.app</groupId>
14+
<artifactId>furnace-demo</artifactId>
15+
<version>0.0.1-SNAPSHOT</version>
16+
<properties>
17+
<version.forge>2.4.1.Final</version.forge>
18+
</properties>
19+
<dependencyManagement>
20+
<dependencies>
21+
<dependency>
22+
<groupId>org.jboss.forge</groupId>
23+
<artifactId>forge-bom</artifactId>
24+
<version>${version.forge}</version>
25+
<type>pom</type>
26+
<scope>import</scope>
27+
</dependency>
28+
</dependencies>
29+
</dependencyManagement>
30+
<dependencies>
31+
<dependency>
32+
<groupId>org.jboss.forge.furnace</groupId>
33+
<artifactId>furnace-se</artifactId>
34+
</dependency>
35+
<dependency>
36+
<groupId>org.jboss.forge.addon</groupId>
37+
<artifactId>projects-api</artifactId>
38+
</dependency>
39+
<dependency>
40+
<groupId>org.jboss.forge.addon</groupId>
41+
<artifactId>dependencies-api</artifactId>
42+
</dependency>
43+
<dependency>
44+
<groupId>org.jboss.forge.addon</groupId>
45+
<artifactId>parser-java-api</artifactId>
46+
</dependency>
47+
<dependency>
48+
<groupId>org.jboss.forge.addon</groupId>
49+
<artifactId>resources-api</artifactId>
50+
<exclusions>
51+
<exclusion>
52+
<artifactId>facets-impl</artifactId>
53+
<groupId>org.jboss.forge.addon</groupId>
54+
</exclusion>
55+
</exclusions>
56+
</dependency>
57+
58+
</dependencies>
59+
60+
<build>
61+
<plugins>
62+
<plugin>
63+
<groupId>org.jboss.forge.furnace</groupId>
64+
<artifactId>furnace-maven-plugin</artifactId>
65+
<version>${version.forge}</version>
66+
<executions>
67+
<execution>
68+
<id>deploy-addons</id>
69+
<phase>prepare-package</phase>
70+
<goals>
71+
<goal>addon-install</goal>
72+
</goals>
73+
<inherited>false</inherited>
74+
<configuration>
75+
<addonRepository>${project.build.directory}/addons</addonRepository>
76+
<addonIds>
77+
<addonId>org.jboss.forge.addon:core,${version.forge}</addonId>
78+
</addonIds>
79+
</configuration>
80+
</execution>
81+
</executions>
82+
</plugin>
83+
</plugins>
84+
</build>
85+
</project>
86+
----
87+
88+
89+
== Bootstrap and lookup services from Furnace
90+
91+
Now you can boot Furnace and lookup services from the configured addons:
92+
93+
[source,java]
94+
----
95+
/**
96+
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
97+
*
98+
* Licensed under the Eclipse Public License version 1.0, available at
99+
* http://www.eclipse.org/legal/epl-v10.html
100+
*/
101+
102+
package org.george.app;
103+
104+
import java.io.File;
105+
106+
import org.jboss.forge.addon.parser.java.projects.JavaWebProjectType;
107+
import org.jboss.forge.addon.projects.Project;
108+
import org.jboss.forge.addon.projects.ProjectFactory;
109+
import org.jboss.forge.addon.projects.ProjectProvider;
110+
import org.jboss.forge.addon.projects.facets.MetadataFacet;
111+
import org.jboss.forge.addon.resource.Resource;
112+
import org.jboss.forge.addon.resource.ResourceFactory;
113+
import org.jboss.forge.furnace.Furnace;
114+
import org.jboss.forge.furnace.addons.AddonRegistry;
115+
import org.jboss.forge.furnace.repositories.AddonRepositoryMode;
116+
import org.jboss.forge.furnace.se.FurnaceFactory;
117+
import org.jboss.forge.furnace.util.OperatingSystemUtils;
118+
119+
/**
120+
* This is an example on how to start Furnace in a standalone app
121+
*
122+
* @author <a href="ggastald@redhat.com">George Gastaldi</a>
123+
*/
124+
public class Main
125+
{
126+
127+
public static void main(String[] args) throws Exception
128+
{
129+
Furnace furnace = startFurnace();
130+
try
131+
{
132+
AddonRegistry addonRegistry = furnace.getAddonRegistry();
133+
ProjectFactory projectFactory = addonRegistry.getServices(ProjectFactory.class).get();
134+
ResourceFactory resourceFactory = addonRegistry.getServices(ResourceFactory.class).get();
135+
136+
// Create a temporary directory as an example
137+
File underlyingResource = OperatingSystemUtils.createTempDir();
138+
139+
Resource<File> projectDir = resourceFactory.create(underlyingResource);
140+
141+
// This could return more than one provider, but since the maven addon is the only one deployed, this is ok
142+
ProjectProvider projectProvider = addonRegistry.getServices(ProjectProvider.class).get();
143+
144+
// Creating WAR project
145+
JavaWebProjectType javaWebProjectType = addonRegistry.getServices(JavaWebProjectType.class).get();
146+
Project project = projectFactory.createProject(projectDir, projectProvider,
147+
javaWebProjectType.getRequiredFacets());
148+
149+
// Changing metadata
150+
MetadataFacet facet = project.getFacet(MetadataFacet.class);
151+
facet.setProjectName("my-demo-project");
152+
facet.setProjectVersion("1.0.0-SNAPSHOT");
153+
facet.setTopLevelPackage("com.mycompany.project");
154+
155+
System.out.println("Project Created in: " + project);
156+
}
157+
finally
158+
{
159+
furnace.stop();
160+
}
161+
}
162+
163+
static Furnace startFurnace()
164+
{
165+
// Create a Furnace instance. NOTE: This must be called only once
166+
Furnace furnace = FurnaceFactory.getInstance();
167+
168+
// Add repository containing addons specified in pom.xml
169+
furnace.addRepository(AddonRepositoryMode.IMMUTABLE, new File("target/addons"));
170+
171+
// Start Furnace in another thread
172+
furnace.startAsync();
173+
174+
// Wait until Furnace is started
175+
while (!furnace.getStatus().isStarted())
176+
{
177+
try
178+
{
179+
Thread.sleep(100);
180+
}
181+
catch (InterruptedException e)
182+
{
183+
break;
184+
}
185+
}
186+
return furnace;
187+
}
188+
}
189+
190+
----
191+
192+

0 commit comments

Comments
 (0)