2012-02-28 13 views
5

Estoy implementando una aplicación EJB de estilo helloworld realmente simple. Al hacerlo me sale ...implementando EJB sobre JBoss 7.1

WARNING: -logmodule is deprecated. Please use the system property 'java.util.logging.manager' or the 'java.util.logging.LogManager' service loader. 
13:15:54,638 INFO [org.jboss.modules] JBoss Modules version 1.1.1.GA 
13:15:55,094 INFO [org.jboss.msc] JBoss MSC version 1.0.2.GA 
13:15:55,175 INFO [org.jboss.as] JBAS015899: JBoss AS 7.1.0.Final "Thunder" starting 
13:15:56,587 INFO [org.xnio] XNIO Version 3.0.3.GA 
13:15:56,592 INFO [org.jboss.as.server] JBAS015888: Creating http management service using socket-binding (management-http) 
13:15:56,602 INFO [org.xnio.nio] XNIO NIO Implementation Version 3.0.3.GA 
13:15:56,614 INFO [org.jboss.remoting] JBoss Remoting version 3.2.2.GA 
13:15:56,655 INFO [org.jboss.as.logging] JBAS011502: Removing bootstrap log handlers 
13:15:56,661 INFO [org.jboss.as.configadmin] (ServerService Thread Pool -- 26) JBAS016200: Activating ConfigAdmin Subsystem 
13:15:56,707 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 31) JBAS010280: Activating Infinispan subsystem. 
13:15:56,793 INFO [org.jboss.as.connector] (MSC service thread 1-3) JBAS010408: Starting JCA Subsystem (JBoss IronJacamar 1.0.7.Final) 
13:15:56,822 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 38) JBAS011800: Activating Naming Subsystem 
13:15:56,839 INFO [org.jboss.as.osgi] (ServerService Thread Pool -- 39) JBAS011940: Activating OSGi Subsystem 
13:15:56,881 INFO [org.jboss.as.security] (ServerService Thread Pool -- 44) JBAS013101: Activating Security Subsystem 
13:15:56,889 INFO [org.jboss.as.naming] (MSC service thread 1-1) JBAS011802: Starting Naming Service 
13:15:56,898 INFO [org.jboss.as.mail.extension] (MSC service thread 1-2) JBAS015400: Bound mail session [java:jboss/mail/Default] 
13:15:56,933 INFO [org.jboss.as.security] (MSC service thread 1-2) JBAS013100: Current PicketBox version=4.0.6.final 
13:15:56,989 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 48) JBAS015537: Activating WebServices Extension 
13:15:57,324 INFO [org.jboss.ws.common.management.AbstractServerConfig] (MSC service thread 1-2) JBoss Web Services - Stack CXF Server 4.0.1.GA 
13:15:57,501 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-4) Starting Coyote HTTP/1.1 on http--127.0.0.1-8080 
13:15:58,264 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-2) JBAS015012: Started FileSystemDeploymentService for directory /usr/bin/jboss-as-7.1.0.Final/standalone/deployments 
13:15:58,265 INFO [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on /127.0.0.1:4447 
13:15:58,265 INFO [org.jboss.as.remoting] (MSC service thread 1-3) JBAS017100: Listening on /127.0.0.1:9999 
13:15:58,272 INFO [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) JBAS015003: Found HelloWorld.war in deployment directory. To trigger deployment create a file called HelloWorld.war.dodeploy 
13:15:58,581 INFO [org.jboss.as.controller] (Controller Boot Thread) JBAS014774: Service status report 
JBAS014775: New missing/unsatisfied dependencies: 
     service jboss.jdbc-driver.com_mysql (missing) dependents: [service jboss.data-source.java:jboss/datasources/EjbMySql] 

13:15:58,589 ERROR [org.jboss.as] (Controller Boot Thread) JBAS015875: JBoss AS 7.1.0.Final "Thunder" started (with errors) in 4548ms - Started 131 of 204 services (2 services failed or missing dependencies, 70 services are passive or on-demand) 

Parece que tengo que añadir un include en algún lugar, mi código es muy simple ...

package server; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.ejb.EJB; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.PersistenceUnit; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import model.MyUser; 

/** 
* Servlet implementation class HelloServlet 
*/ 
@WebServlet("/HelloServlet") 
public class HelloServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 


    @EJB HelloBean bean; 
    @PersistenceUnit 
    EntityManagerFactory emF; 
    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public HelloServlet() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     out.print("<html><body>"); 
     MyUser user = (MyUser)emF.createEntityManager().createQuery("select * from myuser").getResultList().get(0); 
     out.println("Username = " + user.getName()); 
     out.print("</body></html>"); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 

} 

