From aa8946d8cb6687189a9725f54795cdfdbede45da Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Tue, 12 Aug 2014 17:06:23 -0400 Subject: [PATCH 01/17] Minor tweaks --- .../com/actionbazaar/application/DefaultBidService.java | 2 +- .../main/java/com/actionbazaar/domain/BidRepository.java | 2 +- .../com/actionbazaar/interfaces/rest/BidRestService.java | 2 +- .../actionbazaar/interfaces/rest/RestConfiguration.java | 2 +- .../com/actionbazaar/interfaces/socket/ChatMessage.java | 2 +- .../main/java/com/actionbazaar/interfaces/web/AddBid.java | 2 +- .../com/actionbazaar/interfaces/web/AlertServlet.java | 6 +++--- actionbazaar/src/main/resources/META-INF/persistence.xml | 4 ++-- actionbazaar/src/main/webapp/WEB-INF/beans.xml | 8 +++++--- actionbazaar/src/main/webapp/WEB-INF/web.xml | 6 +++--- .../actionbazaar/interfaces/socket/ChatServerTest.java | 2 -- actionbazaar/src/test/resources/arquillian.xml | 2 +- actionbazaar/src/test/resources/test-beans.xml | 8 +++++--- actionbazaar/src/test/resources/test-persistence.xml | 8 +++++--- actionbazaar/src/test/resources/test-web.xml | 5 +++-- 15 files changed, 33 insertions(+), 28 deletions(-) diff --git a/actionbazaar/src/main/java/com/actionbazaar/application/DefaultBidService.java b/actionbazaar/src/main/java/com/actionbazaar/application/DefaultBidService.java index 54e6098..dfe8bb8 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/application/DefaultBidService.java +++ b/actionbazaar/src/main/java/com/actionbazaar/application/DefaultBidService.java @@ -71,4 +71,4 @@ public void updateBid(Bid bid) { public void deleteBid(Bid bid) { bidRepository.deleteBid(bid); } -} \ No newline at end of file +} diff --git a/actionbazaar/src/main/java/com/actionbazaar/domain/BidRepository.java b/actionbazaar/src/main/java/com/actionbazaar/domain/BidRepository.java index 69c599f..4641c42 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/domain/BidRepository.java +++ b/actionbazaar/src/main/java/com/actionbazaar/domain/BidRepository.java @@ -48,4 +48,4 @@ public interface BidRepository { public void updateBid(Bid bid); public void deleteBid(Bid bid); -} \ No newline at end of file +} diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/BidRestService.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/BidRestService.java index 8c2c542..e0f9b8c 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/BidRestService.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/BidRestService.java @@ -87,4 +87,4 @@ public void deleteBid(@PathParam("id") Long id) { Bid bid = bidService.getBid(id); bidService.deleteBid(bid); } -} \ No newline at end of file +} diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java index 12f6ff4..d8b2ceb 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java @@ -53,4 +53,4 @@ public RestConfiguration() { // Resource packages(new String[]{BidRestService.class.getPackage().getName()}); // removed. } -} \ No newline at end of file +} diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java index fd01b02..6f25f7c 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java @@ -111,4 +111,4 @@ public void destroy() { public String toString() { return "ChatMessage{" + "user=" + user + ", message=" + message + '}'; } -} \ No newline at end of file +} diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java index e411568..d56af46 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java @@ -66,4 +66,4 @@ public String onAdd() { return "confirm_add_bid.jsf"; } -} \ No newline at end of file +} diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AlertServlet.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AlertServlet.java index 06ea4ae..3783f0d 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AlertServlet.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AlertServlet.java @@ -85,11 +85,11 @@ public void service(ServletRequest request, ServletResponse response) } generator.writeEnd(); - + generator.write("goodbye", "No more alerts for now, timing out"); - + generator.writeEnd(); generator.close(); } } -} \ No newline at end of file +} diff --git a/actionbazaar/src/main/resources/META-INF/persistence.xml b/actionbazaar/src/main/resources/META-INF/persistence.xml index c4125d2..6237487 100644 --- a/actionbazaar/src/main/resources/META-INF/persistence.xml +++ b/actionbazaar/src/main/resources/META-INF/persistence.xml @@ -1,7 +1,7 @@ - diff --git a/actionbazaar/src/main/webapp/WEB-INF/beans.xml b/actionbazaar/src/main/webapp/WEB-INF/beans.xml index 5a535b3..ee89b04 100644 --- a/actionbazaar/src/main/webapp/WEB-INF/beans.xml +++ b/actionbazaar/src/main/webapp/WEB-INF/beans.xml @@ -1,5 +1,7 @@ - + \ No newline at end of file diff --git a/actionbazaar/src/main/webapp/WEB-INF/web.xml b/actionbazaar/src/main/webapp/WEB-INF/web.xml index ea9d986..21b153f 100644 --- a/actionbazaar/src/main/webapp/WEB-INF/web.xml +++ b/actionbazaar/src/main/webapp/WEB-INF/web.xml @@ -1,6 +1,6 @@ - @@ -19,7 +19,7 @@ 30 - + add_bid.jsf diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java index aefafcb..786f61f 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java @@ -42,7 +42,6 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.net.URL; import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; @@ -59,7 +58,6 @@ import javax.websocket.WebSocketContainer; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; -import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; import static org.junit.Assert.assertEquals; diff --git a/actionbazaar/src/test/resources/arquillian.xml b/actionbazaar/src/test/resources/arquillian.xml index e98d17e..8d5b99b 100644 --- a/actionbazaar/src/test/resources/arquillian.xml +++ b/actionbazaar/src/test/resources/arquillian.xml @@ -1,5 +1,5 @@ - - + com.actionbazaar.application.ProfilingInterceptor diff --git a/actionbazaar/src/test/resources/test-persistence.xml b/actionbazaar/src/test/resources/test-persistence.xml index d86e9f3..bb8b9db 100644 --- a/actionbazaar/src/test/resources/test-persistence.xml +++ b/actionbazaar/src/test/resources/test-persistence.xml @@ -1,7 +1,9 @@ - + jdbc/ActionBazaarDB diff --git a/actionbazaar/src/test/resources/test-web.xml b/actionbazaar/src/test/resources/test-web.xml index 4bf2f9a..1fe38bc 100644 --- a/actionbazaar/src/test/resources/test-web.xml +++ b/actionbazaar/src/test/resources/test-web.xml @@ -1,6 +1,7 @@ - From 5fc775f3a8bb50586bb5f386893c3c9dd9067975 Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Thu, 25 Sep 2014 22:37:33 -0700 Subject: [PATCH 02/17] Workarounds for GlassFish bugs --- README.md | 61 ++++++++++++++++++- actionbazaar/nb-configuration.xml | 2 +- actionbazaar/pom.xml | 10 +-- .../actionbazaar/interfaces/web/AddBid.java | 8 ++- .../main/resources/META-INF/persistence.xml | 23 +++---- actionbazaar/src/main/webapp/WEB-INF/web.xml | 5 ++ .../src/main/webapp/WEB-INF/weblogic.xml | 19 +++--- .../src/main/webapp/confirm_add_bid.xhtml | 6 +- .../application/BidServiceTest.java | 6 +- .../application/BidServiceUnitTest.java | 2 +- .../interfaces/web/AlertServletTest.java | 21 ++----- .../src/test/resources/arquillian.xml | 27 ++++---- .../src/test/resources/test-beans.xml | 12 ++-- .../test/resources/test-persistence-beans.xml | 9 +++ .../test/resources/test-persistence-web.xml | 11 ++++ .../src/test/resources/test-persistence.xml | 2 +- actionbazaar/src/test/resources/test-web.xml | 5 ++ 17 files changed, 142 insertions(+), 87 deletions(-) create mode 100644 actionbazaar/src/test/resources/test-persistence-beans.xml create mode 100644 actionbazaar/src/test/resources/test-persistence-web.xml diff --git a/README.md b/README.md index f1a03ae..856ab43 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,59 @@ -Testing Java EE Applications Using Arquillian -========== +Testing Java EE Applications on WebLogic 12.1.3 Using Arquillian +================================================================ +This application demonstrates how Java EE applications can be effectively +tested using Arquillian on WebLogic 12.1.3. The application contains a +set of JUnit tests that you should examine. The tests will be run as part +of the Maven build. The tests require a running instance of +WebLogic (please see setup instructions). The WebLogic Maven plugin used as +part of the build also requires a running instance of WebLogic to be present. -This application demonstrates how Java EE applications can be effectively tested using Arquillian. \ No newline at end of file +WebLogic 12.1.3 supports Java EE 6 and some key Java EE 7 APIs - +WebSocket, JAX-RS 2, JSON-P and JPA 2.1. The application uses both +these APIs as well as Java EE 6 features such as CDI, EJB 3.1 and JSF 2. + +Setup +----- +* Install WebLogic 12.1.3 +* The Java EE 7 APIs are not automatically enabled. This + [Aquarium blog entry](https://blogs.oracle.com/theaquarium/entry/java_ee_7_support_comes) + is invaluable in better understanding the Java EE 7 API support in + WebLogic 12.1.3. The referenced white paper explains the steps necessary to + enable the APIs. +* The demo application requires a data source. WebLogic 12.1.3 supports the + Java EE 6 standard @DataSourceDefinition and corresponding XML elements. + However, this does not seem to work with JPA 2.1 so we could not use it. A bug + has been filed to get this fixed. Yet another approach is to use WebLogic + proprietary JDBC modules. This requires an EAR file and would significantly + complicate an otherwise simple WAR build. For this reason, this was not an + approach we used. As a result, however, you will need to manually create a + data source for the demo application. The data source is expected to be bound + to 'jdbc/ActionBazaarDB'. We used embedded Derby but any underlying database + should work. If helpful, a sample WebLogic data source definition is provided + [here](ActionBazaarDB-jdbc.xml). +* The demo application uses the WebLogic Maven plugin to automatically deploy + as part of the build. You will need to enable the plugin in your environment. + The detailed instructions to do this can be found + [here](http://docs.oracle.com/middleware/1213/wls/WLPRG/maven.htm). This + resource also contains details on how to configure the Maven plugin, which + you will need to do (see below). +* Please download this repository. You can use Git or just the simple zip + download. +* The demo is just a simple Maven project under the [actionbazaar](actionbazaar) + directory. You should be able to open it up in any Maven capable IDE, we used + NetBeans. +* If desired setup WebLogic in your IDE. This is what we tested. +* The tests in the Maven build are executed against a running WebLogic instance. + You will need to configure + [this file] (actionbazaar/src/test/resources/arquillian.xml) with the details + of your running WebLogic instance (you could run the instance via the IDE). + For details on configuring WebLogic for Arquillian, look + [here] (https://docs.jboss.org/author/display/ARQ/WLS+12.1+-+Remote). +* The build also automatically undeploys and deploys the application to the + running WebLogic instance using the WebLogic Maven plugin. Please configure + the plugin in the [Maven POM](actionbazaar/pom.xml) with the details + of your running WebLogic instance. +* If desired, you can deploy and run the application manually. We did this both + via NetBeans and by using the plain Maven generated war file in addition to + the automated build. +* You can hook up the build to a continuous integration server such as Hudson. + We tested such a setup. \ No newline at end of file diff --git a/actionbazaar/nb-configuration.xml b/actionbazaar/nb-configuration.xml index b00b5e1..5b43433 100644 --- a/actionbazaar/nb-configuration.xml +++ b/actionbazaar/nb-configuration.xml @@ -14,7 +14,7 @@ That way multiple projects can share the same settings (useful for formatting ru Any value defined here will override the pom.xml file value but is only applicable to the current project. --> ide - WebLogic9 + gfv3ee6 Facelets /less:/css diff --git a/actionbazaar/pom.xml b/actionbazaar/pom.xml index c4ec329..a46536e 100644 --- a/actionbazaar/pom.xml +++ b/actionbazaar/pom.xml @@ -47,12 +47,6 @@ 7.0 provided - - org.glassfish.jersey.media - jersey-media-json-processing - 2.5.1 - compile - org.glassfish.jersey.containers jersey-container-servlet-core @@ -85,8 +79,8 @@ org.jboss.arquillian.container - arquillian-wls-remote-12.1 - 1.0.0.Alpha2 + arquillian-glassfish-managed-3.1 + 1.0.0.CR4 test diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java index d56af46..4b5120d 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java @@ -42,13 +42,14 @@ import com.actionbazaar.application.BidService; import com.actionbazaar.domain.Bid; import java.io.Serializable; -import javax.enterprise.context.RequestScoped; +import javax.enterprise.context.SessionScoped; import javax.enterprise.inject.Produces; +import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; @Named -@RequestScoped +@ViewScoped public class AddBid implements Serializable { private static final long serialVersionUID = 1L; @@ -58,10 +59,11 @@ public class AddBid implements Serializable { @Produces @Named - @RequestScoped + @SessionScoped private final Bid bid = new Bid(); public String onAdd() { + System.err.println(bid); bidService.addBid(bid); return "confirm_add_bid.jsf"; diff --git a/actionbazaar/src/main/resources/META-INF/persistence.xml b/actionbazaar/src/main/resources/META-INF/persistence.xml index 6237487..dde137f 100644 --- a/actionbazaar/src/main/resources/META-INF/persistence.xml +++ b/actionbazaar/src/main/resources/META-INF/persistence.xml @@ -1,15 +1,10 @@ - - - jdbc/ActionBazaarDB - - - - - - \ No newline at end of file + + + java:global/jdbc/ActionBazaarDB + + + + + + diff --git a/actionbazaar/src/main/webapp/WEB-INF/web.xml b/actionbazaar/src/main/webapp/WEB-INF/web.xml index 21b153f..9a80d41 100644 --- a/actionbazaar/src/main/webapp/WEB-INF/web.xml +++ b/actionbazaar/src/main/webapp/WEB-INF/web.xml @@ -23,4 +23,9 @@ add_bid.jsf + + java:global/jdbc/ActionBazaarDB + org.apache.derby.jdbc.EmbeddedDriver + jdbc:derby:/tmp/actionbazaar-database;create=true + \ No newline at end of file diff --git a/actionbazaar/src/main/webapp/WEB-INF/weblogic.xml b/actionbazaar/src/main/webapp/WEB-INF/weblogic.xml index 51fdd77..f18e829 100644 --- a/actionbazaar/src/main/webapp/WEB-INF/weblogic.xml +++ b/actionbazaar/src/main/webapp/WEB-INF/weblogic.xml @@ -1,12 +1,9 @@ - - /actionbazaar - - jax-rs - 2.0 - false - - \ No newline at end of file + + /actionbazaar + + jax-rs + 2.0 + false + + diff --git a/actionbazaar/src/main/webapp/confirm_add_bid.xhtml b/actionbazaar/src/main/webapp/confirm_add_bid.xhtml index 9741540..e10612c 100644 --- a/actionbazaar/src/main/webapp/confirm_add_bid.xhtml +++ b/actionbazaar/src/main/webapp/confirm_add_bid.xhtml @@ -8,11 +8,11 @@

Bid Added

- Item name: + Item name: - Bidder name: + Bidder name: - Bid amount: + Bid amount:
diff --git a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java index a176957..4f6fea9 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java @@ -68,9 +68,9 @@ public static WebArchive createDeployment() { .addClasses(BidService.class, DefaultBidService.class, Profiled.class, ProfilingInterceptor.class, BidRepository.class, DefaultBidRepository.class, Bid.class) - .addAsWebInfResource("test-beans.xml", "beans.xml") - .addAsResource("test-persistence.xml", - "META-INF/persistence.xml"); + .addAsWebInfResource("test-persistence-web.xml", "web.xml") + .addAsWebInfResource("test-persistence-beans.xml", "beans.xml") + .addAsResource("test-persistence.xml", "META-INF/persistence.xml"); } @EJB diff --git a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java index 5efa906..5bb7052 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java @@ -65,7 +65,7 @@ public static WebArchive createDeployment() { .create(WebArchive.class, "actionbazaar-test.war") .addClasses(BidService.class, DefaultBidService.class, BidRepository.class, MockBidRepository.class, Bid.class) - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + .addAsWebInfResource("test-beans.xml", "beans.xml"); } @EJB diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java index b039040..02cd9cf 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java @@ -39,19 +39,14 @@ */ package com.actionbazaar.interfaces.web; -import static org.junit.Assert.assertEquals; - -import java.io.File; - import javax.json.JsonObject; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; - 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.spec.WebArchive; -import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; @@ -61,17 +56,9 @@ public class AlertServletTest { @Deployment public static WebArchive createDeployment() { - WebArchive archive = ShrinkWrap + return ShrinkWrap .create(WebArchive.class, "actionbazaar-test.war") - .addClass(AlertServlet.class) - .addAsWebInfResource("test-weblogic.xml", "weblogic.xml"); - File[] files = Maven - .resolver() - .resolve("org.glassfish.jersey.media:jersey-media-json-processing:2.5.1") - .withTransitivity().asFile(); - archive.addAsLibraries(files); - - return archive; + .addClass(AlertServlet.class); } @Test @@ -80,7 +67,7 @@ public void testGetAlerts() { // Get account balance JsonObject response = client - .target("http://localhost:7001/actionbazaar-test/alerts") + .target("http://localhost:8080/actionbazaar-test/alerts") .queryParam("user_id", "1111").request("application/json") .get(JsonObject.class); // TODO Assert more of the content. diff --git a/actionbazaar/src/test/resources/arquillian.xml b/actionbazaar/src/test/resources/arquillian.xml index 8d5b99b..8c80f6d 100644 --- a/actionbazaar/src/test/resources/arquillian.xml +++ b/actionbazaar/src/test/resources/arquillian.xml @@ -1,19 +1,18 @@ - - - target/ + + target/ - + - t3://localhost:7001 - weblogic - welcome123 - C:\Oracle\Middleware\Oracle_Home\wlserver - AdminServer + C:\glassfish4.1 + localhost + 4848 + admin + admin - - + +
\ No newline at end of file diff --git a/actionbazaar/src/test/resources/test-beans.xml b/actionbazaar/src/test/resources/test-beans.xml index 3e218b7..0af1b98 100644 --- a/actionbazaar/src/test/resources/test-beans.xml +++ b/actionbazaar/src/test/resources/test-beans.xml @@ -1,10 +1,6 @@ - - - com.actionbazaar.application.ProfilingInterceptor - + \ No newline at end of file diff --git a/actionbazaar/src/test/resources/test-persistence-beans.xml b/actionbazaar/src/test/resources/test-persistence-beans.xml new file mode 100644 index 0000000..eefc806 --- /dev/null +++ b/actionbazaar/src/test/resources/test-persistence-beans.xml @@ -0,0 +1,9 @@ + + + + com.actionbazaar.application.ProfilingInterceptor + + \ No newline at end of file diff --git a/actionbazaar/src/test/resources/test-persistence-web.xml b/actionbazaar/src/test/resources/test-persistence-web.xml new file mode 100644 index 0000000..0726838 --- /dev/null +++ b/actionbazaar/src/test/resources/test-persistence-web.xml @@ -0,0 +1,11 @@ + + + + java:global/jdbc/ActionBazaarDB + org.apache.derby.jdbc.EmbeddedDriver + jdbc:derby:/tmp/actionbazaar-database;create=true + + \ No newline at end of file diff --git a/actionbazaar/src/test/resources/test-persistence.xml b/actionbazaar/src/test/resources/test-persistence.xml index bb8b9db..16918a5 100644 --- a/actionbazaar/src/test/resources/test-persistence.xml +++ b/actionbazaar/src/test/resources/test-persistence.xml @@ -5,7 +5,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> - jdbc/ActionBazaarDB + java:global/jdbc/ActionBazaarDB diff --git a/actionbazaar/src/test/resources/test-web.xml b/actionbazaar/src/test/resources/test-web.xml index 1fe38bc..920ba4b 100644 --- a/actionbazaar/src/test/resources/test-web.xml +++ b/actionbazaar/src/test/resources/test-web.xml @@ -20,4 +20,9 @@ add_bid.jsf + + java:global/jdbc/ActionBazaarDB + org.apache.derby.jdbc.EmbeddedDriver + jdbc:derby:/tmp/actionbazaar-database;create=true +
\ No newline at end of file From fa1c800c435ae6a3f790c770164f4e63f570c95d Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Fri, 26 Sep 2014 13:48:38 -0700 Subject: [PATCH 03/17] Porting to GlassFish --- .../interfaces/socket/ChatServer.java | 2 + .../interfaces/rest/BidRestServiceTest.java | 11 +-- .../interfaces/socket/ChatServerTest.java | 93 +++++++++---------- .../src/test/resources/test-weblogic.xml | 11 --- 4 files changed, 52 insertions(+), 65 deletions(-) delete mode 100644 actionbazaar/src/test/resources/test-weblogic.xml diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatServer.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatServer.java index fb9da44..31ccb8f 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatServer.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatServer.java @@ -42,6 +42,7 @@ import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; +import javax.ejb.Singleton; import javax.websocket.EncodeException; import javax.websocket.OnClose; import javax.websocket.OnMessage; @@ -49,6 +50,7 @@ import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; +@Singleton @ServerEndpoint(value = "/chat", encoders = {ChatMessage.class}, decoders = {ChatMessage.class}) public class ChatServer { diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java index 30bf50e..4c774a4 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java @@ -51,7 +51,6 @@ import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.junit.InSequence; import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; @@ -71,8 +70,8 @@ public static WebArchive createDeployment() { .addClasses(BidRestService.class, RestConfiguration.class, BidService.class, DefaultBidService.class, BidRepository.class, DefaultBidRepository.class, Bid.class) - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") - .addAsWebInfResource("test-weblogic.xml", "weblogic.xml") + .addAsWebInfResource("test-beans.xml", "beans.xml") + .addAsWebInfResource("test-persistence-web.xml", "web.xml") .addAsResource("test-persistence.xml", "META-INF/persistence.xml"); } @@ -81,7 +80,7 @@ public static WebArchive createDeployment() { @InSequence(1) public void testAddBid() { WebTarget target = ClientBuilder.newClient() - .target("http://localhost:7001/actionbazaar-test/rest/bids"); + .target("http://localhost:8080/actionbazaar-test/rest/bids"); // Save a new bid. Bid bid = new Bid(); @@ -106,7 +105,7 @@ public void testAddBid() { @InSequence(2) public void testUpdateBid() { WebTarget target = ClientBuilder.newClient() - .target("http://localhost:7001/actionbazaar-test/rest/bids/{id}") + .target("http://localhost:8080/actionbazaar-test/rest/bids/{id}") .resolveTemplate("id", bidId); // Update bid. @@ -128,7 +127,7 @@ public void testUpdateBid() { @InSequence(3) public void testDeleteBid() { WebTarget target = ClientBuilder.newClient() - .target("http://localhost:7001/actionbazaar-test/rest/bids/{id}") + .target("http://localhost:8080/actionbazaar-test/rest/bids/{id}") .resolveTemplate("id", bidId); target.request().delete(); diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java index 786f61f..7434988 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java @@ -65,6 +65,7 @@ import org.junit.runner.RunWith; @RunWith(Arquillian.class) +// TODO Move test to client side. public class ChatServerTest { private static final Logger logger @@ -73,7 +74,7 @@ public class ChatServerTest { private static ChatMessage testMessage; private static ChatMessage testReply; - @Deployment(testable = false) + @Deployment public static WebArchive createDeployment() { return ShrinkWrap .create(WebArchive.class, "actionbazaar-test.war") @@ -82,64 +83,60 @@ public static WebArchive createDeployment() { } @Test - public void testChat() { - try { - URI uri = new URI("ws://localhost:7001/actionbazaar-test/chat"); + public void testChat() throws URISyntaxException, DeploymentException, IOException, InterruptedException { + URI uri = new URI("ws://localhost:8080/actionbazaar-test/chat"); - WebSocketContainer container = ContainerProvider.getWebSocketContainer(); + WebSocketContainer container = ContainerProvider.getWebSocketContainer(); - ClientEndpointConfig configuration = ClientEndpointConfig.Builder.create() - .decoders(Arrays.>asList(ChatMessage.class)) - .encoders(Arrays.>asList(ChatMessage.class)) - .build(); + ClientEndpointConfig configuration = ClientEndpointConfig.Builder.create() + .decoders(Arrays.>asList(ChatMessage.class)) + .encoders(Arrays.>asList(ChatMessage.class)) + .build(); - Endpoint client1 = new Endpoint() { - @Override - public void onOpen(Session session, EndpointConfig config) { - try { - session.addMessageHandler(new MessageHandler.Whole() { - @Override - public void onMessage(ChatMessage message) { - testReply = message; - } - }); - session.getBasicRemote().sendObject( - new ChatMessage("rrahman", "Test message")); - } catch (IOException | EncodeException e) { - logger.log(Level.SEVERE, "Error in chat client", e); - } - } - }; - - Endpoint client2 = new Endpoint() { - @Override - public void onOpen(final Session session, final EndpointConfig config) { + Endpoint client1 = new Endpoint() { + @Override + public void onOpen(Session session, EndpointConfig config) { + try { session.addMessageHandler(new MessageHandler.Whole() { @Override public void onMessage(ChatMessage message) { - try { - testMessage = message; - session.getBasicRemote().sendObject(new ChatMessage("nrahman", "Test reply")); - } catch (IOException | EncodeException ex) { - logger.log(Level.SEVERE, "Error responding to message", ex); - } + testReply = message; } }); + session.getBasicRemote().sendObject( + new ChatMessage("rrahman", "Test message")); + } catch (IOException | EncodeException e) { + logger.log(Level.SEVERE, "Error in chat client", e); } - }; + } + }; - container.connectToServer(client2, configuration, uri); - container.connectToServer(client1, configuration, uri); + Endpoint client2 = new Endpoint() { + @Override + public void onOpen(final Session session, final EndpointConfig config) { + session.addMessageHandler(new MessageHandler.Whole() { + @Override + public void onMessage(ChatMessage message) { + try { + testMessage = message; + session.getBasicRemote().sendObject(new ChatMessage("nrahman", "Test reply")); + } catch (IOException | EncodeException ex) { + logger.log(Level.SEVERE, "Error responding to message", ex); + } + } + }); + } + }; + + container.connectToServer(client2, configuration, uri); + container.connectToServer(client1, configuration, uri); - // Wait for conversation to finish. - Thread.sleep(2000); + // Wait for conversation to finish. + Thread.sleep(2000); - assertEquals("rrahman", testMessage.getUser()); - assertEquals("Test message", testMessage.getMessage()); - assertEquals("nrahman", testReply.getUser()); - assertEquals("Test reply", testReply.getMessage()); - } catch (URISyntaxException | DeploymentException | IOException | InterruptedException ex) { - logger.log(Level.SEVERE, "Error connecting to server", ex); - } + assertEquals("rrahman", testMessage.getUser()); + assertEquals("Test message", testMessage.getMessage()); + assertEquals("nrahman", testReply.getUser()); + assertEquals("Test reply", testReply.getMessage()); } } diff --git a/actionbazaar/src/test/resources/test-weblogic.xml b/actionbazaar/src/test/resources/test-weblogic.xml deleted file mode 100644 index 444d0aa..0000000 --- a/actionbazaar/src/test/resources/test-weblogic.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - jax-rs - 2.0 - false - - \ No newline at end of file From 1ce2c8a2bcb3908985a7d603e49ad50e2a25f34f Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Fri, 26 Sep 2014 14:34:18 -0700 Subject: [PATCH 04/17] Porting to GlassFish --- .../com/actionbazaar/interfaces/web/AddBid.java | 4 +--- .../src/main/resources/META-INF/persistence.xml | 14 +++++++------- actionbazaar/src/main/webapp/WEB-INF/beans.xml | 9 ++++----- actionbazaar/src/main/webapp/WEB-INF/web.xml | 11 +++++------ actionbazaar/src/main/webapp/WEB-INF/weblogic.xml | 9 --------- .../application/BidServiceUnitTest.java | 14 +++++--------- .../actionbazaar/interfaces/web/AddBidTest.java | 3 +-- actionbazaar/src/test/resources/test-web.xml | 9 ++++----- 8 files changed, 27 insertions(+), 46 deletions(-) delete mode 100644 actionbazaar/src/main/webapp/WEB-INF/weblogic.xml diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java index 4b5120d..341374f 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java @@ -44,12 +44,11 @@ import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.enterprise.inject.Produces; -import javax.faces.view.ViewScoped; import javax.inject.Inject; import javax.inject.Named; @Named -@ViewScoped +@SessionScoped public class AddBid implements Serializable { private static final long serialVersionUID = 1L; @@ -63,7 +62,6 @@ public class AddBid implements Serializable { private final Bid bid = new Bid(); public String onAdd() { - System.err.println(bid); bidService.addBid(bid); return "confirm_add_bid.jsf"; diff --git a/actionbazaar/src/main/resources/META-INF/persistence.xml b/actionbazaar/src/main/resources/META-INF/persistence.xml index dde137f..8db6d8d 100644 --- a/actionbazaar/src/main/resources/META-INF/persistence.xml +++ b/actionbazaar/src/main/resources/META-INF/persistence.xml @@ -1,10 +1,10 @@ - - java:global/jdbc/ActionBazaarDB - - - - - + + java:global/jdbc/ActionBazaarDB + + + + + diff --git a/actionbazaar/src/main/webapp/WEB-INF/beans.xml b/actionbazaar/src/main/webapp/WEB-INF/beans.xml index ee89b04..0af1b98 100644 --- a/actionbazaar/src/main/webapp/WEB-INF/beans.xml +++ b/actionbazaar/src/main/webapp/WEB-INF/beans.xml @@ -1,7 +1,6 @@ - + \ No newline at end of file diff --git a/actionbazaar/src/main/webapp/WEB-INF/web.xml b/actionbazaar/src/main/webapp/WEB-INF/web.xml index 9a80d41..f5742b9 100644 --- a/actionbazaar/src/main/webapp/WEB-INF/web.xml +++ b/actionbazaar/src/main/webapp/WEB-INF/web.xml @@ -1,9 +1,8 @@ - + javax.faces.PROJECT_STAGE Development @@ -27,5 +26,5 @@ java:global/jdbc/ActionBazaarDB org.apache.derby.jdbc.EmbeddedDriver jdbc:derby:/tmp/actionbazaar-database;create=true - + \ No newline at end of file diff --git a/actionbazaar/src/main/webapp/WEB-INF/weblogic.xml b/actionbazaar/src/main/webapp/WEB-INF/weblogic.xml deleted file mode 100644 index f18e829..0000000 --- a/actionbazaar/src/main/webapp/WEB-INF/weblogic.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - /actionbazaar - - jax-rs - 2.0 - false - - diff --git a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java index 5bb7052..f96ce90 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java @@ -39,23 +39,19 @@ */ package com.actionbazaar.application; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - +import com.actionbazaar.domain.Bid; +import com.actionbazaar.domain.BidRepository; +import com.actionbazaar.infrastructure.database.MockBidRepository; import javax.ejb.EJB; - 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.EmptyAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import org.junit.Test; import org.junit.runner.RunWith; -import com.actionbazaar.domain.Bid; -import com.actionbazaar.domain.BidRepository; -import com.actionbazaar.infrastructure.database.MockBidRepository; - @RunWith(Arquillian.class) public class BidServiceUnitTest { diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java index 25b4998..e7d88e0 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java @@ -51,7 +51,6 @@ import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import static org.junit.Assert.assertEquals; import org.junit.Test; @@ -78,7 +77,7 @@ public static Archive createDeployment() { .addAsWebInfResource("test-web.xml", "web.xml") .addAsWebResource("add_bid.xhtml", "add_bid.xhtml") .addAsWebResource("confirm_add_bid.xhtml", "confirm_add_bid.xhtml") - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") + .addAsWebInfResource("test-beans.xml", "beans.xml") .addAsResource("test-persistence.xml", "META-INF/persistence.xml"); } diff --git a/actionbazaar/src/test/resources/test-web.xml b/actionbazaar/src/test/resources/test-web.xml index 920ba4b..ad99d21 100644 --- a/actionbazaar/src/test/resources/test-web.xml +++ b/actionbazaar/src/test/resources/test-web.xml @@ -1,9 +1,8 @@ - + javax.faces.PROJECT_STAGE UnitTest From 4a73ca06e778c474909c9906f918e0b0ead5d56f Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Fri, 26 Sep 2014 15:33:57 -0700 Subject: [PATCH 05/17] Porting to GlassFish --- README.md | 64 ++++++------------- .../actionbazaar/interfaces/web/AddBid.java | 6 +- .../application/BidServiceTest.java | 2 +- .../application/BidServiceUnitTest.java | 2 +- .../interfaces/rest/BidRestServiceTest.java | 8 +-- .../interfaces/socket/ChatServerTest.java | 4 +- .../interfaces/web/AddBidTest.java | 2 +- .../interfaces/web/AlertServletTest.java | 4 +- 8 files changed, 33 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 856ab43..3aaa28a 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,33 @@ -Testing Java EE Applications on WebLogic 12.1.3 Using Arquillian +Testing Java EE Applications using Arquillian ================================================================ This application demonstrates how Java EE applications can be effectively -tested using Arquillian on WebLogic 12.1.3. The application contains a +tested using Arquillian. The application contains a set of JUnit tests that you should examine. The tests will be run as part -of the Maven build. The tests require a running instance of -WebLogic (please see setup instructions). The WebLogic Maven plugin used as -part of the build also requires a running instance of WebLogic to be present. - -WebLogic 12.1.3 supports Java EE 6 and some key Java EE 7 APIs - -WebSocket, JAX-RS 2, JSON-P and JPA 2.1. The application uses both -these APIs as well as Java EE 6 features such as CDI, EJB 3.1 and JSF 2. +of the Maven build. We used GlassFish 4.1 for the application (see setup +instructions below) but it should be easy to port to any Java EE 7 application +server such as JBoss, WildFly, WebLogic or WebSphere. Setup ----- -* Install WebLogic 12.1.3 -* The Java EE 7 APIs are not automatically enabled. This - [Aquarium blog entry](https://blogs.oracle.com/theaquarium/entry/java_ee_7_support_comes) - is invaluable in better understanding the Java EE 7 API support in - WebLogic 12.1.3. The referenced white paper explains the steps necessary to - enable the APIs. -* The demo application requires a data source. WebLogic 12.1.3 supports the - Java EE 6 standard @DataSourceDefinition and corresponding XML elements. - However, this does not seem to work with JPA 2.1 so we could not use it. A bug - has been filed to get this fixed. Yet another approach is to use WebLogic - proprietary JDBC modules. This requires an EAR file and would significantly - complicate an otherwise simple WAR build. For this reason, this was not an - approach we used. As a result, however, you will need to manually create a - data source for the demo application. The data source is expected to be bound - to 'jdbc/ActionBazaarDB'. We used embedded Derby but any underlying database - should work. If helpful, a sample WebLogic data source definition is provided - [here](ActionBazaarDB-jdbc.xml). -* The demo application uses the WebLogic Maven plugin to automatically deploy - as part of the build. You will need to enable the plugin in your environment. - The detailed instructions to do this can be found - [here](http://docs.oracle.com/middleware/1213/wls/WLPRG/maven.htm). This - resource also contains details on how to configure the Maven plugin, which - you will need to do (see below). +* Install GlassFish 4.1 * Please download this repository. You can use Git or just the simple zip download. * The demo is just a simple Maven project under the [actionbazaar](actionbazaar) directory. You should be able to open it up in any Maven capable IDE, we used NetBeans. -* If desired setup WebLogic in your IDE. This is what we tested. -* The tests in the Maven build are executed against a running WebLogic instance. +* If desired setup GlassFish in your IDE. +* The tests in the Maven build are executed against an installed GlassFish instance. You will need to configure [this file] (actionbazaar/src/test/resources/arquillian.xml) with the details - of your running WebLogic instance (you could run the instance via the IDE). - For details on configuring WebLogic for Arquillian, look - [here] (https://docs.jboss.org/author/display/ARQ/WLS+12.1+-+Remote). -* The build also automatically undeploys and deploys the application to the - running WebLogic instance using the WebLogic Maven plugin. Please configure - the plugin in the [Maven POM](actionbazaar/pom.xml) with the details - of your running WebLogic instance. + of your GlassFish installation. For details on configuring GlassFish for + Arquillian, look + [here] (https://docs.jboss.org/author/display/ARQ/GlassFish+3.1+-+Managed). + Note that in this case we are using GlassFish in managed mode. This means that + Arquillian still automatically start and stop GlassFish as needed. You must + set an admin password for GlassFish. Due to a GlassFish bug, Arquillian can't + start GlassFish with an empty admin password. Also, GlassFish embedded is + no longer supported as of GlassFish 4 and cannot be used. Similarly, we ran + into GlassFish bugs trying to use remote mode (normally the fastest option + with Arquillian). * If desired, you can deploy and run the application manually. We did this both - via NetBeans and by using the plain Maven generated war file in addition to - the automated build. -* You can hook up the build to a continuous integration server such as Hudson. - We tested such a setup. \ No newline at end of file + via NetBeans and by using the plain Maven generated war file. \ No newline at end of file diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java index 341374f..2df85b8 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java @@ -42,13 +42,13 @@ import com.actionbazaar.application.BidService; import com.actionbazaar.domain.Bid; import java.io.Serializable; -import javax.enterprise.context.SessionScoped; +import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import javax.inject.Inject; import javax.inject.Named; @Named -@SessionScoped +@ApplicationScoped public class AddBid implements Serializable { private static final long serialVersionUID = 1L; @@ -58,7 +58,7 @@ public class AddBid implements Serializable { @Produces @Named - @SessionScoped + @ApplicationScoped private final Bid bid = new Bid(); public String onAdd() { diff --git a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java index 4f6fea9..b8699dc 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java @@ -64,7 +64,7 @@ public class BidServiceTest { @Deployment public static WebArchive createDeployment() { return ShrinkWrap - .create(WebArchive.class, "actionbazaar-test.war") + .create(WebArchive.class, "actionbazaar-service-test.war") .addClasses(BidService.class, DefaultBidService.class, Profiled.class, ProfilingInterceptor.class, BidRepository.class, DefaultBidRepository.class, Bid.class) diff --git a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java index f96ce90..38fc949 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java @@ -58,7 +58,7 @@ public class BidServiceUnitTest { @Deployment public static WebArchive createDeployment() { return ShrinkWrap - .create(WebArchive.class, "actionbazaar-test.war") + .create(WebArchive.class, "actionbazaar-service-unit-test.war") .addClasses(BidService.class, DefaultBidService.class, BidRepository.class, MockBidRepository.class, Bid.class) .addAsWebInfResource("test-beans.xml", "beans.xml"); diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java index 4c774a4..70884cc 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java @@ -66,7 +66,7 @@ public class BidRestServiceTest { @Deployment public static WebArchive createDeployment() { return ShrinkWrap - .create(WebArchive.class, "actionbazaar-test.war") + .create(WebArchive.class, "actionbazaar-rest-test.war") .addClasses(BidRestService.class, RestConfiguration.class, BidService.class, DefaultBidService.class, BidRepository.class, DefaultBidRepository.class, Bid.class) @@ -80,7 +80,7 @@ public static WebArchive createDeployment() { @InSequence(1) public void testAddBid() { WebTarget target = ClientBuilder.newClient() - .target("http://localhost:8080/actionbazaar-test/rest/bids"); + .target("http://localhost:8080/actionbazaar-rest-test/rest/bids"); // Save a new bid. Bid bid = new Bid(); @@ -105,7 +105,7 @@ public void testAddBid() { @InSequence(2) public void testUpdateBid() { WebTarget target = ClientBuilder.newClient() - .target("http://localhost:8080/actionbazaar-test/rest/bids/{id}") + .target("http://localhost:8080/actionbazaar-rest-test/rest/bids/{id}") .resolveTemplate("id", bidId); // Update bid. @@ -127,7 +127,7 @@ public void testUpdateBid() { @InSequence(3) public void testDeleteBid() { WebTarget target = ClientBuilder.newClient() - .target("http://localhost:8080/actionbazaar-test/rest/bids/{id}") + .target("http://localhost:8080/actionbazaar-rest-test/rest/bids/{id}") .resolveTemplate("id", bidId); target.request().delete(); diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java index 7434988..efbcd38 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java @@ -77,14 +77,14 @@ public class ChatServerTest { @Deployment public static WebArchive createDeployment() { return ShrinkWrap - .create(WebArchive.class, "actionbazaar-test.war") + .create(WebArchive.class, "actionbazaar-websocket-test.war") .addClass(ChatMessage.class) .addClass(ChatServer.class); } @Test public void testChat() throws URISyntaxException, DeploymentException, IOException, InterruptedException { - URI uri = new URI("ws://localhost:8080/actionbazaar-test/chat"); + URI uri = new URI("ws://localhost:8080/actionbazaar-websocket-test/chat"); WebSocketContainer container = ContainerProvider.getWebSocketContainer(); diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java index e7d88e0..a908e0d 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java @@ -70,7 +70,7 @@ public class AddBidTest { @Deployment(testable = false) public static Archive createDeployment() { return ShrinkWrap - .create(WebArchive.class, "actionbazaar-test.war") + .create(WebArchive.class, "actionbazaar-jsf-test.war") .addClasses(BidService.class, DefaultBidService.class, BidRepository.class, DefaultBidRepository.class, Bid.class, AddBid.class) diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java index 02cd9cf..913d037 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java @@ -57,7 +57,7 @@ public class AlertServletTest { @Deployment public static WebArchive createDeployment() { return ShrinkWrap - .create(WebArchive.class, "actionbazaar-test.war") + .create(WebArchive.class, "actionbazaar-servlet-test.war") .addClass(AlertServlet.class); } @@ -67,7 +67,7 @@ public void testGetAlerts() { // Get account balance JsonObject response = client - .target("http://localhost:8080/actionbazaar-test/alerts") + .target("http://localhost:8080/actionbazaar-servlet-test/alerts") .queryParam("user_id", "1111").request("application/json") .get(JsonObject.class); // TODO Assert more of the content. From c13d3d7d0fd0abd69f61ee3812e54f9479e0d006 Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Thu, 12 Feb 2015 20:02:31 -0500 Subject: [PATCH 06/17] Minor tweaks --- .../com/actionbazaar/interfaces/rest/RestConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java index d8b2ceb..f1cd4a6 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java @@ -51,6 +51,6 @@ public class RestConfiguration extends ResourceConfig { public RestConfiguration() { // Resource - packages(new String[]{BidRestService.class.getPackage().getName()}); // removed. + packages(new String[]{BidRestService.class.getPackage().getName()}); } } From 837e8afb8b88c14c1519399aa5411f312bcd37a0 Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Thu, 12 Feb 2015 22:39:52 -0500 Subject: [PATCH 07/17] Cleanup --- actionbazaar/nb-configuration.xml | 27 ---------- actionbazaar/nbactions.xml | 50 ------------------- .../actionbazaar/interfaces/web/AddBid.java | 2 +- .../main/resources/META-INF/persistence.xml | 3 +- .../test/resources/test-persistence-web.xml | 2 +- actionbazaar/src/test/resources/test-web.xml | 2 +- 6 files changed, 5 insertions(+), 81 deletions(-) delete mode 100644 actionbazaar/nb-configuration.xml delete mode 100644 actionbazaar/nbactions.xml diff --git a/actionbazaar/nb-configuration.xml b/actionbazaar/nb-configuration.xml deleted file mode 100644 index 5b43433..0000000 --- a/actionbazaar/nb-configuration.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - ide - gfv3ee6 - Facelets - - /less:/css - false - /scss:/css - false - - js/libs - - diff --git a/actionbazaar/nbactions.xml b/actionbazaar/nbactions.xml deleted file mode 100644 index 9636d3e..0000000 --- a/actionbazaar/nbactions.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - run - - war - ear - ejb - - - package - - - true - /add_bid.jsf - - - - debug - - war - ear - ejb - - - package - - - true - true - /add_bid.jsf - - - - profile - - ejb - ear - war - - - package - - - true - true - /add_bid.jsf - - - diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java index 2df85b8..bc32b1f 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java @@ -48,7 +48,7 @@ import javax.inject.Named; @Named -@ApplicationScoped +@ApplicationScoped // TODO Change this to flow scope. public class AddBid implements Serializable { private static final long serialVersionUID = 1L; diff --git a/actionbazaar/src/main/resources/META-INF/persistence.xml b/actionbazaar/src/main/resources/META-INF/persistence.xml index 8db6d8d..fa8bc09 100644 --- a/actionbazaar/src/main/resources/META-INF/persistence.xml +++ b/actionbazaar/src/main/resources/META-INF/persistence.xml @@ -3,7 +3,8 @@ java:global/jdbc/ActionBazaarDB - + diff --git a/actionbazaar/src/test/resources/test-persistence-web.xml b/actionbazaar/src/test/resources/test-persistence-web.xml index 0726838..f22ca8c 100644 --- a/actionbazaar/src/test/resources/test-persistence-web.xml +++ b/actionbazaar/src/test/resources/test-persistence-web.xml @@ -6,6 +6,6 @@ java:global/jdbc/ActionBazaarDB org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:/tmp/actionbazaar-database;create=true + jdbc:derby:/tmp/actionbazaar-test-database;create=true \ No newline at end of file diff --git a/actionbazaar/src/test/resources/test-web.xml b/actionbazaar/src/test/resources/test-web.xml index ad99d21..c492cde 100644 --- a/actionbazaar/src/test/resources/test-web.xml +++ b/actionbazaar/src/test/resources/test-web.xml @@ -22,6 +22,6 @@ java:global/jdbc/ActionBazaarDB org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:/tmp/actionbazaar-database;create=true + jdbc:derby:/tmp/actionbazaar-test-database;create=true \ No newline at end of file From 6c978c6ad9ac9dc87acad61565690e87e0d261f4 Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Thu, 12 Feb 2015 22:47:32 -0500 Subject: [PATCH 08/17] Minor tweak. --- README.md | 2 +- actionbazaar/nb-configuration.xml | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 actionbazaar/nb-configuration.xml diff --git a/README.md b/README.md index 3aaa28a..6ea586b 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,6 @@ Setup start GlassFish with an empty admin password. Also, GlassFish embedded is no longer supported as of GlassFish 4 and cannot be used. Similarly, we ran into GlassFish bugs trying to use remote mode (normally the fastest option - with Arquillian). + with Arquillian). * If desired, you can deploy and run the application manually. We did this both via NetBeans and by using the plain Maven generated war file. \ No newline at end of file diff --git a/actionbazaar/nb-configuration.xml b/actionbazaar/nb-configuration.xml new file mode 100644 index 0000000..4da1f6c --- /dev/null +++ b/actionbazaar/nb-configuration.xml @@ -0,0 +1,18 @@ + + + + + + ide + + From 946733b19e5ecf6ee753d8dfc5808d9e05d44838 Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Fri, 13 Feb 2015 21:24:05 -0500 Subject: [PATCH 09/17] Minor cleanup. --- actionbazaar/pom.xml | 11 +++++++++++ .../application/DefaultBidService.java | 18 +++++++++++++++--- .../interfaces/socket/ChatMessage.java | 9 +++++++++ .../interfaces/web/AlertServlet.java | 8 ++++++-- actionbazaar/src/main/webapp/WEB-INF/web.xml | 2 +- .../database/MockBidRepository.java | 15 ++++++++++++--- .../interfaces/rest/BidRestServiceTest.java | 3 ++- .../interfaces/socket/ChatServerTest.java | 3 ++- .../interfaces/web/AlertServletTest.java | 3 ++- actionbazaar/src/test/resources/arquillian.xml | 13 ++++++++----- 10 files changed, 68 insertions(+), 17 deletions(-) diff --git a/actionbazaar/pom.xml b/actionbazaar/pom.xml index a46536e..432f972 100644 --- a/actionbazaar/pom.xml +++ b/actionbazaar/pom.xml @@ -83,6 +83,8 @@ 1.0.0.CR4 test + + + + actionbazaar diff --git a/actionbazaar/src/main/java/com/actionbazaar/application/DefaultBidService.java b/actionbazaar/src/main/java/com/actionbazaar/application/DefaultBidService.java index dfe8bb8..7f316a9 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/application/DefaultBidService.java +++ b/actionbazaar/src/main/java/com/actionbazaar/application/DefaultBidService.java @@ -39,36 +39,48 @@ */ package com.actionbazaar.application; -import javax.ejb.Stateless; -import javax.inject.Inject; - import com.actionbazaar.domain.Bid; import com.actionbazaar.domain.BidRepository; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.ejb.Stateless; +import javax.inject.Inject; @Stateless @Profiled public class DefaultBidService implements BidService { + private static final Logger logger = Logger + .getLogger(DefaultBidService.class.getName()); + @Inject private BidRepository bidRepository; @Override public Bid addBid(Bid bid) { + logger.log(Level.INFO, "Adding bid: {0}", bid); + return bidRepository.addBid(bid); } @Override public Bid getBid(Long id) { + logger.log(Level.INFO, "Getting bid: {0}", id); + return bidRepository.getBid(id); } @Override public void updateBid(Bid bid) { + logger.log(Level.INFO, "Updating bid: {0}", bid); + bidRepository.updateBid(bid); } @Override public void deleteBid(Bid bid) { + logger.log(Level.INFO, "Deleting bid: {0}", bid); + bidRepository.deleteBid(bid); } } diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java index 6f25f7c..3cfea7a 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/socket/ChatMessage.java @@ -40,6 +40,8 @@ package com.actionbazaar.interfaces.socket; import java.io.StringReader; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonReader; @@ -50,6 +52,9 @@ public class ChatMessage implements Decoder.Text, Encoder.Text { + private static final Logger logger = Logger + .getLogger(ChatMessage.class.getName()); + private String user; private String message; @@ -77,6 +82,8 @@ public void init(EndpointConfig config) { @Override public ChatMessage decode(String value) { + logger.log(Level.FINE, "Decoding JSON: {0}", value); + try (JsonReader jsonReader = Json.createReader( new StringReader(value))) { JsonObject jsonObject = jsonReader.readObject(); @@ -94,6 +101,8 @@ public boolean willDecode(String string) { @Override public String encode(ChatMessage chatMessage) { + logger.log(Level.FINE, "Encoding to JSON: {0}", chatMessage); + JsonObject jsonObject = Json.createObjectBuilder() .add("user", chatMessage.user) .add("message", chatMessage.message) diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AlertServlet.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AlertServlet.java index 3783f0d..6acd3e0 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AlertServlet.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AlertServlet.java @@ -41,7 +41,8 @@ import java.io.IOException; import java.io.PrintWriter; - +import java.util.logging.Level; +import java.util.logging.Logger; import javax.json.Json; import javax.json.stream.JsonGenerator; import javax.servlet.ServletException; @@ -54,17 +55,20 @@ public class AlertServlet extends HttpServlet { private static final long serialVersionUID = 1L; + private static final Logger logger = Logger + .getLogger(AlertServlet.class.getName()); @Override public void service(ServletRequest request, ServletResponse response) throws IOException, ServletException { - response.setContentType("application/json"); PrintWriter out = response.getWriter(); long userId = Long.parseLong(request.getParameter("user_id")); + logger.log(Level.INFO, "Generating alerts for: {0}", userId); + try (JsonGenerator generator = Json.createGenerator(out)) { generator.writeStartObject(); diff --git a/actionbazaar/src/main/webapp/WEB-INF/web.xml b/actionbazaar/src/main/webapp/WEB-INF/web.xml index f5742b9..e03d44c 100644 --- a/actionbazaar/src/main/webapp/WEB-INF/web.xml +++ b/actionbazaar/src/main/webapp/WEB-INF/web.xml @@ -25,6 +25,6 @@ java:global/jdbc/ActionBazaarDB org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:/tmp/actionbazaar-database;create=true + jdbc:derby:/tmp/actionbazaar-development-database;create=true \ No newline at end of file diff --git a/actionbazaar/src/test/java/com/actionbazaar/infrastructure/database/MockBidRepository.java b/actionbazaar/src/test/java/com/actionbazaar/infrastructure/database/MockBidRepository.java index ee5eb5c..3c0c2d6 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/infrastructure/database/MockBidRepository.java +++ b/actionbazaar/src/test/java/com/actionbazaar/infrastructure/database/MockBidRepository.java @@ -39,18 +39,27 @@ */ package com.actionbazaar.infrastructure.database; -import com.actionbazaar.domain.BidRepository; import com.actionbazaar.domain.Bid; +import com.actionbazaar.domain.BidRepository; +import java.util.logging.Level; +import java.util.logging.Logger; public class MockBidRepository implements BidRepository { + private static final Logger logger = Logger + .getLogger(MockBidRepository.class.getName()); + @Override public Bid addBid(Bid bid) { + logger.log(Level.INFO, "Mock add bid."); + return bid; } @Override public Bid getBid(Long id) { + logger.log(Level.INFO, "Mock get bid."); + Bid bid = new Bid(); bid.setId(id); bid.setBidder("nrahman"); @@ -62,11 +71,11 @@ public Bid getBid(Long id) { @Override public void updateBid(Bid bid) { - // NOOP + logger.log(Level.INFO, "Mock update bid."); } @Override public void deleteBid(Bid bid) { - // NOOP + logger.log(Level.INFO, "Mock delete bid."); } } diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java index 70884cc..b06ee4d 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java @@ -57,8 +57,9 @@ import org.junit.Test; import org.junit.runner.RunWith; +// Ran into weird bugs trying to run this on the client. +// Probably another Maven dependency melee. @RunWith(Arquillian.class) -// TODO Move this to client side. public class BidRestServiceTest { private static Long bidId; diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java index efbcd38..7e1509c 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/socket/ChatServerTest.java @@ -64,8 +64,9 @@ import org.junit.Test; import org.junit.runner.RunWith; +// Ran into weird bugs trying to run this on the client. +// Probably another Maven dependency melee. @RunWith(Arquillian.class) -// TODO Move test to client side. public class ChatServerTest { private static final Logger logger diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java index 913d037..44bd648 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java @@ -50,8 +50,9 @@ import org.junit.Test; import org.junit.runner.RunWith; +// Ran into weird bugs trying to run this on the client. +// Probably another Maven dependency melee. @RunWith(Arquillian.class) -// TODO Move to client side. public class AlertServletTest { @Deployment diff --git a/actionbazaar/src/test/resources/arquillian.xml b/actionbazaar/src/test/resources/arquillian.xml index 8c80f6d..525fb4d 100644 --- a/actionbazaar/src/test/resources/arquillian.xml +++ b/actionbazaar/src/test/resources/arquillian.xml @@ -1,18 +1,21 @@ - - target/ + + target/ + + firefox + C:\glassfish4.1 localhost 4848 admin - admin + admin - + \ No newline at end of file From 277d2d14d3fcf47ff2ae92e451feff8d823b2804 Mon Sep 17 00:00:00 2001 From: Reza Rahman Date: Mon, 20 Jun 2016 16:06:53 -0400 Subject: [PATCH 10/17] Switching to JBoss EAP --- README.md | 26 ++++----- actionbazaar/nb-configuration.xml | 1 + actionbazaar/pom.xml | 36 +----------- .../interfaces/rest/RestConfiguration.java | 58 +++---------------- .../actionbazaar/interfaces/web/AddBid.java | 41 +------------ .../main/resources/META-INF/persistence.xml | 4 +- .../WEB-INF/jboss-deployment-structure.xml | 7 +++ actionbazaar/src/main/webapp/WEB-INF/web.xml | 4 +- .../application/BidServiceTest.java | 40 +------------ .../application/BidServiceUnitTest.java | 39 ------------- .../interfaces/rest/BidRestServiceTest.java | 40 +------------ .../interfaces/web/AddBidTest.java | 40 +------------ .../interfaces/web/AlertServletTest.java | 39 ------------- .../src/test/resources/arquillian.xml | 14 ++--- .../resources/jboss-deployment-structure.xml | 7 +++ .../test/resources/test-persistence-web.xml | 4 +- actionbazaar/src/test/resources/test-web.xml | 4 +- 17 files changed, 56 insertions(+), 348 deletions(-) create mode 100644 actionbazaar/src/main/webapp/WEB-INF/jboss-deployment-structure.xml create mode 100644 actionbazaar/src/test/resources/jboss-deployment-structure.xml diff --git a/README.md b/README.md index 6ea586b..e0c3b68 100644 --- a/README.md +++ b/README.md @@ -3,31 +3,27 @@ Testing Java EE Applications using Arquillian This application demonstrates how Java EE applications can be effectively tested using Arquillian. The application contains a set of JUnit tests that you should examine. The tests will be run as part -of the Maven build. We used GlassFish 4.1 for the application (see setup +of the Maven build. We used JBoss EAP 7 for the application (see setup instructions below) but it should be easy to port to any Java EE 7 application -server such as JBoss, WildFly, WebLogic or WebSphere. +server such as GlassFish, WildFly, WebLogic or WebSphere. Setup ----- -* Install GlassFish 4.1 +* Install JBoss EAP 7. It should be a simple matter of downloading the installation + jar and running the GUI wizard (you will need a Red Hat account). Just accept + all the defaults. Remember the admin password you choose. * Please download this repository. You can use Git or just the simple zip download. * The demo is just a simple Maven project under the [actionbazaar](actionbazaar) directory. You should be able to open it up in any Maven capable IDE, we used NetBeans. -* If desired setup GlassFish in your IDE. -* The tests in the Maven build are executed against an installed GlassFish instance. +* If desired setup JBoss EAP in your IDE; we did. At the current time, NetBeans does + not directly support JBoss EAP 7 yet. You can use the NetBeans features for + WildFly 10; it worked fine for us. +* Make sure JBoss EAP 7 is up and running before you run the tests. +* The tests in the Maven build are executed against a running JBoss EAP instance. You will need to configure [this file] (actionbazaar/src/test/resources/arquillian.xml) with the details - of your GlassFish installation. For details on configuring GlassFish for - Arquillian, look - [here] (https://docs.jboss.org/author/display/ARQ/GlassFish+3.1+-+Managed). - Note that in this case we are using GlassFish in managed mode. This means that - Arquillian still automatically start and stop GlassFish as needed. You must - set an admin password for GlassFish. Due to a GlassFish bug, Arquillian can't - start GlassFish with an empty admin password. Also, GlassFish embedded is - no longer supported as of GlassFish 4 and cannot be used. Similarly, we ran - into GlassFish bugs trying to use remote mode (normally the fastest option - with Arquillian). + of your JBoss EAP installation. You must set the admin password for JBoss EAP. * If desired, you can deploy and run the application manually. We did this both via NetBeans and by using the plain Maven generated war file. \ No newline at end of file diff --git a/actionbazaar/nb-configuration.xml b/actionbazaar/nb-configuration.xml index 4da1f6c..39882f4 100644 --- a/actionbazaar/nb-configuration.xml +++ b/actionbazaar/nb-configuration.xml @@ -14,5 +14,6 @@ That way multiple projects can share the same settings (useful for formatting ru Any value defined here will override the pom.xml file value but is only applicable to the current project. --> ide + WildFly diff --git a/actionbazaar/pom.xml b/actionbazaar/pom.xml index 432f972..b4cbe29 100644 --- a/actionbazaar/pom.xml +++ b/actionbazaar/pom.xml @@ -47,13 +47,6 @@ 7.0 provided - - org.glassfish.jersey.containers - jersey-container-servlet-core - 2.0 - jar - provided - junit junit @@ -78,34 +71,11 @@ test - org.jboss.arquillian.container - arquillian-glassfish-managed-3.1 - 1.0.0.CR4 - test - - - - - actionbazaar diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java index f1cd4a6..a21b12d 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/rest/RestConfiguration.java @@ -1,56 +1,16 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * http://glassfish.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ package com.actionbazaar.interfaces.rest; +import java.util.Set; import javax.ws.rs.ApplicationPath; -import org.glassfish.jersey.server.ResourceConfig; +import javax.ws.rs.core.Application; -/** - * JAX-RS configuration. - */ @ApplicationPath("rest") -// TODO Move this to XML. -public class RestConfiguration extends ResourceConfig { +public class RestConfiguration extends Application { - public RestConfiguration() { - // Resource - packages(new String[]{BidRestService.class.getPackage().getName()}); + @Override + public Set> getClasses() { + Set> resources = new java.util.HashSet<>(); + resources.add(BidRestService.class); + return resources; } -} +} \ No newline at end of file diff --git a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java index bc32b1f..1620bc3 100644 --- a/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java +++ b/actionbazaar/src/main/java/com/actionbazaar/interfaces/web/AddBid.java @@ -1,42 +1,3 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * http://glassfish.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ package com.actionbazaar.interfaces.web; import com.actionbazaar.application.BidService; @@ -48,7 +9,7 @@ import javax.inject.Named; @Named -@ApplicationScoped // TODO Change this to flow scope. +@ApplicationScoped // TODO Change this to flow scoped. public class AddBid implements Serializable { private static final long serialVersionUID = 1L; diff --git a/actionbazaar/src/main/resources/META-INF/persistence.xml b/actionbazaar/src/main/resources/META-INF/persistence.xml index fa8bc09..80c589f 100644 --- a/actionbazaar/src/main/resources/META-INF/persistence.xml +++ b/actionbazaar/src/main/resources/META-INF/persistence.xml @@ -1,5 +1,7 @@ - + java:global/jdbc/ActionBazaarDB diff --git a/actionbazaar/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/actionbazaar/src/main/webapp/WEB-INF/jboss-deployment-structure.xml new file mode 100644 index 0000000..9f03b31 --- /dev/null +++ b/actionbazaar/src/main/webapp/WEB-INF/jboss-deployment-structure.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/actionbazaar/src/main/webapp/WEB-INF/web.xml b/actionbazaar/src/main/webapp/WEB-INF/web.xml index e03d44c..7dc30dd 100644 --- a/actionbazaar/src/main/webapp/WEB-INF/web.xml +++ b/actionbazaar/src/main/webapp/WEB-INF/web.xml @@ -24,7 +24,7 @@ java:global/jdbc/ActionBazaarDB - org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:/tmp/actionbazaar-development-database;create=true + org.h2.jdbcx.JdbcDataSource + jdbc:h2:/tmp/actionbazaar-development-database \ No newline at end of file diff --git a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java index b8699dc..2646aaa 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceTest.java @@ -1,42 +1,3 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * http://glassfish.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ package com.actionbazaar.application; import static org.junit.Assert.assertEquals; @@ -69,6 +30,7 @@ public static WebArchive createDeployment() { Profiled.class, ProfilingInterceptor.class, BidRepository.class, DefaultBidRepository.class, Bid.class) .addAsWebInfResource("test-persistence-web.xml", "web.xml") + .addAsWebInfResource("jboss-deployment-structure.xml", "jboss-deployment-structure.xml") .addAsWebInfResource("test-persistence-beans.xml", "beans.xml") .addAsResource("test-persistence.xml", "META-INF/persistence.xml"); } diff --git a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java index 38fc949..72bd16e 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/application/BidServiceUnitTest.java @@ -1,42 +1,3 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * http://glassfish.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ package com.actionbazaar.application; import com.actionbazaar.domain.Bid; diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java index b06ee4d..09ab7ee 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/rest/BidRestServiceTest.java @@ -1,42 +1,3 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * http://glassfish.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ package com.actionbazaar.interfaces.rest; import com.actionbazaar.application.BidService; @@ -73,6 +34,7 @@ public static WebArchive createDeployment() { BidRepository.class, DefaultBidRepository.class, Bid.class) .addAsWebInfResource("test-beans.xml", "beans.xml") .addAsWebInfResource("test-persistence-web.xml", "web.xml") + .addAsWebInfResource("jboss-deployment-structure.xml", "jboss-deployment-structure.xml") .addAsResource("test-persistence.xml", "META-INF/persistence.xml"); } diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java index a908e0d..d9ad813 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AddBidTest.java @@ -1,42 +1,3 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * http://glassfish.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ package com.actionbazaar.interfaces.web; import com.actionbazaar.application.BidService; @@ -75,6 +36,7 @@ public static Archive createDeployment() { BidRepository.class, DefaultBidRepository.class, Bid.class, AddBid.class) .addAsWebInfResource("test-web.xml", "web.xml") + .addAsWebInfResource("jboss-deployment-structure.xml", "jboss-deployment-structure.xml") .addAsWebResource("add_bid.xhtml", "add_bid.xhtml") .addAsWebResource("confirm_add_bid.xhtml", "confirm_add_bid.xhtml") .addAsWebInfResource("test-beans.xml", "beans.xml") diff --git a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java index 44bd648..06e7628 100644 --- a/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java +++ b/actionbazaar/src/test/java/com/actionbazaar/interfaces/web/AlertServletTest.java @@ -1,42 +1,3 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * http://glassfish.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ package com.actionbazaar.interfaces.web; import javax.json.JsonObject; diff --git a/actionbazaar/src/test/resources/arquillian.xml b/actionbazaar/src/test/resources/arquillian.xml index 525fb4d..0671cfa 100644 --- a/actionbazaar/src/test/resources/arquillian.xml +++ b/actionbazaar/src/test/resources/arquillian.xml @@ -6,16 +6,12 @@ target/ - - firefox - - + - C:\glassfish4.1 - localhost - 4848 - admin - admin + jboss eap:7.0.0.Final:remote + localhost + admin + YOUR_JBOSSEAP_PASSWORD \ No newline at end of file diff --git a/actionbazaar/src/test/resources/jboss-deployment-structure.xml b/actionbazaar/src/test/resources/jboss-deployment-structure.xml new file mode 100644 index 0000000..9f03b31 --- /dev/null +++ b/actionbazaar/src/test/resources/jboss-deployment-structure.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/actionbazaar/src/test/resources/test-persistence-web.xml b/actionbazaar/src/test/resources/test-persistence-web.xml index f22ca8c..5b8d245 100644 --- a/actionbazaar/src/test/resources/test-persistence-web.xml +++ b/actionbazaar/src/test/resources/test-persistence-web.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> java:global/jdbc/ActionBazaarDB - org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:/tmp/actionbazaar-test-database;create=true + org.h2.jdbcx.JdbcDataSource + jdbc:h2:/tmp/actionbazaar-test-database \ No newline at end of file diff --git a/actionbazaar/src/test/resources/test-web.xml b/actionbazaar/src/test/resources/test-web.xml index c492cde..b0a1d82 100644 --- a/actionbazaar/src/test/resources/test-web.xml +++ b/actionbazaar/src/test/resources/test-web.xml @@ -21,7 +21,7 @@ java:global/jdbc/ActionBazaarDB - org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:/tmp/actionbazaar-test-database;create=true + org.h2.jdbcx.JdbcDataSource + jdbc:h2:/tmp/actionbazaar-test-database \ No newline at end of file From 142280e46ab456102c56c1f3cf519a29d5633f30 Mon Sep 17 00:00:00 2001 From: Rod MacKenzie Date: Mon, 22 Jan 2018 11:42:01 +0000 Subject: [PATCH 11/17] Ignore Gradle and IDEA directories --- actionbazaar/.gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/actionbazaar/.gitignore b/actionbazaar/.gitignore index 4585d1c..9069bbe 100644 --- a/actionbazaar/.gitignore +++ b/actionbazaar/.gitignore @@ -1,4 +1,6 @@ /target log.txt test-faces-config.NavData -faces-config.NavData \ No newline at end of file +faces-config.NavData +.gradle/ +.idea/ From 2b26883afd5122f6c77826546b501078b7a46eff Mon Sep 17 00:00:00 2001 From: Rod MacKenzie Date: Mon, 22 Jan 2018 11:43:40 +0000 Subject: [PATCH 12/17] Add Gradle build files --- actionbazaar/build.gradle | 36 ++++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54329 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + actionbazaar/gradlew | 172 ++++++++++++++++++ actionbazaar/gradlew.bat | 84 +++++++++ actionbazaar/settings.gradle | 2 + 6 files changed, 299 insertions(+) create mode 100644 actionbazaar/build.gradle create mode 100644 actionbazaar/gradle/wrapper/gradle-wrapper.jar create mode 100644 actionbazaar/gradle/wrapper/gradle-wrapper.properties create mode 100755 actionbazaar/gradlew create mode 100644 actionbazaar/gradlew.bat create mode 100644 actionbazaar/settings.gradle diff --git a/actionbazaar/build.gradle b/actionbazaar/build.gradle new file mode 100644 index 0000000..65a73c8 --- /dev/null +++ b/actionbazaar/build.gradle @@ -0,0 +1,36 @@ + +plugins { + id 'war' +} + +repositories { + mavenCentral() +} + +sourceCompatibility = 1.7 +targetCompatibility = 1.7 + +group = 'com.actionbazaar' +version = '1.0-SNAPSHOT' + +sourceSets { + test { + resources { + srcDir('src/main/webapp') + } + } +} + +dependencies { + providedCompile group: 'javax', name: 'javaee-api', version: '7.0' + + testCompile group: 'junit', name: 'junit', version: '4.11' + testCompile group: 'org.jboss.arquillian.junit', name: 'arquillian-junit-container', version: '1.1.5.Final' + testCompile group: 'org.jboss.shrinkwrap.resolver', name: 'shrinkwrap-resolver-depchain', version: '2.1.0' + testCompile group: 'org.jboss.arquillian.extension', name: 'arquillian-drone-webdriver-depchain', version: '1.3.1.Final' + testCompile group: 'org.arquillian.container', name: 'arquillian-container-chameleon', version: '1.0.0.Alpha6' +} + +war { + archiveName 'actionbazaar.war' +} diff --git a/actionbazaar/gradle/wrapper/gradle-wrapper.jar b/actionbazaar/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01b8bf6b1f99cad9213fc495b33ad5bbab8efd20 GIT binary patch literal 54329 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

<5G2M1WZP5 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/actionbazaar/gradlew.bat b/actionbazaar/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/actionbazaar/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/actionbazaar/settings.gradle b/actionbazaar/settings.gradle new file mode 100644 index 0000000..a19a470 --- /dev/null +++ b/actionbazaar/settings.gradle @@ -0,0 +1,2 @@ + +rootProject.name = 'testing-javaee' From 1833d2e4ec97320dc4a7dd4ef3d2119d4f2bf384 Mon Sep 17 00:00:00 2001 From: Rod MacKenzie Date: Mon, 22 Jan 2018 11:58:05 +0000 Subject: [PATCH 13/17] Add configuration and task to run tests using managed JBoss EAP 7 --- actionbazaar/build.gradle | 11 +++++++++++ actionbazaar/src/test/resources/arquillian.xml | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/actionbazaar/build.gradle b/actionbazaar/build.gradle index 65a73c8..7de5e97 100644 --- a/actionbazaar/build.gradle +++ b/actionbazaar/build.gradle @@ -13,6 +13,10 @@ targetCompatibility = 1.7 group = 'com.actionbazaar' version = '1.0-SNAPSHOT' +ext { + jbossEap7Home = project.findProperty('jbosseap70.home') +} + sourceSets { test { resources { @@ -34,3 +38,10 @@ dependencies { war { archiveName 'actionbazaar.war' } + +task testJBossEAP7(type: Test, dependsOn: testClasses) { + description = 'Runs the tests using JBoss EAP 7.0' + group = 'verification' + systemProperty 'arquillian.launch', 'jbosseap70' + systemProperty 'jboss.home', jbossEap7Home +} diff --git a/actionbazaar/src/test/resources/arquillian.xml b/actionbazaar/src/test/resources/arquillian.xml index 0671cfa..f76267b 100644 --- a/actionbazaar/src/test/resources/arquillian.xml +++ b/actionbazaar/src/test/resources/arquillian.xml @@ -14,4 +14,11 @@ YOUR_JBOSSEAP_PASSWORD + + + + jboss eap:7.0.0.Final:managed + ${jboss.home} + + \ No newline at end of file From d34fd631de7dbcb85bde41f6a420e52356aa8774 Mon Sep 17 00:00:00 2001 From: Rod MacKenzie Date: Mon, 22 Jan 2018 12:09:41 +0000 Subject: [PATCH 14/17] Update test dependencies --- actionbazaar/build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/actionbazaar/build.gradle b/actionbazaar/build.gradle index 7de5e97..f0aaadd 100644 --- a/actionbazaar/build.gradle +++ b/actionbazaar/build.gradle @@ -28,11 +28,11 @@ sourceSets { dependencies { providedCompile group: 'javax', name: 'javaee-api', version: '7.0' - testCompile group: 'junit', name: 'junit', version: '4.11' - testCompile group: 'org.jboss.arquillian.junit', name: 'arquillian-junit-container', version: '1.1.5.Final' - testCompile group: 'org.jboss.shrinkwrap.resolver', name: 'shrinkwrap-resolver-depchain', version: '2.1.0' - testCompile group: 'org.jboss.arquillian.extension', name: 'arquillian-drone-webdriver-depchain', version: '1.3.1.Final' - testCompile group: 'org.arquillian.container', name: 'arquillian-container-chameleon', version: '1.0.0.Alpha6' + testCompile group: 'junit', name: 'junit', version: '4.12' + testCompile group: 'org.jboss.arquillian.junit', name: 'arquillian-junit-container', version: '1.2.0.Final' + testCompile group: 'org.jboss.shrinkwrap.resolver', name: 'shrinkwrap-resolver-depchain', version: '3.1.2' + testCompile group: 'org.jboss.arquillian.extension', name: 'arquillian-drone-webdriver-depchain', version: '2.5.0' + testCompile group: 'org.arquillian.container', name: 'arquillian-container-chameleon', version: '1.0.0.Beta3' } war { From 65ce801b2a56de194a451777511af8315e3dc83e Mon Sep 17 00:00:00 2001 From: Rod MacKenzie Date: Mon, 22 Jan 2018 12:21:12 +0000 Subject: [PATCH 15/17] Export Arquillian archives under the Gradle build directory --- actionbazaar/src/test/resources/arquillian.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/actionbazaar/src/test/resources/arquillian.xml b/actionbazaar/src/test/resources/arquillian.xml index f76267b..336bcb1 100644 --- a/actionbazaar/src/test/resources/arquillian.xml +++ b/actionbazaar/src/test/resources/arquillian.xml @@ -4,8 +4,9 @@ xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> - target/ + build/deployments + jboss eap:7.0.0.Final:remote From 5f228e9fb9ce9c832c14450e4dae228403f1d17b Mon Sep 17 00:00:00 2001 From: Rod MacKenzie Date: Mon, 22 Jan 2018 12:24:34 +0000 Subject: [PATCH 16/17] Add configuration and task to run tests using WildFly 11 --- actionbazaar/build.gradle | 8 ++++++++ actionbazaar/src/test/resources/arquillian.xml | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/actionbazaar/build.gradle b/actionbazaar/build.gradle index f0aaadd..679a4b8 100644 --- a/actionbazaar/build.gradle +++ b/actionbazaar/build.gradle @@ -15,6 +15,7 @@ version = '1.0-SNAPSHOT' ext { jbossEap7Home = project.findProperty('jbosseap70.home') + wildfly11Home = project.findProperty('wildfly11.home') } sourceSets { @@ -45,3 +46,10 @@ task testJBossEAP7(type: Test, dependsOn: testClasses) { systemProperty 'arquillian.launch', 'jbosseap70' systemProperty 'jboss.home', jbossEap7Home } + +task testWildFly11(type: Test, dependsOn: testClasses) { + description = 'Runs the tests using WildFly 11.0' + group = 'verification' + systemProperty 'arquillian.launch', 'wildfly11' + systemProperty 'jboss.home', wildfly11Home +} diff --git a/actionbazaar/src/test/resources/arquillian.xml b/actionbazaar/src/test/resources/arquillian.xml index 336bcb1..5e16eae 100644 --- a/actionbazaar/src/test/resources/arquillian.xml +++ b/actionbazaar/src/test/resources/arquillian.xml @@ -22,4 +22,11 @@ ${jboss.home} + + + + wildfly:11.0.0.Final:managed + ${jboss.home} + + \ No newline at end of file From 7ecd2afbd1a7e7d1fabb7b238766306207d2c18f Mon Sep 17 00:00:00 2001 From: Rod MacKenzie Date: Tue, 23 Jan 2018 12:46:26 +0000 Subject: [PATCH 17/17] Add configuration and task to run tests using GlassFish 4.1 --- actionbazaar/build.gradle | 18 +++++++++++++ .../test-persistence-web.xml | 11 ++++++++ .../src/test/resources-glassfish/test-web.xml | 27 +++++++++++++++++++ .../test-persistence-web.xml | 0 .../test-web.xml | 0 .../src/test/resources/arquillian.xml | 8 ++++++ 6 files changed, 64 insertions(+) create mode 100644 actionbazaar/src/test/resources-glassfish/test-persistence-web.xml create mode 100644 actionbazaar/src/test/resources-glassfish/test-web.xml rename actionbazaar/src/test/{resources => resources-jboss}/test-persistence-web.xml (100%) rename actionbazaar/src/test/{resources => resources-jboss}/test-web.xml (100%) diff --git a/actionbazaar/build.gradle b/actionbazaar/build.gradle index 679a4b8..dd08c86 100644 --- a/actionbazaar/build.gradle +++ b/actionbazaar/build.gradle @@ -14,6 +14,7 @@ group = 'com.actionbazaar' version = '1.0-SNAPSHOT' ext { + glassfish4Home = project.findProperty('glassfish4.home') jbossEap7Home = project.findProperty('jbosseap70.home') wildfly11Home = project.findProperty('wildfly11.home') } @@ -40,9 +41,23 @@ war { archiveName 'actionbazaar.war' } +task testGlassFish41(type: Test, dependsOn: testClasses) { + description = 'Runs the tests using GlassFish 4.1' + group = 'verification' + + classpath += files('src/test/resources-glassfish') + + environment 'JAVA_HOME', System.properties['java.home'] + systemProperty 'arquillian.launch', 'glassfish41' + systemProperty 'glassfish.home', glassfish4Home +} + task testJBossEAP7(type: Test, dependsOn: testClasses) { description = 'Runs the tests using JBoss EAP 7.0' group = 'verification' + + classpath += files('src/test/resources-jboss') + systemProperty 'arquillian.launch', 'jbosseap70' systemProperty 'jboss.home', jbossEap7Home } @@ -50,6 +65,9 @@ task testJBossEAP7(type: Test, dependsOn: testClasses) { task testWildFly11(type: Test, dependsOn: testClasses) { description = 'Runs the tests using WildFly 11.0' group = 'verification' + + classpath += files('src/test/resources-jboss') + systemProperty 'arquillian.launch', 'wildfly11' systemProperty 'jboss.home', wildfly11Home } diff --git a/actionbazaar/src/test/resources-glassfish/test-persistence-web.xml b/actionbazaar/src/test/resources-glassfish/test-persistence-web.xml new file mode 100644 index 0000000..1ae3bbf --- /dev/null +++ b/actionbazaar/src/test/resources-glassfish/test-persistence-web.xml @@ -0,0 +1,11 @@ + + + + java:global/jdbc/ActionBazaarDB + org.apache.derby.jdbc.EmbeddedDriver + jdbc:derby:/tmp/actionbazaar-development-database;create=true + + \ No newline at end of file diff --git a/actionbazaar/src/test/resources-glassfish/test-web.xml b/actionbazaar/src/test/resources-glassfish/test-web.xml new file mode 100644 index 0000000..a349050 --- /dev/null +++ b/actionbazaar/src/test/resources-glassfish/test-web.xml @@ -0,0 +1,27 @@ + + + + javax.faces.PROJECT_STAGE + UnitTest + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + *.jsf + + + add_bid.jsf + + + java:global/jdbc/ActionBazaarDB + org.apache.derby.jdbc.EmbeddedDriver + jdbc:derby:/tmp/actionbazaar-development-database;create=true + + \ No newline at end of file diff --git a/actionbazaar/src/test/resources/test-persistence-web.xml b/actionbazaar/src/test/resources-jboss/test-persistence-web.xml similarity index 100% rename from actionbazaar/src/test/resources/test-persistence-web.xml rename to actionbazaar/src/test/resources-jboss/test-persistence-web.xml diff --git a/actionbazaar/src/test/resources/test-web.xml b/actionbazaar/src/test/resources-jboss/test-web.xml similarity index 100% rename from actionbazaar/src/test/resources/test-web.xml rename to actionbazaar/src/test/resources-jboss/test-web.xml diff --git a/actionbazaar/src/test/resources/arquillian.xml b/actionbazaar/src/test/resources/arquillian.xml index 5e16eae..afd9d58 100644 --- a/actionbazaar/src/test/resources/arquillian.xml +++ b/actionbazaar/src/test/resources/arquillian.xml @@ -16,6 +16,14 @@ + + + glassfish:4.1:managed + ${glassfish.home} + true + + + jboss eap:7.0.0.Final:managed