温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

雪山飞鹄

温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

BlogJava 首页 新随笔 联系 聚合 管理
  215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks

#

原文:http://news.cnblogs.com/n/74858/
速查表
是帮你记住东西的有效工具。Web设计师和开发者经常使用的快捷键简表会使他们在网上的工作效率大大提高。

事实上,速查表就是来帮助我们把日常中最常用到的信息聚集起来,方便使用,使我们做工作时更有效率。有了它们,免去了你的大脑花额外时间去记忆它们的烦恼——你只需要打开简表,马上能查到你想要的信息。

这篇文章里,你可以看到最实用的HTML,CSS,JavaScript速查表,它们可以当作参考资料,备忘录,能帮助你以最快的速度找到想要的信息。

看看这些简表是不是你想要的,请在文章下面留下你的建议,谢谢!

HTML

HTML帮助手册

HTML速查手册

HTML特殊字符速查表

Dreamweaver

Dreamweaver快速参考指导

CSS

CSS 3 速查表

Blueprint CSS

YUI Grid CSS

CSS 速记简表

CSS速查表(V2)

CSS速记表

CSS2参考指导(V2)

实用CSS速查表

Javascript

jQuery 1.4.2 直观速查表

JavaScript 速查表

JavaScript参考单

JavaScript真经

常用DOM方法

JavaScript快速参考单

Mootools 1.2速查表

jQuery速查表

Prototype速查表

希望你能喜欢我收集到的这些速查表,并请分享给你的做开发工作的朋友们。

[英文出处]:Most Useful Cheat Sheet For HTML, CSS and Javascript

posted @ 2010-09-29 16:46 雪山飞鹄 阅读(2027) | 评论 (3)编辑 收藏

posted @ 2010-09-29 16:36 雪山飞鹄 阅读(217) | 评论 (0)编辑 收藏

     摘要: 本文电子版文档下载 State、Decision 、Task活动详解: State表示一个等待状态。当流程实例执行到state节点时会暂停下来(处于等待状态),流程的执行会在外部触发器被调用之前一直等待(会暂停) Decision条件判断节点,表示在多条路径中选择一条。一个 decision 活动拥有很多个传出的转移。流程的执行到达一个 decision 活动时,会自动进行计算来决定采用哪...  阅读全文
posted @ 2010-09-29 13:52 雪山飞鹄 阅读(4083) | 评论 (0)编辑 收藏

     摘要: 最近开始接触JBPM4,网上关于JBPM4的资料少之又少。大多是关于JBPM3的。而4跟3的API差异也较大。在学习过程中做了一点关于JBPM4的笔记。强烈期望JBPM4达人能贡献一些JBPM4方面的学习资料或视频教程或出版发行JBPM4的书籍之类的。 本文电子版下载 流程定义引擎: ProcessEngine processEngine; 获取: ...  阅读全文
posted @ 2010-09-28 16:44 雪山飞鹄 阅读(4695) | 评论 (3)编辑 收藏

因为tomcat6下的el-api.jar与jBPM-4使用的juel.jar产生冲突。

解决方法一:改用tomcat-5.5。

解决方法二:将juel.jar, juel-engine.jar, juel-impl.jar三个文件复制到tomcat的lib目录下,并删除tomcat6下的el-api.jar即可解决。

posted @ 2010-09-27 14:56 雪山飞鹄 阅读(490) | 评论 (0)编辑 收藏

在运行jbpm4.3中例子时,若数据库选择为mysql,应注意修改jbpm.hibernate.cfg.xml中mysql的方言为org.hibernate.dialect.MySQL5InnoDBDialect
posted @ 2010-09-26 14:53 雪山飞鹄 阅读(536) | 评论 (0)编辑 收藏

Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句梳理
温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!
最近把平时在项目中常用到的数据库分页sql总结了下。大家可以贴出分页更高效的sql语句。
sqlserver分页
 第一种分页方法
 需用到的参数:
 pageSize 每页显示多少条数据
 pageNumber 页数 从客户端传来
 totalRecouds 表中的总记录数 select count (*) from 表名
 totalPages 总页数
 totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
 pages 计算前pages 条数据
 pages= pageSize*(pageNumber-1)
 SQL语句:
 select top pageSize * from 表名 where id  not in (select top pages id from 表名 order by id) order by id
 第二种分页方法
 pageSize 每页显示多少条数据
 pageNumber 页数 从客户端传来
 pages=pageSize*(pageNumber-1)+1
 select top pageSize * from 表名 where id>=(select max(id) from (select top pages id from 表名 order by id asc ) t )

