I am trying to create an Java Enterprise Application using Eclipse IDE with JBoss 7.0 Server. I already had experience developing such applications but using NetBeans IDE. The main problem for me are the differences between these two IDEs. Currently, Eclipse's giving me headaches about adding JPA to EAR.
I already configured Enterprise Application (EAR) that has two containers:
-- EJB
-- WAR
Those two are configured to work together (Java Build Paths, Manifest and Deployment assembly are set for those two) so when I run EAR on the server it all works properly.
Problem:
The next thing I would like to configure is JPA. I want to add JPA container to my EAR and so I did. I've created JPA 2.1 (with EclipseLink 2.5.x and MySQL), added to EAR, I've add the changes to EJB project (right click on project->properties->deployment assembly->add jpa project).
After this point when I try to run EAR again I got HTTP Status 404 - The requested resource (/eLearningJJ-war/) is not available
and my stacktrace looks like as down bellow.
Punch line
I wonder do I have to configure something extra in order to avoid this error after adding JPA to my EAR project.
If you need more details about the project please let me know, Thank you.
Console
18:51:41,833 INFO [org.jboss.modules] JBoss Modules version 1.0.1.GA
18:51:42,224 INFO [org.jboss.msc] JBoss MSC version 1.0.0.GA
18:51:42,280 INFO [org.jboss.as] JBoss AS 7.0.1.Final "Zap" starting
18:51:43,186 WARN [org.jboss.as] No security realm defined for native management service, all access will be unrestricted.
18:51:43,202 INFO [org.jboss.as] creating http management service using network interface (management) port (9990)
18:51:43,202 WARN [org.jboss.as] No security realm defined for http management service, all access will be unrestricted.
18:51:43,217 INFO [org.jboss.as.logging] Removing bootstrap log handlers
18:51:43,233 INFO [org.jboss.as.connector.subsystems.datasources] (Controller Boot Thread) Deploying JDBC-compliant driver class org.h2.Driver (version 1.2)
18:51:43,280 INFO [org.jboss.as.clustering.infinispan.subsystem] (Controller Boot Thread) Activating Infinispan subsystem.
18:51:43,452 INFO [org.jboss.as.naming] (Controller Boot Thread) Activating Naming Subsystem
18:51:43,468 INFO [org.jboss.as.osgi] (Controller Boot Thread) Activating OSGi Subsystem
18:51:43,468 INFO [org.jboss.as.naming] (MSC service thread 1-6) Starting Naming Service
18:51:43,530 INFO [org.jboss.as.security] (Controller Boot Thread) Activating Security Subsystem
18:51:43,546 INFO [org.jboss.remoting] (MSC service thread 1-3) JBoss Remoting version 3.2.0.Beta2
18:51:43,561 INFO [org.xnio] (MSC service thread 1-3) XNIO Version 3.0.0.Beta3
18:51:43,593 INFO [org.xnio.nio] (MSC service thread 1-3) XNIO NIO Implementation Version 3.0.0.Beta3
18:51:43,999 INFO [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-2) The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.8.0\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;native;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\MinGW\bin;C:\msys\1.0\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;.
18:51:43,999 INFO [org.jboss.as.ee] (Controller Boot Thread) Activating EE subsystem
18:51:44,452 INFO [org.jboss.as.remoting] (MSC service thread 1-4) Listening on /127.0.0.1:9999
18:51:44,585 INFO [org.jboss.as.jmx.JMXConnectorService] (MSC service thread 1-6) Starting remote JMX connector
18:51:44,675 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-2) Starting Coyote HTTP/1.1 on http--127.0.0.1-8080
18:51:44,847 INFO [org.jboss.as.connector] (MSC service thread 1-6) Starting JCA Subsystem (JBoss IronJacamar 1.0.3.Final)
18:51:44,907 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-5) Bound data source [java:jboss/datasources/ExampleDS]
18:51:44,927 INFO [org.jboss.as.deployment] (MSC service thread 1-1) Started FileSystemDeploymentService for directory C:\Users\Milan\jboss-as-7.0.1.Final\standalone\deployments
18:51:44,975 INFO [org.jboss.as] (Controller Boot Thread) JBoss AS 7.0.1.Final "Zap" started in 3626ms - Started 93 of 148 services (55 services are passive or on-demand)
18:51:45,022 INFO [org.jboss.as.deployment] (DeploymentScanner-threads - 1) Found eLearningJJ-ear.ear in deployment directory. To trigger deployment create a file called eLearningJJ-ear.ear.dodeploy
18:51:45,100 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "eLearningJJ-ear.ear"
18:51:45,334 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "eLearningJJ-war.war"
18:51:45,334 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) Starting deployment of "eLearningJJ-ejb.jar"
18:51:45,897 WARN [org.jboss.as.server.deployment] (MSC service thread 1-3) Class Path entry in "/C:/Users/Milan/jboss-as-7.0.1.Final/standalone/deployments/eLearningJJ-ear.ear/lib/testjpa.jar" does not point to a valid jar for a Class-Path reference.
18:51:46,101 INFO [org.jboss.jpa] (MSC service thread 1-3) read persistence.xml for testjpa
18:51:46,458 WARN [org.jboss.as.server.deployment.service-loader] (MSC service thread 1-4) Encountered invalid class name "com.sun.faces.vendor.Tomcat6InjectionProvider:org.apache.catalina.util.DefaultAnnotationProcessor" for service type "com.sun.faces.spi.injectionprovider"
18:51:46,459 WARN [org.jboss.as.server.deployment.service-loader] (MSC service thread 1-4) Encountered invalid class name "com.sun.faces.vendor.Jetty6InjectionProvider:org.mortbay.jetty.plus.annotation.InjectionCollection" for service type "com.sun.faces.spi.injectionprovider"
18:51:46,526 INFO [org.jboss.as.jpa] (MSC service thread 1-4) added javax.persistence.api, javaee.api, org.jboss.as.jpa, org.javassist dependencies to eLearningJJ-ear.ear
18:51:46,528 INFO [org.jboss.as.jpa] (MSC service thread 1-4) added (default provider) org.hibernate dependency to application deployment (since 1 PU(s) didn't specify jboss.as.jpa.providerModule)
18:51:46,528 INFO [org.jboss.as.jpa] (MSC service thread 1-4) added org.hibernate dependency to application deployment
18:51:46,533 INFO [org.jboss.as.jpa] (MSC service thread 1-4) added javax.persistence.api, javaee.api, org.jboss.as.jpa, org.javassist dependencies to eLearningJJ-ejb.jar
18:51:46,533 INFO [org.jboss.as.jpa] (MSC service thread 1-7) added javax.persistence.api, javaee.api, org.jboss.as.jpa, org.javassist dependencies to eLearningJJ-war.war
18:51:46,704 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-8) JNDI bindings for session bean named UserTest in deployment unit subdeployment "eLearningJJ-ejb.jar" of deployment "eLearningJJ-ear.ear" are as follows:
java:global/eLearningJJ-ear/eLearningJJ-ejb/UserTest!com.test.UserTest
java:app/eLearningJJ-ejb/UserTest!com.test.UserTest
java:module/UserTest!com.test.UserTest
java:global/eLearningJJ-ear/eLearningJJ-ejb/UserTest!com.test.UserTestLocal
java:app/eLearningJJ-ejb/UserTest!com.test.UserTestLocal
java:module/UserTest!com.test.UserTestLocal
18:51:46,704 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-8) JNDI bindings for session bean named UserStateless in deployment unit subdeployment "eLearningJJ-ejb.jar" of deployment "eLearningJJ-ear.ear" are as follows:
java:global/eLearningJJ-ear/eLearningJJ-ejb/UserStateless!com.elearningjj.beans.UserStatelessLocal
java:app/eLearningJJ-ejb/UserStateless!com.elearningjj.beans.UserStatelessLocal
java:module/UserStateless!com.elearningjj.beans.UserStatelessLocal
java:global/eLearningJJ-ear/eLearningJJ-ejb/UserStateless!com.elearningjj.beans.UserStateless
java:app/eLearningJJ-ejb/UserStateless!com.elearningjj.beans.UserStateless
java:module/UserStateless!com.elearningjj.beans.UserStateless
18:51:48,392 INFO [org.apache.catalina.core.StandardContext] (MSC service thread 1-2) The listener "com.sun.faces.config.ConfigureListener" is already configured for this context. The duplicate definition has been ignored.
18:51:48,399 INFO [org.apache.catalina.core.StandardContext] (MSC service thread 1-2) The listener "com.sun.faces.config.ConfigureListener" is already configured for this context. The duplicate definition has been ignored.
18:51:48,712 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-2) Initializing Mojarra 2.0.4 (FCS b09-jbossorg-4) for context '/eLearningJJ-war'
18:51:53,821 INFO [org.jboss.web] (MSC service thread 1-2) registering web context: /eLearningJJ-war
18:51:54,055 INFO [org.jboss.as.server.controller] (DeploymentScanner-threads - 2) Deployment of "eLearningJJ-ear.ear" was rolled back with failure message {"Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"eLearningJJ-ear.ear#testjpa\" missing [ jboss.data-source.java:/ ]"]}
18:51:54,180 INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) Stopped deployment eLearningJJ-ejb.jar in 131ms
18:51:54,195 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) Stopped deployment eLearningJJ-war.war in 140ms
18:51:54,195 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) Stopped deployment eLearningJJ-ear.ear in 144ms
18:51:54,195 ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 1) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"Services with missing/unavailable dependencies" => ["jboss.persistenceunit.\"eLearningJJ-ear.ear#testjpa\" missing [ jboss.data-source.java:/ ]"]}}}
Solution
The main problem was improperly configured JPA's persistance.xml file. In my case, concrete problem was related to the jta-data-source which wasn't properly configured.
The solution for this is checking the JBoss Administration Console for more details about Datasource Configurations, Registered Datasources, etc. Regarding to this source of information, my persistance.xml file looks like down bellow:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" 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">
<persistence-unit name="eLearningJJ-jpa">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>