数据专栏

智能大数据搬运工,你想要的我们都有

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

相关推荐: C++书箱及笔记 整理的DWR学习笔记 java基础学习笔记 Hpricot获得element的属性值 Eclipse精粹学习笔记 Hessian笔记 Tuxedo SALT读书笔记 BBY-Java笔记第二篇
推荐群组: 电脑DIY
更多相关推荐
SOA 花了一天的时间看AXIS 的DOC,做了个笔记。对文档中介绍的一些问题没搞定,有知道的请指点一下。
编程百科
2020-08-27 12:47:37
看了楼主的文章,受益了, 不过还是有两个问题------------------------------- 需要映射两个java对象,CustomerBo和AddressBo
java 对象可以通过xjc来生成。
或者自己定义(但需要增加相应的java注释,如@XmlAccessorType,@XmlType,这是给引擎使用的)
所以一般通过xjd自动生成 一个java对像要用两种工具生成吗,是什么工具,能不能告诉我全名啊,。 --------------------------------------- 别忘了生成相应的xsd,或者dtd文件, 这个东东要用什么东东成生, --------------------------------------- JAXBContext jc = JAXBContext.newInstance("mycompany.demo"); mycompany.demo是什么东东
编程百科
2020-08-27 12:47:24
相关推荐: 也谈SOA从面向构件开始 组件语言 黄柳青:中国软件的致命缺陷是什么! 论文研究-基于SOA的流程与数据关联模型研究.pdf SOA与构件的关联(一) SOA标准与构件技术的结合将提高软件生产效率 SOA WCF系列之浅析深究什么是SOA
推荐群组: Eclipse PlugIns&RCP&OSGI
更多相关推荐
SOA
普元gocom社区“也谈SOA从面向构件开始”一文提到:
url: http://gocom.primeton.com/blog1180_35.htm?referer=techtargetwsprimeton
############################################################################
面向构件的概念着眼于软件的构造,其语义内涵包括:
1、层次化。软件呈现层次化构造,整体可以由一系列有内在结构的器官,即构件,构成。而构件可以由更小的构件构成。
2、可复用。这些构件可以在不同的软件中以相同的形式出现,完成大致相同的功能。
SOA概念着眼于软件的功能,其语义内涵包括:
1、层次化。软件的功能呈现层次化复合,综合功能由单项功能复合而成,复杂功能由简单功能复合而成。
2、可外化。一个软件需要的功能可以由另一个软件提供。
由于“功能外化”可以看作是互联网时代功能复用的一种形式,面向构件与SOA完全同构。
因此,我们说SOA从面向构件开始,就是SOA通过面向构件去实现,因为面向构件是SOA的自然实现方式。
############################################################################
读后,个人分析如下:
SOA架构体系层次结构(参见 对SOA和目前业成熟应用的JavaEE应用方案的一点看法 )中,构件应该是“service component”层的主要技术,其之上的层次是“enterprise service”层。(当然这个可以是系统内,也可以是系统间)
再次看一下JEE(这里聚焦在系统内),对应的就是 服务实现 和 服务接口 这个层,并一定程度上借助Facade Pattern。
因此赞成“SOA从面向服务开始而又基于构件的”的说法。
crazycy 2007-03-25 00:49 发表评论
编程百科
2020-08-27 12:47:15
相关推荐: SCA:企业应用开发的利器 甲骨文公司提出了“SOA五步走”的方法论体系 忽悠,继续忽悠,组团忽悠... 21天通关Python(仅视频课) 学习MySQL这一篇就够了 [记录三] Vue(全家桶)+node+koa2+mysql+nginx+redis,全栈博客项目前端部分完善 智鼎(附答案).zip
推荐群组: 传统文化
更多相关推荐
SOA

第一部分:文化
文化的多样性
人类文明的历史长河造就了文化的多元化和多样性。
经济全球化与霸权主义
经济全球化,使得人类的地域文化不再相互隔离,也使得各种文化皆被吸纳到全球文化这个大系统之中。各种文化在遵循其所固有轨迹与规律的同时,必然会受到全球文化的影响和冲击,有些时候甚至会在某些方面被外来文化所主导。
经济全球化和全球文化是一个互动的过程,也由于政治、经济、文化发展的不平衡,形成了文化霸权主义,并企图以自己的意识形态一统天下,以自己的民族文化消灭另外的民族文化。
求同存异与和谐社会
世界是丰富多彩的。各国文明的多样性,是人类社会的基本特征,也是人类文明进步的动力。应尊重各国的历史文化、社会制度和发展模式,承认世界多样性的现实。世界各种文明和社会制度,应长期共存,在竞争比较中取长补短,在求同存异中共同发展。(在庆祝党成立80周年大会上的讲话)
在经济文化全球化背景下,各种文化也将从其它文化中吸收精华并用以自我优化,进而将导致不同文化相互融合局面的出现,全球文化也将伴随着冲突与融合逐渐与经济全球化同步。最终形成一个和谐社会(和谐学说)。
第二部分:IT
技术多样性
语言也多种多样,如C/C++、Java
技术也多种多样,RMI、CORBA、COM/COM+、EJB、WebService.....
SOA大一统
SOA是由不同厂商、不同技术、不同产品、不同语言造成的异构系统难以集成而衍生出。可以说其起因是应用系统间严重需要集成和资源共享,因此它也是业界发达到了一定程度的必然产物,即使它不称为SOA,也必然是另外名字的等价物。
SOA不是产品,而是方法论,是一个战略思想的指导,也是业界发达到一定程度的必然产物。
SOA方法论必然要求技术支撑,战略思想有了,战术如何?因为集成和松耦合的强烈呼吁产生出SOA,其中一个思想就是把系统功能(可以是几个已存在系统构成的新系统)分成若干的功能服务元,然后把它们组合起来。SCA即是来做这个功能服务元的技术,它相当于一个增强型的部署描述符,把原已有的技术如JEE、Spring之流通过一个描述符组合在一起工作,从而达到了SOA的目标,这也是它胜于Web Service的关键带。
伴随着新技术和解决方案如雨后春笋般的冒出,常有人说这个xxx技术已经不行了,淘汰了;或者说xxx技术不行了,比不了xxx技术了;xxx技术取代了xxx技术。
SCA包容的心
世界万物有存在就有道理,找平衡是最融洽的方式手段也是最终目的。
想一个事物影响覆盖另一个事物,当前可能有必要,但是最终目的它是个徒劳!
所以均衡的让强大和弱小都存在才是王道,这个也是“和谐”的最根本的目的和出发点
软件也是一样:并不能说哪个语言好,哪个就不能存在,道理是一样的
求同存异,发扬自己民族文化,容纳不同民族文化,达到百家齐鸣。SCA也正是通过增强的部署描述符来包容大多技术和语言。
SCA,妙就妙在不否定现有的,而是通过它的配置包容了现有的;这个地方也就是我刚刚为什么提到了和谐社会;
我觉得SCA好,起码是思想的落实点,它也符合了当前的集成需求
结论
嗯,这也如同“美国的霸权外交”和“中国的和谐外交”,SCA正是在求同存异的基础上,在保留原有技术实现的基础上,又增加一个抽象的层,使用户在构建企业应用时不再直接面对具体的技术细节,通过服务组件的方式来构建就OK了。
换句话说,SCA关注是的SOA开发者最初看到的和接触到的(多为图形化),它并不关注SCA各个模块到底是如何实现的。