mysql分页
 需用到的参数:
 pageSize 每页显示多少条数据
 pageNumber 页数 从客户端传来
 totalRecouds 表中的总记录数 select count (*) from 表名
 totalPages 总页数
 totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
 pages 起始位置
 pages= pageSize*(pageNumber-1)
 SQL语句:
 select * from 表名 limit pages, pageSize;
 mysql 分页依赖于关键字 limit 它需两个参数:起始位置和pageSize
 起始位置=页大小*(页数-1)
 起始位置=pageSize*(pageNumber -1)

oracle分页
 pageSize 每页显示多少条数据
 pageNumber 页数 从客户端传来
 totalRecouds 表中的总记录数 select count (*) from 表名
 totalPages 总页数
 totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/pageSize+1
 startPage 起始位置
 startPage= pageSize*(pageNumber-1)+1
 endPage=startPage+pageSize
 SQL语句
 select a.* from
 (
   select rownum num ,t.* from  表名 t where 某列=某值 order by id asc
 )a
 where a.num>=startPage and a.num<endPage

db2分页
 int startPage=1  //起始页
 int endPage;     //终止页
 int pageSize=5;  //页大小
 int pageNumber=1 //请求页

 startPage=(pageNumber-1)*pageSize+1
 endPage=(startPage+pageSize);


 SQL语句
 select * from (select 字段1,字段2,字段3,字段4,字段5,rownumber() over(order by 排序字段 asc ) as rowid  from 表名 )as a where a.rowid >= startPage AND a.rowid <endPage

access分页
 pageSize 每页显示多少条数据
 pageNumber 页数 从客户端传来
 pages=pageSize*(pageNumber-1)+1
 SQL语句
 select top pageSize * from 表名 where id>=(select max(id) from (select top pages id from 表名 order by id asc ) t )


 温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

posted @ 2010-09-16 16:12 雪山飞鹄 阅读(4325) | 评论 (1)编辑 收藏

依赖的JAR
    cxf-2.2.10.jar
    jetty-6.1.21.jar
    jetty-util-6.1.21.jar
    servlet-2_5-api.jar
    wsdl4j-1.6.2.jar
    XmlSchema-1.4.5.jar
创建一个普通的Java工程即可

创建webservice接口
package com.cxf.interfaces;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface HelloWorldServiceInf {
    
    String sayHello(@WebParam(name
="username") String username);
    
}
发布和调用webservice
        方法一
发布webservice
package com.cxf.impl;

import javax.jws.WebService;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.cxf.interfaces.HelloWorldServiceInf;

@WebService(endpointInterface
="com.cxf.interfaces.HelloWorldServiceInf",serviceName="helloWorldService")
public class Server implements HelloWorldServiceInf {

    
public String sayHello(String username) {
        
return "Hello,"+username;
    }

    
    
public static void main(String[] args) {
        Server impl
=new Server();
        JaxWsServerFactoryBean factoryBean
=new JaxWsServerFactoryBean();
        factoryBean.setAddress(
"http://localhost:9000/hello");
        factoryBean.setServiceClass(HelloWorldServiceInf.
class);
        factoryBean.setServiceBean(impl);
        factoryBean.getInInterceptors().add(
new LoggingInInterceptor());
        factoryBean.getOutInterceptors().add(
new LoggingOutInterceptor());
        factoryBean.create();
    }
    
}
wsdl描述文件
  <?xml version="1.0" ?> 
<wsdl:definitions name="HelloWorldServiceInfService" targetNamespace="http://interfaces.cxf.com/" xmlns:ns1="http://schemas.xmlsoap.org/wsdl/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://interfaces.cxf.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://interfaces.cxf.com/" xmlns:tns="http://interfaces.cxf.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  
<xsd:element name="sayHello" type="tns:sayHello" /> 
<xsd:complexType name="sayHello">
<xsd:sequence>
  
<xsd:element minOccurs="0" name="username" type="xsd:string" /> 
  
</xsd:sequence>
  
</xsd:complexType>
  
<xsd:element name="sayHelloResponse" type="tns:sayHelloResponse" /> 
<xsd:complexType name="sayHelloResponse">
<xsd:sequence>
  
