The Wayback Machine - https://web.archive.org/web/20160908164339/http://oracle.sys-con.com/node/2912905

Welcome!

Recurring Revenue Authors: Elizabeth White, Automic Blog, Ed Featherston, Sujoy Sen, JP Morgenthal

Blog Feed Post

How I Created a Standard pom.xml file for Eclipse and NetBeans

After building my environment for JavaServer Faces in the Eclipse IDE it was time to move onto NetBeans. It should be simple, I thought. I was very, very wrong.

NetBeans Step 1

Create a new project for Maven->Web Application. Fill in the usual details about the Maven project. When complete and the project appears immediately edit the pom.xml file and replace the section that starts with <dependencies> until the end with the contents from my pom.xml file from my previous blog posts.

At this point the project is ready for you to write your code. Or so I thought . . .

NetBeans revealed a flaw in my pom.xml file. In Eclipse the classpath of a Maven project includes the server’s library. This makes the TomEE lib folder’s jar files available to Eclipse. This is not the case with NetBeans. When it handles a Maven based project it expects all references to libraries to be declared in the pom.xml only. The ability to add libraries to a project through the IDE is removed.

When I began working on this project  I was looking for a Maven dependency that referred to the TomEE libraries and not the Java EE 6 Oracle libraries. So the following dependency refers to the wrong version of the libraries.

<dependency>
   <groupId>javax</groupId>
   <artifactId>javaee-web-api</artifactId>
   <version>6.0</version>
   <scope>provided</scope>
</dependency>

Here is where I made one of many mistakes. I believed that the Maven TomEE plugin provided the correct libraries. So I placed in my pom.xml file:

<dependency>
   <groupId>org.apache.openejb.maven</groupId>
   <artifactId>tomee-maven-plugin</artifactId>
   <version>1.6.0</version>
   <scope>provided</scope>
</dependency>

This plugin has nothing to do with TomEE libraries. Instead its purpose is to allow a Maven pom.xml to be written that could, as listed on the TomEE maven Plugin page, do the following:

  • easy provisioning of a TomEE server
  • server start and stop
  • application deploy and undeploy

I did not notice the problem in Eclipse because it saw the TomEE libraries but when I tried to write a Facelet template file with NetBeans it reported that there was No Faces library in the classpath. So back to Google I went.

I found a blog entitled Developing Java EE 6 Applications With TomEE and NetBeans. It created a project by using an archetype. It showed how to add an archetype to Netbeans. It used the tomee-webapp-archetype.

The issue that I have with archetypes is that I must tell my students to delete or ignore parts of the project they create. When I used Maven in the classroom with Eclipse last term I used the maven-archetype-quickstart. Most of my students were confused by the generated files and chose to leave them in place unchanged. Most of my students’ projects displayed “Hello World!” in the console when run because they would not change the App.java file. Now I plan to start projects without an archetype.

What I was really interested in was the pom.xml file it created. It contained the dependency I was looking for that referenced the library used by TomEE:

<dependency>
   <groupId>org.apache.openejb</groupId>
   <artifactId>javaee-api</artifactId>
   <version>6.0-5</version>
   <scope>provided</scope>
</dependency>

It also included a plugin for the JPA. Great, now for some testing.

The sample code ran in NetBeans although it complained about the following tag in an xhtml file:

<h:body bgcolor="white">

Now I was getting ticked off. The sample web app does work and the error is ignored. I know it works because I changed the color to green. What I don’t understand is how the authors of this archetype felt it was acceptable to leave an error in their code. A little research revealed that it should have been written as:

<h:body style="background-color:white">

I now think I’m all set. As a further test I decide to try to add a new JSF Facelets template file. I could not create the file because NetBeans declared that there was No Facelets Libraries Found. But I thought org.apache.openejb.javaee-api would take care of this. A look into the Dependencies folder of the project revealed that there were no JSF libraries. So back to Google and the following was added:

<dependency>
   <groupId>org.apache.myfaces.core</groupId>
   <artifactId>myfaces-impl-ee6</artifactId>
   <version>2.1.1</version>
   <scope>provided</scope>
</dependency>

How can we be told that JSF should be used in place of Servlets and JSPs only to discover that org.apache.openejb.javaee-api does not include MyFaces? I found my fix and so it’s time to move on.

The archetype sample code now ran flawlessly and I could add new Facelet template files.

I had successfully followed the Eclipse JSF Tools Tutorial – JSF 2.0 using may Maven based project setup. You can find this tutorial in the Eclipse help system. I uploaded it to my SVN repository and then brought it down to NetBeans. It ran successfully in NetBeans. Now I replaced most of the pom.xml file with the new components from the archetype sample and it continued to run flawlessly. I was on a roll. So I updated the repository from NetBeans and brought the project back into Eclipse. Eclipse was not happy.

Eclipse complained about a section of the JPA plugin in the pom.xml file.

<executions>
   <execution>
      <id>enhancer</id>
      <phase>process-classes</phase>
      <goals>
         <goal>enhance</goal>
      </goals>
   </execution>
</executions>

I could comment these lines out but NetBeans was okay with them. The error message in Eclipse stated that “Plugin execution not covered by lifecycle configuration”. Back to Google and a solution was found. It seems Eclipse’s m2e plugin needs information about the lifecycle and this needed to be added to the pom.xml. You can read about this here.

So more elements were added to the pom.xml. I did discover that while you normally place plugins as a child of the <plugins> tag, the fix for Eclipse required the plugins to be children of <pluginManagement><plugins>.

Once Eclipse was happy I moved the project back through SVN to NetBeans and it did not mind the Eclipse specific elements in the pom.xml. The Eclipse tutorial project worked on both platforms and I could create the project from scratch on both platforms.

The last niggling problem was a warning whenever I ran the Eclipse tutorial. TomEE wrote out to the console:

WARNING: Attribute ‘for’ of label component with id j_id_a is not defined

I popped this into Google and came up with this answer.

The author of the Eclipse tutorial wrote:

<h:outputLabel value="Welcome #{loginBean.name}"></h:outputLabel>

This was the cause of the problem and the Stack Overflow author of the answer made some pretty strong remarks about whomever writes this in tutorials. I concurred. The fix is:

<h:outputText value="Welcome #{loginBean.name}"></h:outputText>

The tutorial also failed to use CDI correctly but that was a simple fix.