Persistance.xml se muestra a continuación ...

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="HelloWorld"> 
     <jta-data-source>EjbMySql</jta-data-source> 
     <class>model.MyUser</class> 
    </persistence-unit> 
</persistence> 

módulos/com/mysql/main/Modules.xml es la siguiente ...

<?xml version="1.0" encoding="UTF-8"?> 

<!-- 
    ~ JBoss, Home of Professional Open Source. 
    ~ Copyright 2010, Red Hat, Inc., and individual contributors 
    ~ as indicated by the @author tags. See the copyright.txt file in the 
    ~ distribution for a full listing of individual contributors. 
    ~ 
    ~ This is free software; you can redistribute it and/or modify it 
    ~ under the terms of the GNU Lesser General Public License as 
    ~ published by the Free Software Foundation; either version 2.1 of 
    ~ the License, or (at your option) any later version. 
    ~ 
    ~ This software is distributed in the hope that it will be useful, 
    ~ but WITHOUT ANY WARRANTY; without even the implied warranty of 
    ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
    ~ Lesser General Public License for more details. 
    ~ 
    ~ You should have received a copy of the GNU Lesser General Public 
    ~ License along with this software; if not, write to the Free 
    ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 
    ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org. 
    --> 

<module xmlns="urn:jboss:module:1.0" name="com.mysql.jdbc"> 
    <resources> 
    <resource-root path="mysql-connector-java-5.1.18-bin.jar"/> 
    </resources> 
    <dependencies> 
    <module name="javax.api"/> 
    </dependencies> 
</module> 

Standalone.xml tiene la siguiente entrada ...

<subsystem xmlns="urn:jboss:domain:datasources:1.0"> 
      <datasources> 
      <datasource jndi-name="java:jboss/datasources/EjbMySql" pool-name="EjbMySql" enabled="true" use-java-context="true"> 
       <connection-url>jdbc:mysql://localhost:3306/ejbdb</connection-url> 
       <driver>com.mysql</driver> 
       <security> 
        <user-name>root</user-name> 
        <password>root</password> 
       </security> 
      </datasource> 
    <drivers> 
      <driver name="com.mysql" module="com.mysql.jdbc"> <xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class> </driver> 
     </drivers> 
     </datasources> 
     </subsystem> 

En mi proyecto, tienen el tarro de MySQL en /WebContent/META-INF/services/mysql-connector-java-5.1.18-bin. jar

¿Alguien tiene alguna idea?

Gracias!

EDIT: Probado ...

<datasource jndi-name="java:jboss/datasources/EjbMySql" pool-name="EjbMySql" enabled="true" use-java-context="true"> 
        <connection-url>jdbc:mysql://localhost:3306/ejbdb</connection-url> 
        <driver>com.mysql.jdbc.Driver</driver> 
        <security> 
         <user-name>root</user-name> 
         <password>root</password> 
        </security> 

se vuelva con el mismo error.

+0

Intente cambiar el nombre del controlador a "com.mysql.jdbc.Driver". –

+0

intenté esto, pregunta actualizada, pero no solucionó nada: < – david99world

Respuesta

6

En <JBOSS_HOME>/standalone/configuration/standalone.xml busque la etiqueta <subsystem xmlns="urn:jboss:domain:datasources:1.0"> y agregue lo siguiente dentro del <datasources> elemento:

<datasources> 
    <datasource jndi-name="java:jboss/datasources/MysqlDS" pool-name="MysqlDS" enabled="true" use-java-context="true"> 
     <connection-url>jdbc:mysql://localhost:3306/DATABASE_NAME</connection-url> 
     <driver>com.mysql</driver> 
     <security> 
      <user-name>USERNAME</user-name> 
      <password>PASSWORD</password> 
     </security> 
    </datasource> 
    <drivers> 
     <driver name="com.mysql" module="com.mysql"> 
      <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> 
     </driver> 
    </drivers> 