crazycy 2007-03-25 18:39 发表评论
编程百科
2020-08-27 12:47:05
相关推荐: 运用开源产品构建全套SOA 关于ESB和SOA的问题 ESB架构笔记 ESB数据交换平台实例代码 基于WCF构建企业级大型分布式SOA架构(初级篇) 理解SOA架构使用dubbo与zookeeper搭建分布式工程 通过Oracle EBS 看SOA 面向服务架构 SOA架构:服务和微服务分析及设计(原书第2版)
推荐群组: esb
更多相关推荐
SOA 不急于上手使用那些产品,看什么资料比较好呢,有中文的吗? 多谢了。 另外,有些问题请教: 1,ESB是一种产品吗?它可以实现SOA的所有方面吗?(除了自己写的服务和请求代码)。那么它跟IBM的MQ是类似的产品吗? 2,相对ESB,axis又是针对什么的呢?
编程百科
2020-08-27 12:46:48
相关推荐: 手把手教你用axis创建自己的webservice(二) 手把手教你用axis创建自己的webservice(五) 怎样将DHTML更多属性和事件扩展到AJAX WebShop的属性编辑器中 Axis创建自己的WebService--Step by Step 手把手教你用axis创建自己的webservice(一) (转)手把手教你用axis创建自己的webservice Axis2(WebService)经典教程
推荐群组: struts2
更多相关推荐
SOA
随着 SOA 的流行, webservice 开发也变得相当的热门。许多企业都将自己的网站迁移到 soa 的架构。今天我们来一起体验一下通过 axis 来创建、发布和调用 webservice 的过程。如果大家不太了解 SOA 请访问下面网址( http://www-900.ibm.com/cn/software/rational/solution/tech/soa_design.shtml )
        在开始之前我默认大家已经具有axis的安装经验,如果对axis安装和配置发布有任何问题请看 http://yangyang.iteye.com/blog/56519  和 http://yangyang.iteye.com/blog/56552 两篇文章。 let's go!
       首先我们先假设一个需求。我们需要一个 service ,功能是给手机充值,充值成功后返回操作代码和消息。给手机充值需要手机号、充值金额、操作类型。操作成功或者失败后返回操作代码和消息。在这里我们将客户端的请求和服务器端响应进行了包装代码如下:
java 代码
1.           package  com.yy.ws;   
2.           public   class  ClientRequest {   
3.                private  String opType;   
4.                private   int  amount;   
5.                private  String phoneNumber;   
6.                public   int  getAmount() {   
7.                    return  amount;   
8.               }   
9.                public   void  setAmount( int  amount) {   
10.                 this .amount = amount;   
11.            }   
12.             public  String getOpType() {   
13.                 return  opType;   
14.            }   
15.             public   void  setOpType(String opType) {   
16.                 this .opType = opType;   
17.            }   
18.             public  String getPhoneNumber() {   
19.                 return  phoneNumber;   
20.            }   
21.             public   void  setPhoneNumber(String phoneNumber) {   
22.                 this .phoneNumber = phoneNumber;   
23.            }   
24.        }   
optype 代表操作类型,也可以用枚举类型。 amount 代表充值金额。 phoneNumber 代表手机号。
编程百科
2020-08-27 12:46:36
如果你的客户端拿不到service接口和实现类,当然要采用标准的根据wsad生成stub的方式来调用。
编程百科
2020-08-27 12:46:28
谢谢以上的回复, 现在我的问题的核心是, 为什么,我的这个webDataMap对象, 在传入PersistService的接口方法initPros(Map webDataMap)之前, 打印出来的hashCode为-1669610917, 但在接口方法中, webDataWeb的hashCode变为0了,证明在方法中的对象,都不是原先传入的那个, 这个PersistSerivce对象是用Xfire建立的的web service来的.
编程百科
2020-08-27 12:46:18
相关推荐: j2ee的web应用像CS程序一样自动更新 新增最后更新字段 web程序在线更新实现 Unicorn JS 0.4.0 - 打造简洁易用的精品Widgets SOA soa 选择SOA的原因和时机 SOA (面向服务的体系结构)
推荐群组: Python
更多相关推荐
SOA 这SOA还有没有人研究啊。。怎么几个月没看到动静了啊。。。
编程百科
2020-08-27 12:45:23
相关推荐: 权限错误的解决 ActiveMQ 吞吐量如何优化 ActiveMQ 实践之路(一) 启动你的ActiveMQ SOA 最佳实践:BPEL 指南 Java面试题全集(中) LINUX 常见问题 标准Web系统的架构分层 java学习小知识集锦2
推荐群组: 高级语言虚拟机
更多相关推荐
SOA
    我在使用activeMQ时,加入有权限的RMI时,发生如上的错误:
    描述一下事故理由:
    activeMQ 5.5
    activemq.bat 其中76行:打开权限功能.
  set SUNJMX=-Dcom.sun.management.jmxremote.port=1099 C:\apache-activemq-5.5.0\bin>cacls ../conf/jmx.password /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.password   -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_HOME%/conf/jmx.access -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_HOME%/conf/jmx.password
   运行命令:
  activemq xbean:activemq.xml
  错误:
  错误: 必须限制口令文件读取访问: C:\apache-activemq-5.5.0\bin\../conf/jmx.password
   WINDOWS 解决方法:
   假设你的登录用户为:Administrator
   执行如下命令: C:\apache-activemq-5.5.0\bin> cacls ../conf/jmx.password /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.password C:\apache-activemq-5.5.0\bin> cacls ../conf/jmx.access /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.access
   这样就可以正常使用了.
   登录的用户名/密码在jmx.password里,默认为:admin/activemq,启动jconsole,连接里需要用户验证.
 
 
编程百科
2020-08-27 12:45:12
相关推荐: 关于Lazy与proxy的问题,怎样理解合适? Java动态代理的设计是否有缺陷?? 实现自己的可重用拦截器机制 讨论下axis2的客户端使用Proxy方式时,Proxy使用对象池是否可行 SOA [ Axis开发简单实例 ] 论SOA架构的几种主要开发方式 Axis 之 axis三种开发方式
推荐群组: struts2
更多相关推荐
SOA 目前我们产品的实现,是用axis客户端Proxy方式访问Web Service,而每次调用都new出一个proxy,感觉很没效率。自己尝试,其实多次调用可用同一个Proxy,但由于是在JaveEE应用服务器上,考虑并发时如果使用Singleton会影响效率,故考虑使用对象池来存放Proxy,但这样做存在2个问题:1.Proxy初始化一次后,多次调用是否最佳实践? 2.Proxy初始化一次后,放在池中长时间不调用是否会引发超时异常(TimeoutException)? 在网上找下资料也很少,只看过这个网页:http://social.msdn.microsoft.com/Forums/zh-CN/wcf/thread/c37b0e0d-8f1c-44c7-bcab-0252ab2477fd 想看看高手的意见。
编程百科
2020-08-27 12:45:02
相关推荐: ESB架构笔记 运用开源产品构建全套SOA 【讨论】什么是ESB One or more constraints have not been satisfied. Eclipse 中 XML 警告 No grammar constraints (DTD or XML Schema) 解决方法 One or more constraints have not been satisfied Flutter 中文文档:处理边界约束 (Box constraints) One or more constraints have not been satisfied.(SAPUI5+Eclipse)
推荐群组: esb
更多相关推荐
SOA
标题可能有点杂了.
主要是想请教下关于SAO下面这个Service Constratins的管理。
我们目前在用Apache ServiceMix做SOA方面的应用,涉及到Service Constraints, 即每个服务,我们希望定义明确的调用约束,
比如每秒请求数,单次请求最大的数据传输量,SOA一些Good Practice建议,类似信息应该维护在ESB层,但是ServiceMix上,没有想到简便统一的方案。

Google的时候,无意间发现 http://publib.boulder.ibm.com/infocenter/dmndhelp/v7r0mx/index.jsp?topic=%2Fcom.ibm.websphere.wbpm.scenarios.esb1.doc%2Fconcepts%2Fcscn_sla.html
貌似WebSphere ESB有类似方案,但没接触过这个产品,有哪位熟悉这个WSRR的,帮忙介绍下,这个SLD, SLA怎么弄得?

另外,看到这个http://uclslang.sourceforge.net项目, 类似也想做machine readable SLA的方案,不过没什么example,有点看不懂,
哪位了解这方面类似研究的,解下惑?

谢了
编程百科
2020-08-27 12:44:50
相关推荐: HttpURLConnection与代理服务器 socket, nio socket,及xml传递object 方法 Java进阶:Java编写通过代理访问的应用程序 webservice远程调用详解 C#调用WebService实例和开发 SoapUI调用webservice实现的两种方式 WebService学习总结(一)——WebService的相关概念 WebService实例&调用本质&权限控制
推荐群组: WebServices
更多相关推荐
SOA 从局域网远程调用外网的webservice服务提供的操作。贴出代码片段。我用的是xfire/** * 获取Client对象实例并设置http代理 * @return Client * @throws Exception */ public Client getClient() throws Exception { String proxyHost = "代理ip"; String proxyPort = "代理端口"; System.getProperties().put("proxySet", "true"); System.getProperties().put("proxyHost", proxyHost); System.getProperties().put("proxyPort", proxyPort); Client client = new Client(new URL(URL));//URL为你要调用的地址 client.setProperty(client.getOutChannel().USERNAME, "代理上的用户名"); client.setProperty(client.getOutChannel().PASSWORD, "代理上的密码"); // client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "300"); client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true"); client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "true"); client.setProperty(CommonsHttpMessageSender.HTTP_PROXY_HOST, "代理ip"); client.setProperty(CommonsHttpMessageSender.HTTP_PROXY_PORT, "代理端口"); client.setProperty(CommonsHttpMessageSender.HTTP_PROXY_USER, "代理上的用户名"); client.setProperty(CommonsHttpMessageSender.HTTP_PROXY_PASS, "代理上的密码"); return client; }
编程百科
2020-08-27 12:44:25
刚后有个问题求教一下啊:我前几天也在倒腾CXF, 但有一个问题一直没有解决:我实验了以后怎么客户端的调用接口文件必须和服务端发布服务用的接口文件在同一个包路径下面啊。就是说他们的包路径在发布服务的工程里面和消费服务的工程里面必须要相同的包路径上。我是用的CXF和Spring集成的方法来弄的。不晓得哪里没搞对!望指教啊
编程百科
2020-08-27 12:44:11
相关推荐: Mule入门 Mule初学 入门笔记 mule2.1.2 初步认识 发布cxf 和axis服务 [SOA] Mule ESB Linux 部署 [SOA] Mule ESB 3.x 入门(一)—— 消息流 MuleESB--简介 步步为营---- MuleEsb学习(一) 扫盲篇 [SOA] Mule ESB 3.x 入门(三)—— 消息路由
推荐群组: esb
更多相关推荐
SOA 最近在学习ESB的东西,都说mule比较好用,成熟,上手容易。但是一直无法找到mule的下载地方,http://www.mulesoft.org/这个地方一直无法打开。 那位同学有下载过的,可以共享下。 或者提供下下载地址,非常感谢。
编程百科
2020-08-27 12:43:59
相关推荐: spring对定时任务调度集成的总结 Java 日期处理 技巧 JAVA各种时间类型的取得 Java分布式架构:使用xFire和CXF开发WEB服务 利用CXF2.3生成javaBean 去掉CXF自动生成的@xsi.type属性 Referenced file contains errors (http://cxf.apache.org/schemas/jaxws.xsd)解决办法 apache-cxf-3.0.0。jar
推荐群组: 天津JavaEye
更多相关推荐
SOA 环境:windows XP, jdk1.6, CXF2.3 test.wsdl文件: 利用CXF2.3的wsdl2java命令生成javaBean如下: public class CalendarTime { @XmlSchemaType(name = "unsignedInt") protected Long day; @XmlSchemaType(name = "unsignedInt") protected week week; @XmlSchemaType(name = "unsignedInt") protected long seconds; ...... } wsdl中day、week、seconds同样定义为type="xs:unsignedInt",生成的javaBean的类型却不同: day---Long week--Long seconds--long 后来实验发现:包含的类型都会生成基本类型封装类,而在之外的则生成基本类型。 不知道这是为什么,有哪位高人指点一下?
编程百科
2020-08-27 12:43:46
ray_linn 写道
ESB应该是企业信息系统的基础性设置,各种可复用的资源(file,db,ws,jms,ftp,process,businessmodel等),可以注册到ESB,并在企业内部发布出来。
---------------
那就叫ERB好了,所谓ESB,重点是在service,所谓service是包含某种商业逻辑,提供某种功能的接口,因此所有的资源应该是透明的,所有的file,db,ws,jms,ftp,process都是不可见,可见的是服务接口。 偶像ray_linn 说到点子上了。 关注点是服务。管道内流动的东西,形式上都是水。 不管是咸水淡水,污染的水,泥水,自来水。 不管他们是怎么进来的,雨水,地下水,生活用水,进来以后,都是河水。 最终都去了该去的地方,大海里,农田里,工厂里。 有接入,接出,消息转换(marshal,unmarshal),格式转换(transformer)。
编程百科
2020-08-27 12:43:36
相关推荐: 错误: 必须限制口令文件读取访问 解决方法 ActiveMQ 吞吐量如何优化 ActiveMQ 实践之路(一) 启动你的ActiveMQ 实施SOA的认识与心得 零售连锁行业SOA化解决方式 避免在 SOA 采用过程中遇到的常见失误 Service Provider Access resulted in exception 'oracle.apps.fnd.soa.util.SOAException' 微服务:知识点梳理(SOA、服务拆分、服务治理、分布式事务)
推荐群组: 高级语言虚拟机
更多相关推荐
SOA 【转】 我在使用activeMQ时,加入有权限的RMI时,发生如上的错误: 描述一下事故理由: activeMQ 5.5 activemq.bat 其中76行:打开权限功能. Xml代码 set SUNJMX=-Dcom.sun.management.jmxremote.port=1099 C:\apache-activemq-5.5.0\bin>cacls ../conf/jmx.password /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.password -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_HOME%/conf/jmx.access -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_HOME%/conf/jmx.password set SUNJMX=-Dcom.sun.management.jmxremote.port=1099 C:\apache-activemq-5.5.0\bin>cacls ../conf/jmx.password /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.password -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_HOME%/conf/jmx.access -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_HOME%/conf/jmx.password 运行命令: Java代码 activemq xbean:activemq.xml activemq xbean:activemq.xml 错误: Java代码 错误: 必须限制口令文件读取访问: C:\apache-activemq-5.5.0\bin\../conf/jmx.password 错误: 必须限制口令文件读取访问: C:\apache-activemq-5.5.0\bin\../conf/jmx.password WINDOWS 解决方法: 假设你的登录用户为:Administrator 执行如下命令: Java代码 C:\apache-activemq-5.5.0\bin>cacls ../conf/jmx.password /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.password C:\apache-activemq-5.5.0\bin>cacls ../conf/jmx.access /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.access C:\apache-activemq-5.5.0\bin>cacls ../conf/jmx.password /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.password C:\apache-activemq-5.5.0\bin>cacls ../conf/jmx.access /P Administrators:R 是否确定(Y/N)?Y 处理的文件: C:\apache-activemq-5.5.0\conf\jmx.access 这样就可以正常使用了. 登录的用户名/密码在jmx.password里,默认为:admin/activemq,启动jconsole,连接里需要用户验证.
编程百科
2020-08-27 12:43:23
相关推荐: CXF密码验证_服务端和客户端配置 Apache CXF入门范例以及对传递List类型的疑惑 使用CXF限制客户端IP地址 Java面试题全集(中) JAVA的WebService规范(支持) JAVA的WebService支持 WebService笔记
推荐群组: GT-Grid
更多相关推荐
SOA
前一段时间写了一篇 CXF密码验证_服务端和客户端配置
 
当时没有系统的讲解:
个人认为CXF认证方式很多.一种就像上一篇文章写的是直接对传送的数据包进行密码封装!
另一种就是现在要介绍的是另外一种.对SOAP头处理..把需要验证的密码封装在SOAP头里传送!
可能表达不是很清楚..看代码吧:
1:服务端spring里的配置:

这个里面是有注释的..区别上一个密码验证的示例!
关键代码就有一句: 
  这个是自己写的读取soap信息.查看密码是否正确!
2:soap读入信息的验证:ReadSoapHeader代码:
public class ReadSoapHeader extends AbstractPhaseInterceptor { private SAAJInInterceptor saa=new SAAJInInterceptor(); public ReadSoapHeader(){ super(Phase.PRE_PROTOCOL); getAfter().add(SAAJInInterceptor.class.getName()); } public void handleMessage(SoapMessage message) throws Fault { SOAPMessage mess=message.getContent(SOAPMessage.class); if(mess==null){ saa.handleMessage(message); mess=message.getContent(SOAPMessage.class); } SOAPHeader head=null; try { head = mess.getSOAPHeader(); } catch (SOAPException e) { e.printStackTrace(); } if(head==null){ return; } NodeList nodes=head.getElementsByTagName("tns:spId"); NodeList nodepass=head.getElementsByTagName("tns:spPassword"); if(nodes.item(0).getTextContent().indexOf("wdw")!=-1){ if(nodepass.item(0).getTextContent().equals("wdwsb")){ System.out.println("认证成功"); } } else{ SOAPException soapExc=new SOAPException("认证错误"); throw new Fault(soapExc); } } }
  功能:判断客户端传来的soap信息头是否有密码..有的话判断是否正确!
 
3:客户端spring的配置:

  PS:注意注释>...重点是:
 4:对soap进行如入头信息.把密码加进去:AddSoapHeader代码:
public class AddSoapHeader extends AbstractSoapInterceptor { private static String nameURI="http://127.0.0.1/Hello/web"; public AddSoapHeader(){ super(Phase.WRITE); } public void handleMessage(SoapMessage message) throws Fault { SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date=new Date(); String time =sd.format(date); String spPassword="wdwsb"; String spName="wdw"; QName qname=new QName("RequestSOAPHeader"); Document doc=DOMUtils.createDocument(); Element spId=doc.createElement("tns:spId"); spId.setTextContent(spName); Element spPass=doc.createElement("tns:spPassword"); spPass.setTextContent(spPassword); Element root=doc.createElementNS(nameURI, "tns:RequestSOAPHeader"); root.appendChild(spId); root.appendChild(spPass); SoapHeader head=new SoapHeader(qname,root); List
headers=message.getHeaders(); headers.add(head); } }
  很简单的东西...现在密码已经加进去了...spring里也已经配置好了..
客户端就可以正常的请求了..对请求的内容会进行soap头处理.把密码加进去....
服务端通过了客户端的权限密码请求就可以了.
 
东西很简单..不用过多的讲解了吧...
有什么疑问和见解..请提出来...大家共同学习!!
 
 
........
 
 
 
 
 
 
 
 
 
 
编程百科
2020-08-27 12:43:10
相关推荐: Camel中的几个重要概念之 Endpoint 设计美好的服务器(4)--Mule ESB笔记 CXF 2.0 发布了 org.apache.servicemix.bundles.spring-beans-3.2.7.RELEASE_1.zip ServiceMix中部署:OSGi Bundle和Feature ServiceMix中部署:JAR和WAR ServiceMix中部署:WebService和OSGi Service Apache ServiceMix 介绍
推荐群组: webservice讨论组
更多相关推荐
SOA 通过使用ServiceMix-cxf-bc,提供了如下一个cxfbc的服务消费者与提供者,从而将外部Web Service注册到esb中。 现在, 我已实现了如下流程: 外部客户端 --> cxf consumer --> cxf provider --> 外部web Service 如果我要实现以下流程: 外部客户端 --> cxf consumer--> 路由 --> cxf provider --> 外部web Service 则应该怎么做啦?
编程百科
2020-08-27 12:42:53
相关推荐: WebService CXF学习(高级篇3):WS-Security CXF 密码权限控制 SOAP报头处理 使用CXF限制客户端IP地址 使用 Apache CXF 实现 Web Service 详解 CXF 通过用户名和密码进行验证 关于Apache-CXF客户端权限认证 OpenJWeb中使用cxf webservice搭建跨平台SOA框架 cxf
推荐群组: GT-Grid
更多相关推荐
SOA
CXF密码认证是在我前面的一篇文章 WebService CXF+struts+spring 示例   的基础上写的.如果你感觉看不懂这篇.那就先看看前面的那篇文章吧!
1:spring服务端的配置

 
action:UsernameToken 是使用用户令牌
passwordType:PasswordText 是指密码加密策略.这里是直接密码文本.
user:cxfServer 是指别名
passwordCallbackRef:serverPasswordCallback 是这密码验证..类..就是下面配置的..
2: 类:serverPasswordCallback
 
import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.UnsupportedCallbackException; import org.apache.ws.security.WSPasswordCallback; public class ServerPasswordCallback implements CallbackHandler { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback pc=(WSPasswordCallback) callbacks[0]; String pw=pc.getPassword(); String idf=pc.getIdentifier(); System.out.println("密码是:"+pw); System.out.println("类型是:"+idf); if(pw.equals("wdwsb")&&idf.equals("admin")){ System.out.println("成功"); } else{ throw new SecurityException("验证失败"); } }
  这个不用多说..就是密码验证..很简单!!
3:spring客户端的配置:
 

跟server的配置差不多..没多少要讲的.呵呵...
4: 类clientPasswordCallback的配置
import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.UnsupportedCallbackException; import org.apache.ws.security.WSPasswordCallback; public class clientPasswordCallback implements CallbackHandler { public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for(int i=0;i   到此为止..密码认证用户令牌就完成了...
测试!
 
通过!
 
当然我前面写的一篇文章是最基本的.缺少了一些jar包.会报错的.
所以要加上以下jar包..
 

 
 
 
编程百科
2020-08-27 12:42:42
相关推荐: 运用开源产品构建全套SOA 建设“更贴近于国内实际应用的开源ESB产品”—召集贴 熟悉esb的朋友进来看看。帮忙解惑。 Fremantle和Weerawarana谈论WSO2基于OSGi的SOA新平台 0、WSO2 API Manager概述 wso2 esb部署 4._WSO2推出基于WSO2 3.0中间件平台的五种新产品 SOA架构 系统集成之用户统一登录( LDAP + wso2 Identity Server)
推荐群组: esb
更多相关推荐
SOA
wso2是一个领先的开源SOA解决方案提供者。 官方网站: http://wso2.org/
其提供了SOA相关的各种基础设施、技术框架和相关工具,流程server,appserver等等,并且都是Apache 2.0开源协议的。对商业友好,也给学习者打开了方便之门。 可以说,wso2提供了全套的SOA相关技术,开箱即用,且文档比较齐全,包括docs,Quick Start ,install guide等等。
但是网络上的资料和讨论,并不是很多,官方有一些技术文章: http://wso2.org/library/articles  
论坛有少量的讨论,
我将就常用的几个框架,ESB,WS(各种相关语言),Registry等模块进行分析,演示和讨论。
其核心的开源产品框架如下列表所示:
Product List












----------------------------------------------------------------------------------
 
争做JE的wso2第一人。
 
编程百科
2020-08-27 12:42:30
justcodeit 写道
SOHU的是HTTP协议,任何语言都可以调用,新浪只是多封了一层JAVA方法而已,没有觉得有什么。 兄弟!最近也在搞这些开发平台的开发,哎,碰到最那个的开心网,连申请个openid都超级麻烦,兄弟你有没有开心网开放平台的经验的,请指教一下啊!哎,搞得这么复杂,可能是开心网的财力不行啊!
编程百科
2020-08-27 12:42:03
fisherhe 写道

这个是你自己幻想上去的?
实现类注解少了endpointInterface
你的逻辑很紊乱,完全不想看,所以你激动也没必要
请你仔细看看... 那个..下面不就是引用了他么!!! 看下面的
编程百科
2020-08-27 12:41:13
luwanyi 写道
请问楼主有源码吗,好的类没有给出。 童鞋,总不可能把整个项目拿上来吧。呵呵。你所指的好的类是哪个呢?
编程百科
2020-08-27 12:41:01
相关推荐: CXF 密码权限控制 SOAP报头处理 一个Java架构师的新年期望 建设“更贴近于国内实际应用的开源ESB产品”—召集贴 [Apache Karaf] Apache Karaf 学习教程 (英文版) Learning Apache Karaf Apache Karaf 学习和安装 Apache Karaf调研 Apache Karaf调研文档
推荐群组: esb
更多相关推荐
SOA
Apache Karaf 2.1.0 上个礼拜发布了, 这里 有下载和release notes。
简单介绍一下 Apache Karaf 的历史, Apache Karaf起源自 Apache Servicemix 4的kernel, 一个基于OSGi core的项目, 因此后来Apache Servicemix4 kernel 成为了 Apache Felix 的一个子项目, 并且改名为Karaf,经过一段时间的发展, 我们认为Karaf独立成为一个顶级项目会更有利于该项目的发展,因此经过相关的讨论和投票表决, 于2010年6月份开始Karaf成为Apache的一个顶级项目(TLP, Top Level Project).
 
Apache Karaf is a small OSGi based runtime which provides a lightweight container onto which various components and applications can be deployed.
这是对Karaf这个项目的官方定义,更多的内容大家可以从 Apache Karaf 的网站上看到。
 
刚才提到了 Apache Servicemix ,这是一个ESB的实现(基于JBI规范), FuseSource ESB是基于 Apache Servicemix 并且能够提供附加的文档,培训,商业支持。
大家可以在 FuseSource 网站找到相关的文档,webniar的相关预报。
 
 
Freeman
 
编程百科
2020-08-27 12:40:51
相关推荐: WebService CXF学习(高级篇1):整合Spring框架 一个DAO配一个Service好呢还是所有DAO所一个Service好? sping+ibatis集成开发时出错 基于Maven在Spring中集成CXF Web Service框架 webService+Spring基本配置 WebService开发笔记 jax-ws之webservice security(安全)教程第一天 利用cxf开发WebService
推荐群组: struts2
更多相关推荐
SOA 前一节仅仅只讲了与Spring整合,没有涉及到数据库,而且是直接将Java象传递到服务端。这一节我起到一个回顾前面章节的作用。用在客户端运用JABX将JAVA对象编组成XML文件,在客户端将XML解组成JAVA并存入数据库。下面我们就着手开发这个Demo: 服务端开发 第一步,编写数据资源层相关接口 DAO编写: public interface HibernateDao { public void save(UserInfo object); public void delete(UserInfo object); public void update(UserInfo object); public UserInfo get(int id); } DAO实现类: public class HibernateDaoImpl extends HibernateDaoSupport implements HibernateDao { public void delete(UserInfo object) { this.getHibernateTemplate().delete(object); } public void save(UserInfo object) { this.getHibernateTemplate().save(object); } public void update(UserInfo object) { this.getHibernateTemplate().update(object); } public UserInfo get(int id) { return (UserInfo) this.getHibernateTemplate().get(UserInfo.class, id); } } 实体对象: @Entity @Table(name = "userinfo") public class UserInfo implements java.io.Serializable { private static final long serialVersionUID = 2281022190032353574L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; private Integer age; private Integer address; public UserInfo() { } public UserInfo(String name, Integer age) { this.name = name; this.age = age; } public UserInfo(String name, Integer age, Integer address) { this.name = name; this.age = age; this.address = address; } public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Integer getAge() { return this.age; } public void setAge(Integer age) { this.age = age; } public Integer getAddress() { return this.address; } public void setAddress(Integer address) { this.address = address; } } 第二步:业务逻辑层接口编写 业务逻辑接口: @WebService public interface IService { //public void save(@WebParam(name="info")String xml); public void save(@WebParam(name="dto")UserInfoDTO dto,@WebParam(name="flag")boolean flag); public void update(@WebParam(name="info")String xml); public void delete(@WebParam(name="id")int id); public @WebResult(name="String")String get(@WebParam(name="id")int id); } 接口实现类: @WebService public class ServiceImpl implements IService { private Logger log = LoggerFactory.getLogger(ServiceImpl.class); private HibernateDao dao; // public void setDao(HibernateDao dao) { // this.dao = dao; // } public void delete(int id) { log.info("delete id is {} user"+id); //UserInfo userInfo = (UserInfo)object; //log.info("this username is:"+userInfo.getName()); //log.info("delete {} information..."+userInfo.getName()); //dao.delete(userInfo); } // public void save(String xml) { // //UserInfo userInfo = (UserInfo)object; // log.info("add {} user..."+xml); // //dao.save(userInfo); // System.out.println("ssss"); // } public void save(UserInfoDTO dto,boolean flag) { System.out.println("name:"+dto.getName()); } public void update(String xml){ ApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext-resources.xml"); this.dao = (HibernateDao)context.getBean("dao"); try { JAXBContext jaxbContext = JAXBContext.newInstance("com.itdcl.model"); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader(xml); Customers cus = (Customers)unmarshaller.unmarshal(reader); Customer cust = cus.getCustomer(); UserInfo userInfo = new UserInfo(); System.out.println("Address:"+cust.getAddress()); userInfo.setAddress(cust.getAddress()); System.out.println("Age:"+cust.getAge()); userInfo.setAge(Integer.valueOf(cust.getAge())); System.out.println("Name:"+cust.getName()); //userInfo.setId(2); userInfo.setName(cust.getName()); dao.save(userInfo); } catch (JAXBException e) { e.printStackTrace(); } } public String get(int id){ //return dao.get(id); return null; } } DAO与Service接口配置: classpath:jdbc.properties ${hibernate.dialect} ${show_sql} ${format_sql} ${cache.use_query_cache} ${cache.use_second_level_cache} ${cache.provider_class} ${c3p0.acquire_increment} ${c3p0.max_statements} ${c3p0.min_size} ${c3p0.max_size} ${c3p0.timeout} ${c3p0.idle_test_period} WebService接口发布: 第三步:服务端程序编写了,打包部署 客户端开发 第一步:WebService客户端生成,可以手工编写。这里我就通过配置Ant文件来生成WebService客户端: 第二步:WebService接口注册配置 剩下的事就测试我们整合是否成功了,编写一个JUnit测试类或写一个Main函数测试一下。 public class JaxbSampleClient { private final static String MODEL = "com.itdcl.model"; public static void main(String[] args) throws FileNotFoundException, JAXBException, ParserConfigurationException, TransformerException { ApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml"); IService service = (IService) context.getBean("service"); ObjectFactory factory = new ObjectFactory(); Customer customer = factory.createCustomer(); customer.setId(1); customer.setAge("26"); customer.setName("Josen"); customer.setAddress(100); Customers customers = factory.createCustomers(); customers.setCustomer(customer); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); // 转换 JAXBContext jaxbContext = JAXBContext.newInstance(MODEL); Marshaller marshaller = jaxbContext.createMarshaller(); //将customers数据与doc绑定 marshaller.marshal(customers, doc); DOMSource domSource = new DOMSource(doc); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.transform(domSource, result); String xmlString = writer.toString(); //System.out.println(xmlString); service.update(xmlString); } } 运行一下,看插入数据库没有。这节到此就靠一段落啦,下节讲解WS-Security
编程百科
2020-08-27 12:40:36
public class DnyModel { private Map fieldMap= new HashMap();; public DnyModel(); { fieldMap.put("sn","编号");; fieldMap.put("name","名字");; } public String get(String pName);{ return (String);fieldMap.get(pName);; } } 模版 输出1: ${DnyModel.sn} ${DnyModel.name} 输出2: ${DnyModel.Sn} ${DnyModel.Name} 输出结果是 输出1: ${Field.sn} ${Field.name} 输出2: ${Field.Sn} ${Field.Name} 从结果可以知道,没有取到模板值
编程百科
2020-08-27 12:39:11
楼主举的例子是《lucene in action》书里的例子吧?写得很不详细麻,怎么帮你呢。
编程百科
2020-08-27 12:38:48
相关推荐: Lucene的评分(score)机制的简单解释 关于lucene的Document-效率抉择 懂Lucene的请进 lucene对象转换 Lucene深入学习(5)Lucene的Document与Field lucene中Document的实质 Lucene的Document lucene的Document对象的详解
推荐群组: lucene爱好者
更多相关推荐
企业应用 Lucene 在建立index的时候,需要用document.add这个方法。我有点不明白的是关于filed这个class,是什么意思 比方说: document.add(new Field("path",path,Field.Store.YES,Field.Index.NO)); 是不是对于我所要index的文件把path这个filed加入索引? 我怎么知道这个文件是否有path这个filed呢? 谢谢!
编程百科
2020-08-27 12:38:40
相关推荐: 用Lucene做搜索碰到的问题,供大家思考讨论 关于lucene文件锁和增量索引BUG的讨论。 用全文搜索实现“搜索全部字段” 全文检索引擎Solr系列——入门篇 lucene入门介绍篇 电子商务网站搜索架构方案 Lucene 实例教程(一)初识Lucene 必须掌握的全文检索框架Lucene,带你一周从入门到精通Lucene!
推荐群组: lucene爱好者
更多相关推荐
入门技术 Lucene 我有这样一个需求,有这样一个网站,里面有一个已经写好原代码的论坛和博客,还有一些要发表的文章,新闻信息,我要做一个全站的搜索,在搜索中可以搜索的到网站的带有输入关键字的全部内容. 我的解决思路:使用lucene技术,首先要对所有信息从数据库中取出,做索引,然后通过lucene在索引中查找,提高搜索速度. 我遇到的一些问题: 在做索引中又遇到问题,就是什么时候做索引,是在每次加入文章,加入帖子中就为此项做索引好,还是在每天固定上线人比较少的时间做索引,这样效率是会高一些,但是搜索出的内容不是最新的. 假如我采用定时索引:我使用的是一个定时触发器,暂时使用timer做为触发(在网上我查过有很多开源的出发器),把触发过程做成一个插件插在网站上(或加入都Servlet中).此类方法引发的问题;1)就是每次做索引时如何剔除已经做的索引,只索引新的项目;2)就是对于不同分类,如帖子,文章对应不同的数据库,怎么给他们做一个统一的索引 希望大家讨论一下看看有没有好的解决方案.
编程百科
2020-08-27 12:37:55
相关推荐: Lucene应用的一点体会 深入 Lucene 索引机制 对lucene的一些看法 对lucene in action 和其他书里面对于mergeFactor讲解的质疑 Lucene in Action-构建索引 转一篇lucene的使用的文章,写的比较全 全文检索框架Lucene——Demo应用 全文检索技术Lucene入门和学习、与数据库数据结合的demo实现
推荐群组: lucene爱好者
更多相关推荐
企业应用 Lucene
java 代码
   最近要做搜索了,而且公司用的就是lucene,所以自己先学习一番,看了lucene in action和今天买的一本lucene2.0+heritrix,上面对mergeFactor都是这样说的“每向索引添加mergeFactor个document时,就会有一个新的segment在磁盘建立起来......"。而对于minMergeDocs都是一笔带过,说是限制内存中文档的数量。
    于是我就开始奇怪了,这两个值这么一来不就冲突了吗,两个值一样的功能,于是乎我就做了几个试验,我有81个document,然后我把mergeFactor设置为5,把minMergeDocs设置为8,把maxMergeDocs设置为45。按照书上的讲,这样每5个doc就会生成一个segment,事实怎么样呢[code]package org.apache.lucene.demo;
[code]
/**
 * Copyright 2004 The Apache Software Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
class IndexFiles {
 public static void main(String[] args) throws IOException {
  String usage = "java " + IndexFiles.class + " ";
  if (args.length == 0) {
   System.err.println("Usage: " + usage);
   System.exit(1);
  }
  Date start = new Date();
  try {
   File INDEX_DIR = new File(args[0]);
   if (INDEX_DIR.exists()) {
    INDEX_DIR.delete();
   }
   IndexWriter writer = new IndexWriter("index",
     new StandardAnalyzer(), true);
   writer.setUseCompoundFile(false);
   writer.mergeFactor = 5;
   writer.maxMergeDocs = 40;
   writer.minMergeDocs = 8;
   indexDocs(writer, INDEX_DIR);
//   writer.optimize();
   writer.close();
   Date end = new Date();
   System.out.print(end.getTime() - start.getTime());
   System.out.println(" total milliseconds");
  } catch (IOException e) {
   System.out.println(" caught a " + e.getClass()
     + "\n with message: " + e.getMessage());
  }
 }
 public static void indexDocs(IndexWriter writer, File file)
   throws IOException {
  // do not try to index files that cannot be read
  if (file.canRead()) {
   if (file.isDirectory()) {
    String[] files = file.list();
    // an IO error could occur
    if (files != null) {
     for (int i = 0; i < files.length; i++) {
      indexDocs(writer, new File(file, files[i]));
     }
    }
   } else {
    try {
     if (file.getName().endsWith(".txt")) {
      System.out.println("adding " + file);
      writer.addDocument(FileDocument.Document(file));
     }
    }
    // at least on windows, some temporary files raise this
    // exception with an "access denied" message
    // checking if the file can be read doesn't help
    catch (FileNotFoundException fnfe) {
     ;
    }
   }
  }
 }
}
[/code]
debug他在 writer.addDocument(FileDocument.Document(file)); writer.addDocument(FileDocument.Document(file));
这里设上断点,然后发现在第5个document添加的时候并没有出现segment生成,而是在第8个document添加的时候出现了第一个segment的生成。接下来再做一个试验把这两个值倒过来,然后你就会发现这次,在第5个document添加的时候出现了第一个segment的生成。
      所以我认为,mergeFactor只是控制segment合并的,并不控制多少个document生成一个segement,而minMergeDocs是控制多少个document生成一个segement。
 
另外附上我自己写的一个计算产生segement数量的算法,写得比较匆忙,可能有不对的地方,另外有一条分支没有验证就是当maxMergeDocs 
java 代码
package  com.sina.easy.util;       public   class  CountSegmentNum {         private   int  docNum =  0 ;            private   int  mergefactor =  10 ;            private   int  maxMergeDocs = Integer.MAX_VALUE;            private   int  minMergeDocs =  10 ;            private   int  segmentNum =  0 ;            public  CountSegmentNum( int  docNum,  int  mergefactor,  int  maxMergeDocs,                 int  minMergeDocs) {             this .docNum = docNum;             this .mergefactor = mergefactor;             this .maxMergeDocs = maxMergeDocs;             this .minMergeDocs = minMergeDocs;        }            public   void  countNum() {             int  i =  1 ;             int  tempmerfactormulti = mergefactor;             while  ( true ) {                 if  (docNum ==  0 ) {                     return ;                }                 if  (docNum < minMergeDocs) {                    segmentNum++;                     return ;                }                 if  (maxMergeDocs >= docNum) {                     int  x = docNum / minMergeDocs;                     int  z = x % mergefactor;                     if  (x >= mergefactor) {                        segmentNum++;                    }                    segmentNum += z;                    docNum = docNum % minMergeDocs;                } else {                     if (maxMergeDocs= 1 ;i--){                            nowmerfactor = tempmerfactormulti/mergefactor;                            segmentNum+=docNum/(nowmerfactor*minMergeDocs);                            docNum = docNum%(nowmerfactor*minMergeDocs);                        }                    } else {                        tempmerfactormulti = tempmerfactormulti*mergefactor;                        i++;                    }                }               }        }            public   int  getSegmentNum() {             return  segmentNum;        }            public   static   void  main(String[] args) {            CountSegmentNum csn =  new  CountSegmentNum( 81 ,  5 ,  60 ,  4 );            csn.countNum();            System.out.println(csn.getSegmentNum());        }    }   
编程百科
2020-08-27 12:37:43
相关推荐: 关于Lucene实时索引的讨论,有兴趣者进来 simple 的lucene做千万级数据索引速度 关于lucene文件锁和增量索引BUG的讨论。 全文检索系统与Lucene简介 关于ElasticSearch在实际项目中遇到的问题分享 云架构师的进阶之路 开源框架思索 阿里Java面经大全(整合版)
推荐群组: lucene爱好者
更多相关推荐
企业应用 Lucene 1.更加实时的数据更新架构设计我们的网站主要是视频节目的搜索,内容也都是来自用户。 我们提供的功能在搜索结果中,我们会显示播放次数等数据,这些数据的特点是更新非常频繁, 有什么好的方式能够让这种数据更加实时的更新。 还有就是内容都是来自用户,用户无时无刻都在上传节目,而且他们希望能够尽快从搜索中搜索到他们的节目。 问题也是设计怎么样的架构来更实时的索引。 2.索引数据量大的问题 虽然用户量的增大,节目数增长也非常快。单台服务器能够处理的索引大小的上限是多少?达到上线如何处理。 我现在想到的方法就是按照功能先拆分,比如:播客搜索、节目搜索分别放到不同的服务器上。 3.什么样的数据应该做到索引中? 我们现在需要在页面上展示出来的数据、排序要到的数据都会放到索引中。 因为展示的数据比较多,所以,索引的大小增长的非常快。 什么样的数据应该放到索引中?对于控制索引的大小还有什么方法? 4.多线程索引速度会快吗? 就是关于提高索引速度的问题。 我现在发现,做索引的过程是非常耗CPU的。那么单台服务器上做索引,如果使用多线程的方式是不是会快一些。 多线程做索引怎么设计比较好?能够加快多少呢? 5.搜索结果提速:静态化的方案和查询结果缓存的方案 我没有试过Lucene的缓存查询结果,不知道效果如何?特别是在大并发量请求的情况下,会不会占用很大的内存,导致OutOfMemory呢? 还有一种方式就是把查询结果静态化,这样做好吗?静态化后也要考虑更新的问题。 6.数据来源的完整性问题, 现在数据来源都是采用数据库多表关联查询出结果,然后做到索引中。 一次查询大量的数据,数据库的响应比较慢,是否有更好的方式呢? 例如,以XML形式的接口数据? 7.自动提示功能的开发 类似google的那种,在用户输入的时候自动给出很多关键字的提示。
编程百科
2020-08-27 12:37:26
国内免费的好象好的没有,有的都是要花钱的.中科院哪个所好象有一个,还有一个好象是海量的不是免费. Lucene的中文分词一些东西可以参考车东以前写的东西。
编程百科
2020-08-27 12:37:16
相关推荐: Lucene搜索方法总结 lucene删除指定索引失败 lucene造成磁盘空间不足的问题 Lucene全文检索框架+Solr搜索引擎(2018版.Java) Lucene全文检索从入门到精通(精细讲解含代码笔记答疑服务) Lucene教学视频从入门到精通(备Java基础,JavaSE,JavaEE) lucene索引优化多线程多目录创建索引 lucene.net 2.9.2 实现索引生成,修改,查询,删除实例
推荐群组: lucene爱好者
更多相关推荐
企业应用 Lucene ... public Integer query(IndexSearcher searcher) throws Exception { Hits hits = queryByKeys(termsArrays, searcher); IndexReader reader = searcher.getIndexReader(); for (int i = 0; i < hits.length(); i++) { int num = hits.id(i); reader.deleteDocument(num); // <--------------= log.debug("delete indexdoc ID: " + num); } return new Integer(hits.length()); } 在循环到101个记录时,报错:
引用
java.lang.ArrayIndexOutOfBoundsException: 100 >= 100
at java.util.Vector.elementAt(Vector.java:431)
at org.apache.lucene.search.Hits.hitDoc(Hits.java:157)
at org.apache.lucene.search.Hits.id(Hits.java:131)
at com.openlibs.noteer.search.SearchUtils$3.query(SearchUtils.java:206)
...
如果没有deleteDocument操作,循环能顺利结束 请大家分析看看问题原因在哪里?
编程百科
2020-08-27 12:36:53
相关推荐: Lucene-2.0学习文档(1) 使用solr搭建你的全文检索 oracle 全文检索实践 Lucene全文检索从入门到精通(精细讲解含代码笔记答疑服务) Lucene全文检索框架+Solr搜索引擎(2018版.Java) Lucene教学视频从入门到精通(备Java基础,JavaSE,JavaEE) Lucene教学视频从入门到精通(备java基础,javase。javaee) Lucene-入门
推荐群组: lucene爱好者
更多相关推荐
入门技术 Lucene  1.Lucene 与数据库全文检索比较
Lucene 是 Apache Jakarta 的一个子项目,是一个全文检索的搜索引擎库 . 在接触 Lucene 之前,我了解不少数据库都实现了全文检索功能。所以我觉得很奇怪:为什么不用数据库提供的供全文检索功能呢?我找了不少资料,车东的一篇文章《 Lucene :基于 Java 的全文检索引擎简介》阐述的比较详细。这里摘录了其中的一段文字:
由于数据库索引不是为全文索引设计的,因此,使用 like "%keyword%" 时,数据库索引是不起作用的,在使用 like 查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说, LIKE 对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配: like"%keyword1%" and like "%keyword2%" ... 其效率也就可想而知了。
所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词 ==> 文章映射关系,利用这样的映射关系索引: [ 关键词 ==> 出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率 ] ,检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。
由此可以看出模糊查询相对数据库的精确查询是一个非常不确定的问题,这也是大部分数据库对全文检索支持有限的原因。 Lucene 最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。
  Lucene 全文索引引擎 数据库 索引 将数据源中的数据都通过全文索引一一建立反向索引 对于 LIKE 查询来说,数据传统的索引是根本用不上的。数据需要逐个便利记录进行 GREP 式的模糊匹配,比有索引的搜索速度要有多个数量级的下降。 匹配效果 通过词元 (term) 进行匹配,通过语言分析接口的实现,可以实现对中文等非英语的支持。 使用: like "%net%" 会把 netherlands 也匹配出来,
多个关键词的模糊匹配:使用 like "%com%net%" :就不能匹配词序颠倒的 xxx.net..xxx.com
匹配度 有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。 没有匹配程度的控制:比如有记录中 net 出现 5 词和出现 1 次的,结果是一样的。 结果输出 通过特别的算法,将最匹配度最高的头 100 条结果输出,结果集是缓冲式的小批量读取的。 返回所有的结果集,在匹配条目非常多的时候(比如上万条)需要大量的内存存放这些临时结果集。
可定制性
结论
通过不同的语言分析接口实现,可以方便的定制出符合应用需要的索引规则(包括对中文的支持)
高负载的模糊查询应用,需要负责的模糊查询的规则,索引的资料量比较大
没有接口或接口复杂,无法定制
使用率低,模糊匹配规则简单或者需要模糊查询的资料量少
 
全文检索和数据库应用最大的不同在于:让最相关的头 100 条结果满足 98% 以上用户的需求。和数据库全文检索相比, Lucene 的创新之处:
大部分的搜索(数据库)引擎都是用 B 树结构来维护索引,索引的更新会导致大量的 IO 操作, Lucene 在实现中,对此稍微有所改进:不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整),这样在不影响检索的效率的前提下,提高了索引的效率。
 
另外 Lucene 还有两个优点:
( 1 ) Apache Lucene 是一个开放源程序的搜寻器引擎
( 2 )可以轻易地为 Java 软件加入全文搜寻功能。
我想这也就是 Lucene 为什么这么火的原因把。
 
2. 全文检索简介
目前比较成熟的全文检索算法有:   
  inverted    file    倒排文件   
  signature    file    签名文档   
  suffix    arrays    后继数组
除此之外,全文搜索还涉及到很多复杂的技术,从索引技术到存取策略,还有压缩技术等等。所以说全文检索是一门比较前沿的技术。
做全文检索之前,要作一些预先处理,比如去除一些无意义的副词、定语和与业务无关的词语后的关键词检索,其实全文检索的关键内容在建立关键词上而不在检索本身,也就是如何将内容中的无关词语去除,那样检索的索引效率才能更高,检索本身也更有意义和价值。
TRS 之类的应用都有自己的关键词知识库,这是它们成功的重要因素。同时它们对组织数据都有一定的要求,不是对一个普通的文本文件就可以检索的。
全文检索主要的应用领域是:图书馆数据库、情报数据库、专利数据库、医药数据库、办公自动化、历史资料库、电子出版系统、等等。
 
3.lucene 简介
Lucene 的知识主要分为索引、搜索、分析器、性能优化几个部分。只要掌握了这些知识, lucene 运用也就可以得心应手了。
( 1 ) lucene 的包结构
org.apache.Lucene.search/ 搜索入口
org.apache.Lucene.index/ 索引入口
org.apache.Lucene.analysis/ 语言分析器
org.apache.Lucene.queryParser/ 查询分析器
org.apache.Lucene.document/ 存储结构
org.apache.Lucene.store/ 底层 IO/ 存储结构
org.apache.Lucene.util/ 一些公用的数据结构
(2)lucene 主要类
²         IndexWriter 的主要作用是对索引进行创建 , 加入 Document, 合并各种索引段 , 以及控制与索引相关的各方面 , 他是 Lucene 的索引的主要操作者
²         InswzReader 的作用是负责对索引的各种读取和维护工作 . 如打开一个索引 , 取得索引中的某个文档 , 获得索引中的总文档数量
²         Analyzer: 分析器 , 主要用于分析搜索引擎遇到的各种文本。常用的有 StandardAnalyzer 分析器 ,StopAnalyzer 分析器 ,WhitespaceAnalyzer 分析器等。
²         Directory: 索引存放的位置 ;lucene 提供了两种索引存放的位置,一种是磁盘,一种是内存。相应地 lucene 提供了 FSDirectory 和 RAMDirectory 两个类。 FSDirectory 指的是在文件系统中的一个路径 . 因此 , 当 Lucene 向其中写入索引的时候 , 会直接将索引写到磁盘上 .RAMDirectory 则是内存中的一块区域 .
²         Document: 在 Lucene 中 , 代表一种逻辑文件 , 相当于一个要进行索引的单元,任何想要被索引的文件都必须转化为 Document 对象才能进行索引。
²         Field :如果把 Document 可以看作是数据库的一行记录,那么 Field 可以看作是数据库的字段 . 在索引中的每个 Document 含有一个或多个字段,具体化为 Field 类。每个字段相应于数据的一个片段,将在搜索时查询或从索引中重新获取。 Lucene 提供四个不同的字段类型,你可以从中做出选择:
Keyword —不被分析,但是被索引并逐字存储到索引中。这个类型适合于原始值需要保持原样的字段,如 URL 、文件系统路径、日期、个人名称、社会安全号码、电话号码等等。例如,我们在 Indexer( 列表 1.1) 中把文件系统路径作为 Keyword 字段。
UnIndexed —不被分析也不被索引,但是它的值存储到索引中。这个类型适合于你需要和搜索结果一起显示的字段 ( 如 URL 或数据库主键 ) ,但是你从不直接搜索它的值。因为这种类型字段的原始值存储在索引中,这种类型不适合于存放比较巨大的值,如果索引大小是个问题的话。
UnStored —和 UnIndexed 相反。这个字段类型被分析并索引但是不存储在索引中。它适合于索引大量的文本而不需要以原始形式重新获得它。例如网页的主体或任休其它类型的文本文档。
Text —被分析并索引。这就意味着这种类型的字段可以被搜索,但是要小心字段大小。如果要索引的数据是一个 String ,它也被存储;但如果数据 ( 如我们的 Indexer 例子 ) 是来自一个 Reader ,它就不会被存储。这通常是混乱的来源,所以在使用 Field.Text 时要注意这个区别。
²         Term:Term 是搜索的基本单元。与 Field 对象类似,它由一对字符串元素组成:字段的名称和字段的值。
²         IndexSearcher: 是 lucene 中最基本的检索工具,所有的检索都会用到 IndexSearcher 工具 ;
²         Query: 查询, lucene 中支持模糊查询,语义查询,短语查询,组合查询等等 , 如有 TermQuery,BooleanQuery,RangeQuery,WildcardQuery 等一些类。
²         QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成 Query 对象。
²         Hits: 在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在 lucene 中,搜索的结果的集合是用 Hits 类的实例来表示的。
 
本文欢迎转载, 但在 转载 时请注明出处。
编程百科
2020-08-27 12:36:45
lucene 2.2单个词 搜索时(如:中国): 好像默认:TermQuery 那么 weight.getClass().getSimpleName().equals("BooleanWeight") 不成立,就用不上了,有啥办法处理? 多个词 搜索时(如:中国 上海):则可以使用.
编程百科
2020-08-27 12:36:35
相关推荐: Lucene无法单个字母查询 java博客系统 lucene3.0学习笔记2-(再学Lucene的简单例子) Lucene索引文件查看工具lukeall4.7.1 Lucene(Lucence)建立索引(字段) Lucene 索引原理 Lucene入门之索引的建立和优化 lucene创建索引
推荐群组: lucene爱好者
更多相关推荐
Lucene lucence Lucene,这是官方称谓,也有许多人叫它Lucence,做搜索和分词用的工具包.也有人说是Java下的搜索引擎框架库,见仁见智的说法罢了.不管叫什么,确实非常有用,比如做全站的搜索,其实它的用处远大于此,但凡涉及到文本搜索的地方就能用到它.我们就以做全站搜索为例,演示一下如何应用Lucene建立索引.public void index(List list) { //IArticle接口提供getName(标题)和getContent(内容) //list就是从数据库里查询出来的要建立索引的对象的列表 if(list != null && list.size() > 0) { try { //标记是否重新建立索引,true为重新建立索引 boolean flag = true; //如果已存在索引,则追加索引 if(IndexReader.indexExists(path)) { flag = false; } ChineseAnalyzer ca = new ChineseAnalyzer(); IndexWriter indexWriter = new IndexWriter("c:/lucene/index",ca,flag); Document doc = null; for(int i=0;i 0) { for(int i = 0; i < hits.length(); i++) { try { Document doc = hits.doc(i); System.out.println("结果"+(i+1)+":"+doc.get("title")+" createTime:"+doc.get("content")); //System.out.println(doc.get("path")); }catch(Exception e) { e.printStackTrace(); } } } return hits; } ///调用,主方法 public static void main(String[] args) { try { Search test = new Search(); Hits h = test.search("你好"); } catch (Exception e) { // TODO 自动生成 catch 块 e.printStackTrace(); } } }
编程百科
2020-08-27 12:36:24
相关推荐: 词典+正反向全切分/词典+正反向最大匹配切分 强大的lucene中文分词器 Lucene中文分词组件JE-Analysis1.5.0 lucene中文分词组件共享 开源分词软件 细说中文分词 开源项目Lucene的架构详细解析----用软件构架分析的方法
推荐群组: lucene爱好者
更多相关推荐
企业应用 Lucene IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的 正反向全切分 以及 正反向最大匹配切分 两种算法,是Lucene Analyzer接口的实现,代码使用例子如下:
下载地址:
Lucene中文分词器 V1.2 CSDN下载
Lucene中文分词器 V1.2 Google下载
正反向全切分算法 :
实现类 : org.mira.lucene.analysis.IK_CAnalyzer
分词效果测试,命令行如下:
java -classpath IKAnalyzer.jar;lucene-core-2.0.0.jar org.mira.lucene.analysis.IK_CAnalyzer 中华人民共和国香港特别行政区
java 代码
import  org.mira.lucene.analysis.IK_CAnalyzer  <------- 引用类    import  .....       public   class  IKAnalyzerTest  extends  TestCase {        RAMDirectory directory;      private  IndexSearcher searcher;           public   void  setUp()  throws  Exception {         directory =  new  RAMDirectory();                 IndexWriter writer =  new  IndexWriter(directory,        new  IK_CAnalyzer(),  <------- 实例化类        true );         Document doc =  new  Document();      doc.add(Field.Keyword( "partnum" ,  "Q36" ));      doc.add(Field.Text( "description" ,  "Illidium Space Modulator" ));      writer.addDocument(doc);      writer.close();      searcher =  new  IndexSearcher(directory);        }         public   void  testTermQuery()  throws  Exception {      Query query =  new  TermQuery( new  Term( "partnum" ,  "Q36" ));      Hits hits = searcher.search(query);      assertEquals( 1 , hits.length());     }    }      
该算法适合与互联网用户的搜索习惯和企业知识库检索,用户可以用句子中涵盖的中文词汇搜索,如用“人民”搜索含“人民币”的文章,这是大部分用户的搜索思维;
不适合用于知识挖掘和网络爬虫技术,全切分法容易造成知识歧义,因为在语义学上“人民”和“人民币”是完全搭不上关系的。
分词效果:
1.实现中文单词细粒度全切分
 如:中华人民共和国
 0 - 2 = 中华
 0 - 4 = 中华人民
 0 - 7 = 中华人民共和国
 1 - 3 = 华人
 2 - 4 = 人民
 2 - 7 = 人民共和国
 4 - 6 = 共和
 4 - 7 = 共和国
2.实现对专有名词的识别和切分(人名,公司名)
 如:陈文平是开睿动力通讯科技有限公司董事长
 0 - 3 = 陈文平  <------ 人名,非汉语词汇
 4 - 6 = 开睿    <------ 公司名,非汉语词汇
 6 - 8 = 动力
 8 - 10 = 通讯
 10 - 12 = 科技
 12 - 14 = 有限
 12 - 16 = 有限公司
 14 - 16 = 公司
 16 - 18 = 董事
 16 - 19 = 董事长
 18 - 19 = 长
3.对数词和量词的合理切分
 
 如:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡,20000余人受伤,近20万人无家可归。
 0 - 1 = 据
 1 - 4 = 路透社
 4 - 6 = 报道
 。。。。。。 
 18 - 20 = 官员
 20 - 22 = 星期
 20 - 23 = 星期二
 22 - 23 = 二
 24 - 26 = 29
 24 - 27 = 29日
 26 - 27 = 日
 28 - 30 = 表示
 31 - 33 = 日惹
 33 - 34 = 市
 。。。。。。
 40 - 42 = 27
 40 - 43 = 27日
 43 - 44 = 晨
 44 - 45 = 5
 44 - 46 = 5时
 45 - 46 = 时
 46 - 48 = 53
 46 - 49 = 53分
 48 - 50 = 分发
 。。。。。。
 52 - 54 = 里氏
 54 - 57 = 6.2
 54 - 58 = 6.2级
 57 - 58 = 级
 58 - 60 = 地震
 。。。。。。
 66 - 70 = 5427
 66 - 71 = 5427人
 71 - 73 = 死亡
 72 - 73 = 亡
 74 - 79 = 20000
 79 - 81 = 余人
 81 - 83 = 受伤
 84 - 85 = 近
 85 - 87 = 20
 85 - 89 = 20万人
 87 - 89 = 万人
 89 - 93 = 无家可归
最大匹配分词算法
实现类 : org.mira.lucene.analysis.MIK_CAnalyzer
效果测试命令行:
java -classpath IKAnalyzer.jar;lucene-core-2.0.0.jar org.mira.lucene.analysis.MIK_CAnalyzer 中华人民共和国香港特别行政区
分词效果:
 
 例子:中华人民共和国香港特别行政区
 
 0 - 7 = 中华人民共和国
 7 - 14 = 香港特别行政区
 例子:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡?,20000余人受伤,近20万人无家可归。
 
 1 - 4 = 路透社
 4 - 6 = 报道
 7 - 12 = 印度尼西亚
 12 - 14 = 社会
 14 - 16 = 事务
 18 - 20 = 官员
 20 - 23 = 星期二
 24 - 27 = 29日
 28 - 30 = 表示
 31 - 33 = 日惹
 34 - 36 = 附近
 36 - 40 = 当地时间
 40 - 43 = 27日
 44 - 46 = 5时
 46 - 49 = 53分
 48 - 50 = 分发
 49 - 51 = 发生
 50 - 52 = 生的
 52 - 54 = 里氏
 54 - 58 = 6.2级
 58 - 60 = 地震
 60 - 62 = 已经
 62 - 64 = 造成
 64 - 66 = 至少
 66 - 71 = 5427人
 71 - 73 = 死亡
 75 - 80 = 20000
 80 - 82 = 余人
 82 - 84 = 受伤
 86 - 90 = 20万人
 90 - 94 = 无家可归
 
编程百科
2020-08-27 12:36:12
相关推荐: Lucene学习笔记【2013-04-10更新】 搜索篇:lucene简单实例<二> Lucene入门实例。 Lucene全文检索框架+Solr搜索引擎(2018版.Java) Lucene教学视频从入门到精通(备Java基础,JavaSE,JavaEE) Lucene全文检索从入门到精通(精细讲解含代码笔记答疑服务) lucene.net 2.9.2 实现索引生成,修改,查询,删除实例 lucene索引优化多线程多目录创建索引
推荐群组: lucene爱好者
更多相关推荐
企业应用 Lucene 问个 lucene的问题 关于索引删除的~比如1,2两个文章的内容都是abc,现在文章1要删除,我怎么删除文章1的索引而不影响文章2呢
编程百科
2020-08-27 12:35:51