之前项目使用Jboss作为应用服务器,现在重新总结或补充相关的知识。
Jboss4 安装及配置(具体版本Jboss-4.2.3.GA)
下载Jboss-4.2.3.GA并解压到电脑的某个目录里中(假设解压到 D:\server下面),可以看一下jboss服务器安装目录有那些内容
启动jboss服务器:找到 bin 目录中的 run.bat 文件,双击将以windows命令行的方式启动jboss服务器
该文件的完整路径为: D:\server\jboss-4.2.3.GA\bin\run.bat
1、安装jdk,设置JAVA环境变量: JAVA_HOME,PATH 等内容。
2、配置jboss环境:添加JBOSS_HOME 环境变量(系统变量)。
JBOSS_HOME为JBoss安装目录,例如:D:\server\Jboss-4.2.3.GA
3、注册windows服务器项
如果不需要安装windows服务器项(一般用作开发环境配置操作或者启动windows命令行方式操作),可以忽略此项及后面的操作步骤。
如果在本地开发环境的话,可以不需要注册到服务服务项,因为要调试测试程序要经常关闭启动jboss服务器(一般都是添加到开发工具中进行启动调试程序等)
一般用于测试或生产服务器,一般会将jboss服务器安装到windows服务项来启动与关闭,而不是启动命令行的方式运行jboss服务器(命令行方式启动弊端:窗口不小心关闭了即意味着服务器被关闭,电脑重启后需要重新运行run.bat文件启动)
操作步骤如下:
- 在jboss4配置windows服务项,需要下载JavaService-2.0.10.zip,解压缩,把其下的JavaService.exe拷贝到
D:\server\Jboss-4.2.3.GA\bin下
- 用命令行工具,切换到D:\server\Jboss-4.2.3.GA\bin目录,输入下面内容:
JavaService.exe -install JBoss %JAVA_HOME%\jre\bin\server\jvm.dll -Djava.class.path="%JBOSS_HOME%\bin\run.jar;%JAVA_HOME%\lib\tools.jar" -Xms512M -Xmx1024M -start org.jboss.Main -stop org.jboss.Main -method systemExit -out "%JBOSS_HOME%\server\default\log\stdout.log" -err "%JBOSS_HOME%\server\default\log\stderr.log" -current "%JBOSS_HOME%\bin" -overwrite -startup 6
4、启动、停止jboss服务器
jboss注册windows服务项成功后,可以使用以下两种方式进行启动与停止jboss服务器了:
- 通过命令行的方式启动与停止:通过输入“net start JBoss”、“net stop JBoss” 可以进行服务的启动和停止。
- 找到到控制面板 》管理工具 》服务:通过windows注册服务项列表中找到服务器名称为 ”JBOSS“ 的服务,鼠标右键可以执行启动和停止等操作。
下图是windows命令行方式启动停止 jboss 服务器
5、卸载jboss在windows中注册的服务项
用命令行工具,切换到D:\server\Jboss-4.2.3.GA\bin目录,输入下面内容:
JavaService.exe -uninstall JBoss
可以看到,提示服务被卸载。
Jboss5 安装及配置(具体版本Jboss-5.0.0.GA)
下载Jboss-5.0.0.GA、安装配置jdk步骤略,从安装目录中可以 看到jboss5.0.0已经自带windows服务项注册程序
Jboss-5.0.0.GA安装(注册)卸载(删除)Windows服务项:
1、安装(注册)windows服务项:
打开windows命令行, 切换到 D:\server\Jboss-5.0.0.GA\bin目录,输入:service.bat install
系统会提示:Service JBoss Application Server 5.0 installed,表示JBoss5.0的服务注册成功。
2、卸载(删除)Windows服务项:
打开windows命令行, 切换到 D:\server\Jboss-5.0.0.GA\bin目录,输入:service.bat uninstall
系统会提示:Service JBoss Application Server 5.0 removed。
3、启动、停止jboss服务器
此操作和 Jboss4 安装及配置(具体版本Jboss-4.2.3.GA)的 第 4 项操作相同
jboss服务器的JNDI配置
项目cros :
环境:
jboss-4.2.3.GA
spring2.5.6
去jboss官方下载jboss服务器,http://www.jboss.org/jbossas/downloads/。建议下载jboss-4.2.3.GA这个版本的jboss,个人感觉还是这个版本的jboss比较稳定
解压下载下来的jboss压缩文件,笔者解压到D:\jboss-4.2.3.GA
笔者以oracle数据库来说明如何在jboss下配置jndi 以及整合spring
拷贝oracle-ds文件
去D:\jboss-4.2.3.GA\docs\examples\jca目录下拷贝oracle-ds文件到D:\jboss-4.2.3.GA\server\default\deploy目录下改名即可
大致内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>KBSDS</jndi-name>
<connection-url>jdbc:oracle:thin:@192.168.4.243:1521:future</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<use-java-context>false</use-java-context>
<user-name>knowledge</user-name>
<password>knowledge</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
jndi-name:不用多说了,当然是为该jndi取一名称这里使用KBSDS
其他几个属性不做过多解释
use-java-context:属性默认为true,如未配置该属性或该属性配置为true,那么jboss在启动的时候jndi的名称前会加上java: 这里我们jndi的名称为KBSDS,那么未配置该属性或该属性为true的话,你在spring中使用jndi时指定的jndiName就应该为java:KBSDS,若配置为false,那么jboss服务器不会为你加上java: 你在spring中jndiName应当配置为KBSDS,即与jndi-name属性值等同。这里为了方便期间设置该属性为false
拷贝oracle驱动
拷贝oracle驱动 class12.jar到jboss的如下目录
D:\jboss-4.2.3.GA\lib
D:\jboss-4.2.3.GA\server\default\lib
切记数据库驱动拷贝到D:\jboss-4.2.3.GA\server\default\lib目录下,否则即使你jndi配置的再怎么正确都会报如下错误,该错误在jboss启动的时候并不会报出,只有在正式遇数据库进行交互的时候才会报此错误,大概错误是这样的。此处花了好长时间才解决。
org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is org.jboss.util.NestedSQLException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver class specified for URL: class: oracle.jdbc.driver.OracleDriver, url: jdbc:oracle:thin:@192.168.4.243:1521:future); - nested throwable: (org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver class specified for URL: class: oracle.jdbc.driver.OracleDriver, url: jdbc:oracle:thin:@192.168.4.243:1521:future))
org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:238)
org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:374)
org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:263)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy67.managerLogin(Unknown Source)
com.future.knowledges.action.ManagerAction.execute(ManagerAction.java:62)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
配置spring配置文件:
在applicationContext.xml中配置如下信息:
<bean name="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>KBSDS</value>
</property>
</bean>
此种方式指定jndiName为KBSDS并未java:前缀,需要你手动在jboss的jndi配置文件中设置use-java-context属性为fasle,若未设置该属性或设置为true那么此处应该是这样子的
<bean name="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:KBSDS</value>
</property>
</bean>
需要你手动加上java:前缀后面跟jboss下配置的jndi的名称
其实这里的配置主要是根据jboss服务器启动时控制台给出的信息来配置的
设置use-java-context为false时控制台给出的jndi信息
11:13:34,250 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=JmsXA' to JNDI name 'java:JmsXA'
11:13:34,359 INFO [WrapperDataSourceService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=KBSDS' to JNDI name 'KBSDS'
11:13:34,406 INFO [TomcatDeployer] deploy, ctxPath=/KBS, warUrl=/deploy/KBS.war/
11:13:34,781 INFO [[/KBS]] Initializing Spring root WebApplicationContext
设置use-java-context为true或不设置时控制台给出的jndi信息
11:25:15,921 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=JmsXA' to JNDI name 'java:JmsXA'
11:25:15,984 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=KBSDS' to JNDI name 'java:KBSDS'
11:25:16,031 INFO [TomcatDeployer] deploy, ctxPath=/KBS, warUrl=/deploy/KBS.war/
注意对比两次控制台分别打印的信息,从中很容易发现,其实就是use-java-context属性的作用。关于该属性,大家可以去参看jboss的官方文档。这里就不细说了。
到此jboss下配置jndi 以及整合spring已经成功配置起来了,接下来就是一些细化了,大家可以去查询jboss的关于jndi配置的文档。
其实在jboss下配置jndi远远比在tomcat下配置jndi简单的多。
总结下来就这几步
拷贝jndi模板到server\default\deploy目录下,并做修改,这里面模板文件均是以数据库类型-ds.xml命名的。
拷贝数据库驱动到\server\default\lib目录和jboss安装目录\lib下即可。
原文链接:https://blog.youkuaiyun.com/henry_yqh/article/details/8365434
下面给大家看一下jboss服务器中提供常用的数据的JNDI模板文件
SQL Server数据库:mssql-ds.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- -->
<!-- ===================================================================== -->
<!-- $Id: mssql-ds.xml 71535 2008-04-01 07:05:03Z adrian@jboss.org $ -->
<!-- ======================================================================-->
<!-- New ConnectionManager setup for Microsoft SQL Server 2005 driver -->
<!-- Further information about the Microsoft JDBC Driver version 1.1 -->
<!-- can be found here: -->
<!-- http://msdn2.microsoft.com/en-us/library/aa496082.aspx -->
<!-- ===================================================================== -->
<datasources>
<local-tx-datasource>
<jndi-name>MSSQLDS</jndi-name>
<connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<user-name>x</user-name>
<password>y</password>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>MS SQLSERVER2000</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
mysql数据库:mysql-ds.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: mysql-ds.xml 71535 2008-04-01 07:05:03Z adrian@jboss.org $ -->
<!-- Datasource config for MySQL using 3.0.9 available from:
http://www.mysql.com/downloads/api-jdbc-stable.html
-->
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://mysql-hostname:3306/jbossdb</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>x</user-name>
<password>y</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<!-- should only be used on drivers after 3.22.1 with "ping" support
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
-->
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
oracle数据库: oracle-ds.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- -->
<!-- ===================================================================== -->
<!-- $Id: oracle-ds.xml 71535 2008-04-01 07:05:03Z adrian@jboss.org $ -->
<!-- ==================================================================== -->
<!-- Datasource config for Oracle originally from Steven Coy -->
<!-- ==================================================================== -->
<datasources>
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@youroraclehost:1521:yoursid</connection-url>
<!--
Here are a couple of the possible OCI configurations.
For more information, see http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/java.920/a96654/toc.htm
<connection-url>jdbc:oracle:oci:@youroracle-tns-name</connection-url>
or
<connection-url>jdbc:oracle:oci:@(description=(address=(host=youroraclehost)(protocol=tcp)(port=1521))(connect_data=(SERVICE_NAME=yourservicename)))</connection-url>
Clearly, its better to have TNS set up properly.
-->
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>x</user-name>
<password>y</password>
<!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
<!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name-->
<!-- Checks the Oracle error codes and messages for fatal errors -->
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool - the OracleValidConnectionChecker is prefered
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>