</datasources> 

Reemplace DATABASE_NAME, USERNAME y PASSWORD de forma automática.

Dentro del elemento <drivers> agregar lo siguiente:.

<driver name="com.mysql" module="com.mysql"> 
    <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> 
</driver> 

Ahora, vaya a <JBOSS_HOME>/modules y crear la ruta com/mysql/main poner el tarro del conductor allí (por ejemplo, mysql-connector-java-5.1.18-bin.jar) y crear el archivo module.xml con el siguiente contenido:

<module xmlns="urn:jboss:module:1.1" name="com.mysql"> 

    <resources> 
     <resource-root path="mysql-connector-java-5.1.18-bin.jar"/> 
     <!-- Insert resources here --> 
    </resources> 
    <dependencies> 
     <module name="javax.api"/> 
     <module name="javax.transaction.api"/> 
     <module name="javax.servlet.api" optional="true"/> 
    </dependencies> 
</module> 

Que debe hacer el truco.

+0

Hice lo que me sugirió, pero me sale el error ... http://pastebin.com/5rRPnSKu y todo el XML es sintácticamente correcto, ya que se abre en cromo, etc. bien. standalone.xml es http://pastebin.com/S8esfvxC – david99world

+0

Debe colocar la etiqueta dentro del elemento . He editado mi respuesta – Efthymis

+0

, copié esto y todavía obtengo exactamente el mismo mensaje de error mate. JBAS014775: Nuevas dependencias faltantes/insatisfechas: servicio jboss.jdbc-driver.com_mysql (faltantes) dependientes: [servicio jboss.data-source.java:jboss/datasources/MysqlDS] – david99world

0

En JBoss 7, se cambiaron varios detalles de configuración para crear una fuente de datos e instalar un controlador JDBC. Eche un vistazo a esta migración guide, en las secciones "Definir la fuente de datos" e "Instalar el controlador JDBC".

+0

Ah, no tengo un directorio/server en mi jboss_home, tengo appclient, bin, bundles, docs, domain, modules, standalone, welcome-content – david99world

+0

Actualicé mi respuesta. Había olvidado que en JBoss 7 la estructura del directorio cambió bastante. –

+0

Ah, hasta donde puedo decir, todo debería ser correcto, el contenedor está en/webcontent/meta-inf/services según se requiera, el manifiesto y los archivos xml independientes también están actualizados. – david99world

3

creo que es necesario asociar el origen de datos en standalone.xml con el conductor del módulo, como en el siguiente ejemplo (tomado de here:

 <datasources> 
      <datasource jndi-name="java:jboss/datasources/ExampleDS" enabled="true" use-java-context="true" pool-name="H2DS"> 
       <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> 
       <driver>h2</driver> 
       <pool></pool> 
       <security> 
        <user-name>sa</user-name> 
        <password>sa</password> 
       </security> 
       <validation></validation> 
       <timeout></timeout> 
       <statement></statement> 
      </datasource> 
      <drivers> 
       <driver name="h2" module="com.h2database.h2"> 
        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 
       </driver> 
       <driver name="mysql" module="com.mysql.jdbc"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> 
      </drivers> 
     </datasources> 

El elemento conductor en fuentes de datos en el presente documento hace referencia a una definición de controlador el elemento del controlador, que en sí mismo hace referencia al módulo que definió y las clases. Así es como lo uso, y funciona para mí en JBoss 7.1.

+0

Hola, cambié mi código (como se puede ver desde arriba) para tener esto configurado en el standalone.xml pero lamentablemente todavía tiene el mismo problema. – david99world

+1

@ david99world De acuerdo con su module.xml, el nombre de su módulo es com.mysql, no el com.mysql.jdbc al que hace referencia en standalone.xml – ftr

+0

Estoy de acuerdo. para que coincida con

0

Es la versión del controlador. Cambiar por una nueva versión. ¡Crea, es solo eso! Cambié el controlador mysql-connector-java-5.0.4-bin.jar a mysql-connector-java-5.1.25-bin.jar, entonces el problema está resuelto.

Cuestiones relacionadas