在JBoss 7.1上部署EJB

我正在部署一个非常简单的helloworld风格的EJB应用程序。 这样做我得到……

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) 

看起来我需要在某处添加一个include,我的代码很简单……

 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(""); MyUser user = (MyUser)emF.createEntityManager().createQuery("select * from myuser").getResultList().get(0); out.println("Username = " + user.getName()); out.print(""); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } 

Persistance.xml如下所示……

    EjbMySql model.MyUser   

modules / com / mysql / main / Modules.xml如下……

           

Standalone.xml有以下条目……

    jdbc:mysql://localhost:3306/ejbdb com.mysql  root root     com.mysql.jdbc.Driver     

在我的项目中,我在/WebContent/META-INF/services/mysql-connector-java-5.1.18-bin.jar中有MySQL jar。

有没有人有任何想法?

谢谢!

编辑:试过……

  jdbc:mysql://localhost:3306/ejbdb com.mysql.jdbc.Driver  root root  

回来时出现同样的错误。

/standalone/configuration/standalone.xml找到标记,并在元素中添加以下内容:

   jdbc:mysql://localhost:3306/DATABASE_NAME com.mysql  USERNAME PASSWORD     com.mysql.jdbc.jdbc2.optional.MysqlXADataSource    

适当地替换DATABASE_NAME,USERNAME和PASSWORD。

元素内添加以下内容:

  com.mysql.jdbc.jdbc2.optional.MysqlXADataSource  

现在,转到/modules并创建路径com/mysql/main将驱动程序的jar放在那里(例如mysql-connector-java-5.1.18-bin.jar)并使用以下命令创建文件module.xml内容:

            

这应该够了吧。

我认为您需要将standalone.xml中的数据源与驱动程序模块关联,如下例所示(取自此处 :

    jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 h2   sa sa        org.h2.jdbcx.JdbcDataSource   com.mysql.jdbc.jdbc2.optional.MysqlXADataSource    

这里的数据源中的driver-element引用drivers-element中的驱动程序定义,该定义本身引用了您定义的模块和类。 这就是我使用它的方式,它适用于JBoss 7.1。

在JBoss 7中,为了创建数据源和安装JDBC驱动程序,更改了一些配置细节。 请参阅本迁移指南 ,“定义数据源”和“安装JDBC驱动程序”部分。

是驱动程序的版本。 更改新版本。 相信,只有它! 我将驱动程序mysql-connector-java-5.0.4-bin.jar更改为mysql-connector-java-5.1.25-bin.jar,然后问题解决了。