云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Flex2.0中有三种机制与服务器交互数据:RPC(Remote precedure call), Data Service, publish-subscribe messaging
后面两种需要Flex Enterprise Service的支持.
RPC: 发送异步请求到远程服务,并将结果直接返回给Flex应用.
RPC服务可以是HTTP URL, SOAP兼容的Web service, Java Web应用的Java对象. 客户端的RPC服务组件是HTTPService, WebService和Remoting Object.
HTTPService和WebService的使用不需要Flex Enterprise service的支持. Remoting Object必须有Flex Enterprise service的支持.
缺省情况下,Flash Player不允许跨域访问.因此,RPC服务必须在同一个域中,或者在crossdomain.xml文件中定义.

RemoteObject组件使得可以使用服务端对象的方法, 而不需要将其配置成WebService. 你需要将服务端对象配置成远程服务目标.
WebService组件使得可以与Web Services交互. Web Services需要在WSDL文件中配置
HTTPService组件可以接收和发送HTTP GET, POST请求. HTTPServie在不能将接口定义为WebSerice和RemotingObject的时候,是一个非常好的选择.
比如: JSP, Servlet, Asp等等.

Flex应用将会被编译成二进制的SWF文件,送到客户端. 当Flex应用与外部服务交互时, SWF不需要重新编译,也不需要再次刷新.

可以直接使用Web Services或者HTTP Services, 而不需要在服务器的文件中进行配置. 方法如下:
在HTTPService组件中在url属性中直接引用wsdl值, 而不使用destination属性, 并且将useProxy属性设置为false
<mx:HTTPService
id="yahoo_web_search"
url="http://api.search.yahoo.com/WebSearchService/V1/webSearch"
useProxy="false"/>

<mx:WebService
id="macr_news"
wsdl="http://weblogs.macromedia.com/mxna/webservices/mxna2.cfc?wsdl"
useProxy="false"/>

或者在Action Script中这样使用:
// Import required packages.
import mx.rpc.http.HTTPService;
import mx.rpc.soap.WebService;

// Declare an HTTPService component.
private var yahoo_web_search:mx.rpc.http.HTTPService = new HTTPService();
yahoo_web_search.url =
"http://api.search.yahoo.com/WebSearchService/V1/webSearch";
empoyeeHTTP.useProxy = false;

// Declare a WebService component.
private var macr_news:mx.rpc.soap.WebService = new WebService();
macr_news.wsdl = "http://weblogs.macromedia.com/mxna/webservices/mxna2.cfc?wsdl";
macr_news.useProxy = false;

RPC Service组件的destination属性引用一个Flex Enterprise Services定义的一个目标.

posted @ 2006-03-01 01:16 云自无心水自闲 阅读(1680) | 评论 (0)编辑 收藏

今天一个项目要使用RMI,于是开始写了一个小示例运行一下。
1. 写接口继承Remote,并给出要实现的方法
2. 写一个方法继承UnicastRemoteObject,并实现上面的接口
3. 写Server,进行Naming.rebind
4. 运行rmic(在JDK的bin目录,而不是在JDK\jre\bin目录下)生成Stub。
这中间有一个小麻烦,举例来说如果第2步中的类名是TestObj,放在com.test包中。
那么典型的目录结构是WEB-INF\classes\com\test目录下有一个TestObj.class
这时候需要在WEB-INF\classes目录下运行命令 rmic com.test.TestObj
注意:如何运行的路径和方式不正确的话, 会出现找不到TestObj.class的错误.
5. 写Client端代码,Naming.lookup. 然后调用远程方法。
6. 运行start rmiregistry
7. java com.test.TestObjServer, 这时候出问题了,总是报告说找不到TestObj_Stub.class,奇怪啊,这个Class明明很安静地躺在目录下啊?
经过一番查找,最后目标锁定在java的版本上,因为机器安装了Oracle,而Oracle自带了JDK,而且版本较低,在环境变量中调换了JDK使用的顺序,重新运行命令。
成功了!
8. 生成policy.txt
9. java -Djava.security.policy=policy.txt TestObjClient
得到正确结果!

注意点:
启动server时如果遇到找不到stub问题,原因是rmiregistry找不到stub,而不是java com.Server找不到stub,解决方法,在stub的类同一个目录下启动rmiregistry.

posted @ 2006-03-01 00:58 云自无心水自闲 阅读(3444) | 评论 (0)编辑 收藏

spring不重复发明轮子。Spring使你能创建一个一致的、可管理的系统应用。

Spring可以集成的框架包括:
1. 持久框架
Hibernate
JDO implementation
TopLink
Apache OJB
iBATIS

所有的集成方式是统一的。Spring使用DAO接口,都抛出DataAcessException异常。
Spring提供helpers(比如模板)实现统一的编程风格。
如果要使用SQL-BASED的数据存取,那么Spring自身的JDBC Framework是适合的。
重要的是:Spring允许你混合使用数据存取的方法---比如:Hibernate和JDBC代码共用一个数据库连接。这对于复杂的应用来说是非常有益的,因为使用单独的持久框架很可能不能完成所有的持久操作。