<xsd:element minOccurs="0" name="return" type="xsd:string" /> 
  
</xsd:sequence>
  
</xsd:complexType>
  
</xsd:schema>
  
</wsdl:types>
<wsdl:message name="sayHelloResponse">
  
<wsdl:part element="tns:sayHelloResponse" name="parameters" /> 
  
</wsdl:message>
<wsdl:message name="sayHello">
  
<wsdl:part element="tns:sayHello" name="parameters" /> 
  
</wsdl:message>
<wsdl:portType name="HelloWorldServiceInf">
<wsdl:operation name="sayHello">
  
<wsdl:input message="tns:sayHello" name="sayHello" /> 
  
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse" /> 
  
</wsdl:operation>
  
</wsdl:portType>
<wsdl:binding name="HelloWorldServiceInfServiceSoapBinding" type="tns:HelloWorldServiceInf">
  
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
<wsdl:operation name="sayHello">
  
<soap:operation soapAction="" style="document" /> 
<wsdl:input name="sayHello">
  
<soap:body use="literal" /> 
  
</wsdl:input>
<wsdl:output name="sayHelloResponse">
  
<soap:body use="literal" /> 
  
</wsdl:output>
  
</wsdl:operation>
  
</wsdl:binding>
<wsdl:service name="HelloWorldServiceInfService">
<wsdl:port binding="tns:HelloWorldServiceInfServiceSoapBinding" name="HelloWorldServiceInfPort">
  
<soap:address location="http://localhost:9000/hello" /> 
  
</wsdl:port>
  
</wsdl:service>
  
</wsdl:definitions>
客户端调用
package com.cxf.client;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.cxf.interfaces.HelloWorldServiceInf;

public class Client {
    
public static void main(String[] args) {
        JaxWsProxyFactoryBean  factoryBean
=new JaxWsProxyFactoryBean();
        factoryBean.getInInterceptors().add(
new LoggingInInterceptor());
        factoryBean.getOutInterceptors().add(
new LoggingOutInterceptor());
        factoryBean.setServiceClass(HelloWorldServiceInf.
class);
        factoryBean.setAddress(
"http://localhost:9000/hello");
        HelloWorldServiceInf impl
=(HelloWorldServiceInf) factoryBean.create();
        System.out.println(impl.sayHello(
"张三"));
    }
}
        方法二
发布webservice
package com.cxf.impl;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

import com.cxf.interfaces.HelloWorldServiceInf;

@WebService(endpointInterface
="com.cxf.interfaces.HelloWorldServiceInf",serviceName="helloWorldService")
public class Server implements HelloWorldServiceInf {

    
public String sayHello(String username) {
        
return "Hello,"+username;
    }
    
public static void main(String[] args) {
        Server impl
=new Server();
        String address
="http://localhost:9000/hello";
        Endpoint.publish(address, impl);
    }
}
wsdl文件
  <?xml version="1.0" ?> 
<wsdl:definitions name="helloWorldService" targetNamespace="http://impl.cxf.com/" xmlns:ns1="http://interfaces.cxf.com/" xmlns:ns2="http://schemas.xmlsoap.org/wsdl/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.cxf.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  
<wsdl:import location="http://localhost:9000/hello?wsdl=HelloWorldServiceInf.wsdl" namespace="http://interfaces.cxf.com/" /> 
<wsdl:binding name="helloWorldServiceSoapBinding" type="ns1:HelloWorldServiceInf">
  
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
<wsdl:operation name="sayHello">
  
<soap:operation soapAction="" style="document" /> 
<wsdl:input name="sayHello">
  
<soap:body use="literal" /> 
  
</wsdl:input>
<wsdl:output name="sayHelloResponse">
  
<soap:body use="literal" /> 
  
</wsdl:output>
  
</wsdl:operation>
  
</wsdl:binding>
<wsdl:service name="helloWorldService">
<wsdl:port binding="tns:helloWorldServiceSoapBinding" name="ServerPort">
  
<soap:address location="http://localhost:9000/hello" /> 
  
</wsdl:port>
  
</wsdl:service>
  
</wsdl:definitions>
客户端调用
package com.cxf.client;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;

import com.cxf.interfaces.HelloWorldServiceInf;