Here is the final version of the pom.xml file. Final, that is, until I discover some other component of the Java EE 6 Web profile that is missing from the org.apache.openejb.javaee-api.

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.kenfogel</groupId>
   <artifactId>JSFExample01</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>war</packaging>
   <name>JSF Example</name>
   <description>JSF 2.0 Tools Tutorial from Eclipse</description>
   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.11</version>
         <scope>test</scope>
      </dependency>
      <!-- Apache OpenEJB -->
      <dependency>
         <groupId>org.apache.openejb</groupId>
         <artifactId>javaee-api</artifactId>
         <version>6.0-5</version>
         <scope>provided</scope>
      </dependency>
      <!-- Apache MyFaces library that is included with TomEE 
           but not considered  part of the javaee-api -->
      <dependency>
         <groupId>org.apache.myfaces.core</groupId>
         <artifactId>myfaces-impl-ee6</artifactId>
         <version>2.1.1</version>
         <scope>provided</scope>
      </dependency>
   </dependencies>
   <build>
      <pluginManagement>
         <plugins>
            <!--This plugin's configuration is used to store 
                Eclipse m2e settings only. It has no influence 
                on the Maven build itself. Appears harmless in 
                NetBeans -->
            <plugin>
               <groupId>org.eclipse.m2e</groupId>
               <artifactId>lifecycle-mapping</artifactId>
               <version>1.0.0</version>
               <configuration>
                  <lifecycleMappingMetadata>
                     <pluginExecutions>
                        <pluginExecution>
                           <pluginExecutionFilter>
                              <groupId>some-group-id</groupId>
                              <artifactId>some-artifact-id
                              </artifactId>
                              <versionRange>[1.0.0,)</versionRange>
                              <goals>
                                 <goal>some-goal</goal>
                              </goals>
                           </pluginExecutionFilter>
                           <action>
                              <execute>
                                 <runOnIncremental>false
                                 </runOnIncremental>
                              </execute>
                           </action>
                        </pluginExecution>
                     </pluginExecutions>
                  </lifecycleMappingMetadata>
               </configuration>
            </plugin>
            <!-- Java Persistence API settings -->
            <plugin>
               <groupId>org.apache.openjpa</groupId>
               <artifactId>openjpa-maven-plugin</artifactId>
               <version>2.3.0</version>
               <configuration>
                  <includes>**/entities/*.class</includes>
                  <excludes>**/entities/XML*.class</excludes>
                  <addDefaultConstructor>true
                  </addDefaultConstructor>
                  <enforcePropertyRestrictions>true
                  </enforcePropertyRestrictions>
               </configuration>
               <!-- Maven settings not supported by Eclipse 
                    without the plugin above. NetBeans is fine with
                    with or without the plugin above -->
               <executions>
                  <execution>
                     <id>enhancer</id>
                     <phase>process-classes</phase>
                     <goals>
                        <goal>enhance</goal>
                     </goals>
                  </execution>
               </executions>
               <dependencies>
                  <dependency>
                     <groupId>org.apache.openjpa</groupId>
                     <artifactId>openjpa</artifactId>
                     <!-- set the version to be the same as the 
                          level in your runtime -->
                     <version>2.3.0</version>
                  </dependency>
               </dependencies>
            </plugin>
            <!-- used to compile the sources of your project -->
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.1</version>
               <!-- Java version -->
               <configuration>
                  <source>1.7</source>
                  <target>1.7</target>
               </configuration>
            </plugin>
            <!-- used during the test phase of the build 
                 lifecycle to execute the unit tests of 
                 an application -->
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>2.16</version>
            </plugin>
            <!-- responsible for collecting all artifact 
                 dependencies, classes and resources of the web 
                 application and packaging them into a 
                 war file -->
            <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-war-plugin</artifactId>
               <version>2.4</version>
               <configuration>
                  <failOnMissingWebXml>false</failOnMissingWebXml>
                  <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
               </configuration>
            </plugin>
         </plugins>
      </pluginManagement>
   </build>
   <!-- Repository to use if required files are not in the local 
        repository -->
   <repositories>
     <repository>
       <id>apache-snapshot</id>
       <name>Apache Snapshot Repository</name>
       <url>https://repository.apache.org/content/groups/snapshots/
       </url>
     </repository>
   </repositories>
   <properties>
      <project.build.sourceEncoding>UTF-8
      </project.build.sourceEncoding>
   </properties>
</project>

Please let me know if you see any errors. The fix for the Eclipse lifecycle error has meaningless information in it because I could not find any meaningful values. What I saw all appeared quite arbitrary.

I think that I can now begin planning the curriculum for my courses.

Read the original blog entry...

More Stories By Ken Fogel