2. Web framework
Struts
WebWork
Spring MVC
Tapestry
JSF

Spring对于Web框架的集成与持久框架的集成是不一样的。Spring提供了自己完整的Web框架。Spring在与其他Web框架很好集成的同时,提供一些特殊的便利给自己的Web框架。比如:使用一些先进的依赖注入功能,或者应用AOP建议到Web控制中。

3. AOP Framework
Spring提供基于代理的AOP框架,这可以解决大多数J2EE应用的问题。
但是如果你需要使用一些基于代理的框架无法提供的功能,比如:用new创建对象,而且不由任何工厂管理。
为支持这种需求,Spring集成了AspectJ和AspectWerkz,2种最好的基于类交织的AOP框架。

4. Other Framework
Spring还可以和许多框架集成,Quartz Scheduler,Jasper Reporter, Velocity,FreeMaker 模板引擎。

posted @ 2006-02-25 22:14 云自无心水自闲 阅读(314) | 评论 (0)编辑 收藏

一个统一的异常层次结构对于提供服务抽象是必需的. 最重要的就是org.springframework.dao.DataAccessException以及其子类了. 需要强调的是Spring的异常机制重点在于应用编程模型. 与SqlException和其他数据存取API不同的是: Spring的异常机制是为了让开发者使用最少, 最清晰的代码.

DataAccessException和其他底层异常都是非检查性异常(unchecked exception). spring的原则之一就是基层异常就应该是非检查性异常. 原因如下:
1. 基层异常通常来说是不可恢复的.
2. 检查性异常将会降低异常层次结构的价值.如果底层异常是检查性的, 那么就需要在所有地方添加catch语句进行捕获.
3.try/catch代码块冗长混乱, 而且不增加多少价值.
使用检查异常理论上很好, 但是实际上好象并不如此.
Hibernate3也将从检查性异常转为非检查性异常.

posted @ 2006-02-17 00:08 云自无心水自闲 阅读(435) | 评论 (0)编辑 收藏

1. 创建J2EE工程
2. 在windows->preference->MyEclipse正确配置Tomcat5(需要Tomcat5以上)设置
3. Deployee MyEclipse J2ee Project to server(也就是点工具栏中MyEclipse的第1个按钮)
4. 点击Add, 将工程部署到Tomcat中.
5. Run Appliction Server, 选择Tomcat5
然后, 在Jsp中设置断点, IE中浏览相应的网页时, 就会跳到Debug Perpective中了, 在视图中可以在.jsp中调试.


遇到的问题和解决:
如何Tomcat设置的JRE路径是指到完整的JDK的bin目录, 比如: d:\jdK1.5\bin
在Run Application Server时会遇到
" A configuration error occurred during startup. Please verify the
preference filed with the prompt: Transport dt_socket failed to
initialize, rc = 509. " 错误.
解决方法: 把d:\jdK1.5\jre\bin目录下的dt_socket.dll拷贝到d:\jdK1.5\bin目录下.

posted @ 2006-02-16 16:19 云自无心水自闲 阅读(2685) | 评论 (0)编辑 收藏

在main.jsp中加入下面的语句
<jsp:include page="footer.jsp" flush="true" />

结果main.jsp中的中文能够正确显示, 而footer.jsp的页面中文乱码.

方法:
在footer.jsp中, 添加<%@ page contentType="text/html;charset=GBK"%>这一行.

posted @ 2006-02-16 10:30 云自无心水自闲 阅读(1648) | 评论 (0)编辑 收藏

Spring这个三角形一共有三条边
第一条边: IoC
第二条边: AOP
这两条边不需要多说了.

那么第三条边是什么呢:
3. Service Abstraction

Spring使用service abstraction而不依赖于标准J2ee的API(比如: JNDI)或者其他的开源项目(比如Hibernate), 原因如下:
1. 是否依赖于特定的API取决于API的本身而不是起源(原文:Whether it's desirable to depend on a particular API depends more on the nature of that API than its provenance). 比如: 如果依赖于一个特定的API导致单元测试困难的话, 就应该进行抽象封装. 典型的例子就是: JavaMail.
2. 依赖于Spring, 可以把依赖关系控制在一个比较小的范围之内, 只与一系列接口相关. 这种依赖简单而明确.
3. Spring的抽象接口适用范围广.  而如果你绑定了JTA, 那么你如果使用的是Tomcat的话, 就还需要加一个JTA的第三方实现.
4. Spring的API是面向程序开发员的, 而不是藏在幕后的. 比如JTA就是藏在EJB之后,因此JTA的异常处理就非常麻烦.

正是这三条边组成了一个稳定的Spring三角形.

posted @ 2006-02-15 22:51 云自无心水自闲 阅读(275) | 评论 (0)编辑 收藏

仅列出标题
共29页: First 上一页 21 22 23 24 25 26 27 28 29