public class Client {
    
//注意:此处http://interfaces.cxf.com/  来源于wsdl文件中namespace   <wsdl:import location="http://localhost:9000/hello?wsdl=HelloWorldServiceInf.wsdl" namespace="http://interfaces.cxf.com/" /> 

    
private static final QName SERVICE_NAME=new QName("http://interfaces.cxf.com/","HelloWorldServiceInf");//HelloWorldServiceInf接口类的名称
    private static final QName PORT_NAME=new QName("http://interfaces.cxf.com/""HelloWorldServiceInfPort");//HelloWorldServiceInfPort 接口类的名称+Port
    public static void main(String[] args) {
        String endPointAddress
="http://localhost:9000/hello";
        Service service
=Service.create(SERVICE_NAME);
        service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endPointAddress);
        HelloWorldServiceInf inf
=service.getPort(HelloWorldServiceInf.class);
        System.out.println(inf.sayHello(
"张三"));
    }
}
CXF根据wsdl文件动态调用WebService
package com.cxf.client;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class ClientFromWsdl {
    
    
public static void main(String[] args) throws Exception{
        JaxWsDynamicClientFactory dcf 
= JaxWsDynamicClientFactory.newInstance();
        org.apache.cxf.endpoint.Client client 
= dcf.createClient("http://localhost:9000/hello?wsdl");
        
//sayHello 为接口中定义的方法名称   张三为传递的参数   返回一个Object数组
        Object[] objects=client.invoke("sayHello""张三"); 
        
//输出调用结果
        System.out.println(objects[0].toString());
    }
}
下载工程代码
posted @ 2010-09-15 11:18 雪山飞鹄 阅读(36279) | 评论 (12)编辑 收藏

        最近由于项目需要,一直在学习OSGI,在学习OSGI的这段时间内,不断的接触到apache的一些优秀的开源项目,比如说FelixCXF等。Felix是Apache对OSGI R4规范的一个轻量级实现。你使用eclipse创建的plugin(插件)工程都是可以正常运行在Felix中的。前提是你创建bundle的时候选择标准选项这一栏。好了本篇文章主要是用来介绍CXF的,关于Felix就不再深入讨论了,有兴趣的可以自行去研究下。
        关于CXF,不做过多的解释。官方的解释已经够清楚了。相信大家之前在Java环境下创建webservice程序大多数选择的是xfire这个框架吧。后来好多专家不再推荐这个东东。都建议使用CXF。在未接触到CXF之前,本人一向喜欢用xfire这个框架来创建自己的webservice。还了,废话不多说,先来看个HelloWorld的程序,教大家快速上手。
        首先去Apache网站下载CXF所需要的jar,我本人下载是apache-cxf-2.2.10.zip这个包。这里为了方便期间创建一个java工程。啊?java工程,这有点不可思议了,不是要创建webservice吗?怎么是java工程?呵呵,这里就是CXF的神奇之处!
        添加必须的jar到你的classpath路径下。
        cxf-2.2.10.jar 核心jar
        jetty-6.1.21.jar 用来启动jetty服务器
        jetty-util-6.1.21.jar jetty辅助工具
        wsdl4j-1.6.2.jar wsdl支持工具
        XmlSchema-1.4.5.jar 
        这就是CXF的最小配置,以上jar包缺一不可
        创建一个接口
package com.cxf.service;

public interface HelloWorldCxfService {
    
    String sayHello(String username);
}
        创建该接口的实现类
package com.cxf.service;

public class HelloWorldCxfServiceImpl implements HelloWorldCxfService {

    
public String sayHello(String username) {
        
return "Hello,"+username;
    }
}
        发布webservice
package com.cxf.server;

import org.apache.cxf.frontend.ServerFactoryBean;

import com.cxf.service.HelloWorldCxfService;
import com.cxf.service.HelloWorldCxfServiceImpl;

public class Server {
    
    
public static void main(String[] args){
        HelloWorldCxfServiceImpl worldCxfServiceImpl
=new HelloWorldCxfServiceImpl();
        ServerFactoryBean factoryBean
=new ServerFactoryBean();
        factoryBean.setAddress(
"http://localhost:8080/hello");
        factoryBean.setServiceClass(HelloWorldCxfService.
class);
        factoryBean.setServiceBean(worldCxfServiceImpl);
        factoryBean.create();
    }
}
        运行Server,注意不要关闭,在控制台会打印如下信息:
2010-9-10 9:44:16 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.cxf.com/}HelloWorldCxfService from class com.cxf.service.HelloWorldCxfService
2010-9-10 9:44:16 org.apache.cxf.endpoint.ServerImpl initDestination
信息: Setting the server's publish address to be http://localhost:8080/hello
2010-09-10 09:44:16.296::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2010-09-10 09:44:16.296::INFO:  jetty-6.1.21
2010-09-10 09:44:16.390::INFO:  Started SelectChannelConnector@localhost:8080
        客户端调用
package com.cxf.server;

import org.apache.cxf.frontend.ClientProxyFactoryBean;

import com.cxf.service.HelloWorldCxfService;

public class Client {
    
    
public static void main(String[] args) {
        ClientProxyFactoryBean factoryBean
=new ClientProxyFactoryBean();
        factoryBean.setAddress(
"http://localhost:8080/hello");
        factoryBean.setServiceClass(HelloWorldCxfService.
class);
        HelloWorldCxfService worldCxfService
=(HelloWorldCxfService) factoryBean.create();
        System.out.println(worldCxfService.sayHello(
"张三"));
    }
}
        运行Client代码,控制台打印如下信息:
2010-9-10 9:46:58 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息: Creating Service {http://service.cxf.com/}HelloWorldCxfService from class com.cxf.service.HelloWorldCxfService
Hello,张三
        到此,我们的webservice,已经成功调用了。大家是不是迫不及待的想看下wsdl文件是啥样的呢?
在浏览器中输入http://localhost:8080/hello?wsdl,即可看到wsdl文件了。其中http://localhost:8080/hello部分为代码里指定的Address。
        wsdl文件信息:
  <?xml version="1.0" ?> 
<wsdl:definitions name="HelloWorldCxfService" targetNamespace="http://service.cxf.com/" xmlns:ns1="http://schemas.xmlsoap.org/wsdl/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.cxf.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://service.cxf.com/" xmlns:tns="http://service.cxf.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  
<xsd:element name="sayHello" type="tns:sayHello" /> 
<xsd:complexType name="sayHello">
<xsd:sequence>
  
<xsd:element minOccurs="0" name="arg0" type="xsd:string" /> 
  
</xsd:sequence>
  
</xsd:complexType>
  
<xsd:element name="sayHelloResponse" type="tns:sayHelloResponse" /> 
<xsd:complexType name="sayHelloResponse">
<xsd:sequence>
  
<xsd:element minOccurs="0" name="return" type="xsd:string" /> 
  
</xsd:sequence>
  
</xsd:complexType>
  
</xsd:schema>
  
</wsdl:types>
<wsdl:message name="sayHelloResponse">
  
<wsdl:part element="tns:sayHelloResponse" name="parameters" /> 
  
</wsdl:message>
<wsdl:message name="sayHello">
  
<wsdl:part element="tns:sayHello" name="parameters" /> 
  
</wsdl:message>
<wsdl:portType name="HelloWorldCxfServicePortType">
<wsdl:operation name="sayHello">
  
<wsdl:input message="tns:sayHello" name="sayHello" /> 
  
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse" /> 
  
</wsdl:operation>
  
</wsdl:portType>
<wsdl:binding name="HelloWorldCxfServiceSoapBinding" type="tns:HelloWorldCxfServicePortType">
  
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> 
<wsdl:operation name="sayHello">
  
<soap:operation soapAction="" style="document" /> 
<wsdl:input name="sayHello">
  
<soap:body use="literal" /> 
  
</wsdl:input>
<wsdl:output name="sayHelloResponse">
  
<soap:body use="literal" /> 
  
</wsdl:output>
  
</wsdl:operation>
  
</wsdl:binding>
<wsdl:service name="HelloWorldCxfService">
<wsdl:port binding="tns:HelloWorldCxfServiceSoapBinding" name="HelloWorldCxfServicePort">
  
<soap:address location="http://localhost:8080/hello" /> 
  
</wsdl:port>
  
</wsdl:service>
  
</wsdl:definitions>
                
posted @ 2010-09-10 09:51 雪山飞鹄 阅读(5957) | 评论 (7)编辑 收藏

        环境:
                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下即可。
posted @ 2010-09-08 11:33 雪山飞鹄 阅读(6383) | 评论 (0)编辑 收藏

仅列出标题
共22页: First 上一页 9 10 11 12 13 14 15 16 17 下一页 Last