In 1980 I bought for myself the most wonderful toy of the day, the Apple ][+. Obsession followed quickly and by 1983 I was writing software for small and medium sized businesses in Montreal for both the Apple and the IBM PC under the company name Omnibus Systems. In the evenings I taught continuing education courses that demystified the computer to the first generation of workers who found themselves with their typewriter on the scrap heap and a PC with WordStar taking its place.

In 1990 I was invited to join the faculty at Dawson College in the Computer Science Technology program. When I joined the program the primary language was COBOL and my responsibility was to teach small systems languages such as BASIC and C/C++.

Today I am now the chairperson and program coordinator of the Computer Science Technology program at Dawson. The program's primary language is Java and the focus is on enterprise programming.

I like to write about the every day problems my students and I face in using various languages and platforms to get the job done. And from time to time I stray from the path and write about what I plan to do, what I actually get around to doing, and what I imagine I am doing.

@omniprof

@ThingsExpo Stories
Web Real-Time Communication APIs have quickly revolutionized what browsers are capable of. In addition to video and audio streams, we can now bi-directionally send arbitrary data over WebRTC's PeerConnection Data Channels. With the advent of Progressive Web Apps and new hardware APIs such as WebBluetooh and WebUSB, we can finally enable users to stitch together the Internet of Things directly from their browsers while communicating privately and securely in a decentralized way.
Smart Cities are here to stay, but for their promise to be delivered, the data they produce must not be put in new siloes. In his session at @ThingsExpo, Mathias Herberts, Co-founder and CTO of Cityzen Data, will deep dive into best practices that will ensure a successful smart city journey.
If you’re responsible for an application that depends on the data or functionality of various IoT endpoints – either sensors or devices – your brand reputation depends on the security, reliability, and compliance of its many integrated parts. If your application fails to deliver the expected business results, your customers and partners won't care if that failure stems from the code you developed or from a component that you integrated. What can you do to ensure that the endpoints work as expect...
The Internet of Things can drive efficiency for airlines and airports. In their session at @ThingsExpo, Shyam Varan Nath, Principal Architect with GE, and Sudip Majumder, senior director of development at Oracle, will discuss the technical details of the connected airline baggage and related social media solutions. These IoT applications will enhance travelers' journey experience and drive efficiency for the airlines and the airports. The session will include a working demo and a technical d...
WebRTC adoption has generated a wave of creative uses of communications and collaboration through websites, sales apps, customer care and business applications. As WebRTC has become more mainstream it has evolved to use cases beyond the original peer-to-peer case, which has led to a repeating requirement for interoperability with existing infrastructures. In his session at @ThingsExpo, Graham Holt, Executive Vice President of Daitan Group, will cover implementation examples that have enabled ea...
IoT is fundamentally transforming the auto industry, turning the vehicle into a hub for connected services, including safety, infotainment and usage-based insurance. Auto manufacturers – and businesses across all verticals – have built an entire ecosystem around the Connected Car, creating new customer touch points and revenue streams. In his session at @ThingsExpo, Macario Namie, Head of IoT Strategy at Cisco Jasper, will share real-world examples of how IoT transforms the car from a static p...
For basic one-to-one voice or video calling solutions, WebRTC has proven to be a very powerful technology. Although WebRTC’s core functionality is to provide secure, real-time p2p media streaming, leveraging native platform features and server-side components brings up new communication capabilities for web and native mobile applications, allowing for advanced multi-user use cases such as video broadcasting, conferencing, and media recording.
Why do your mobile transformations need to happen today? Mobile is the strategy that enterprise transformation centers on to drive customer engagement. In his general session at @ThingsExpo, Roger Woods, Director, Mobile Product & Strategy – Adobe Marketing Cloud, covered key IoT and mobile trends that are forcing mobile transformation, key components of a solid mobile strategy and explored how brands are effectively driving mobile change throughout the enterprise.
Data is an unusual currency; it is not restricted by the same transactional limitations as money or people. In fact, the more that you leverage your data across multiple business use cases, the more valuable it becomes to the organization. And the same can be said about the organization’s analytics. In his session at 19th Cloud Expo, Bill Schmarzo, CTO for the Big Data Practice at EMC, will introduce a methodology for capturing, enriching and sharing data (and analytics) across the organizati...
In his session at @ThingsExpo, Kausik Sridharabalan, founder and CTO of Pulzze Systems, Inc., will focus on key challenges in building an Internet of Things solution infrastructure. He will shed light on efficient ways of defining interactions within IoT solutions, leading to cost and time reduction. He will also introduce ways to handle data and how one can develop IoT solutions that are lean, flexible and configurable, thus making IoT infrastructure agile and scalable.
The vision of a connected smart home is becoming reality with the application of integrated wireless technologies in devices and appliances. The use of standardized and TCP/IP networked wireless technologies in line-powered and battery operated sensors and controls has led to the adoption of radios in the 2.4GHz band, including Wi-Fi, BT/BLE and 802.15.4 applied ZigBee and Thread. This is driving the need for robust wireless coexistence for multiple radios to ensure throughput performance and th...
Cloud computing is being adopted in one form or another by 94% of enterprises today. Tens of billions of new devices are being connected to The Internet of Things. And Big Data is driving this bus. An exponential increase is expected in the amount of information being processed, managed, analyzed, and acted upon by enterprise IT. This amazing is not part of some distant future - it is happening today. One report shows a 650% increase in enterprise data by 2020. Other estimates are even higher....
With so much going on in this space you could be forgiven for thinking you were always working with yesterday’s technologies. So much change, so quickly. What do you do if you have to build a solution from the ground up that is expected to live in the field for at least 5-10 years? This is the challenge we faced when we looked to refresh our existing 10-year-old custom hardware stack to measure the fullness of trash cans and compactors.
Internet of @ThingsExpo, taking place November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, is co-located with 19th Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The Internet of Things (IoT) is the most profound change in personal and enterprise IT since the creation of the Worldwide Web more than 20 years ago. All major researchers estimate there will be tens of billions devices - comp...
Fact is, enterprises have significant legacy voice infrastructure that’s costly to replace with pure IP solutions. How can we bring this analog infrastructure into our shiny new cloud applications? There are proven methods to bind both legacy voice applications and traditional PSTN audio into cloud-based applications and services at a carrier scale. Some of the most successful implementations leverage WebRTC, WebSockets, SIP and other open source technologies. In his session at @ThingsExpo, Da...
SYS-CON Events announced today that Pulzze Systems will exhibit at the 19th International Cloud Expo, which will take place on November 1–3, 2016, at the Santa Clara Convention Center in Santa Clara, CA. Pulzze Systems, Inc. provides infrastructure products for the Internet of Things to enable any connected device and system to carry out matched operations without programming. For more information, visit http://www.pulzzesystems.com.
Almost two-thirds of companies either have or soon will have IoT as the backbone of their business in 2016. However, IoT is far more complex than most firms expected. How can you not get trapped in the pitfalls? In his session at @ThingsExpo, Tony Shan, a renowned visionary and thought leader, will introduce a holistic method of IoTification, which is the process of IoTifying the existing technology and business models to adopt and leverage IoT. He will drill down to the components in this fra...
19th Cloud Expo, taking place November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA, will feature technical sessions from a rock star conference faculty and the leading industry players in the world. Cloud computing is now being embraced by a majority of enterprises of all sizes. Yesterday's debate about public vs. private has transformed into the reality of hybrid cloud: a recent survey shows that 74% of enterprises have a hybrid cloud strategy. Meanwhile, 94% of enterpri...
Although it has gained significant traction in the consumer space, IoT is still in the early stages of adoption in enterprises environments. However, many companies are working on initiatives like Industry 4.0 that includes IoT as one of the key disruptive technologies expected to reshape businesses of tomorrow. The key challenges will be availability, robustness and reliability of networks that connect devices in a business environment. Software Defined Wide Area Network (SD-WAN) is expected to...
Today we can collect lots and lots of performance data. We build beautiful dashboards and even have fancy query languages to access and transform the data. Still performance data is a secret language only a couple of people understand. The more business becomes digital the more stakeholders are interested in this data including how it relates to business. Some of these people have never used a monitoring tool before. They have a question on their mind like “How is my application doing” but no id...