之前使用流式build模式来创建bean对象,但是在使用BeanUtils.copyProperties方法时出现异常。
查看此方法的源码发现,此方法会对源对象和目的对象做一次可读可写判断:
getPropertyUtils().isReadable(orig, name) && getPropertyUtils().isWriteable(dest, name)
如果操作的对象不符合JAVA BEAN规范,就会返回false.
通过oozie job -kill XXXX,无法将其杀死,然后将oozie重新启动,重启之后发现该workflow仍然僵死,显示处于running状态,猜想应该是oozie所对应的数据库中存有该wf的状态信息,于是想去数据库中将此wf的信息删除,进入数据库中发现无法查询数据库表,原来是表被lock,原因找到,于是重启mysql服务,再重启oozie,一切ok
重启hadoop job
重启oozie
hadoop-daemons.sh start jobtracker
启动脚本 脚本说明
start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
由于用户权限的限制,所以采用手动编译,如果具有root权限的话可以直接下载XAMPP包
####编译Apache Httpd
去官网下载安装包、解压
容易产生的问题是配置的时候提示缺少APR、APR-UTIL、PCRE 的lib,这个要手动下载,最新的httpd-2.4.10,直接将下载解压后的APR、APR-UTIL 分别放到httpd-2.4.10(源包)的srclib的apr、apr-util下,编译pcre到指定位置,然后再编译httpd,如下:
./configuration --prefix=/home/.../httpd-2.4.10 --with-pcre=/home/.../pcre/
####编译PHP
设置hession调用超时的配置如下(默认为20秒,可根据业务场景自己调整):
<bean id="gateConfigFacade" class="org.springframework.remoting.caucho.HessianProxyFactoryBean" lazy-init="true" >
<property name="serviceUrl" value="${mvn.config.url}/gateConfigFacade" />
<property name="serviceInterface" value="com.changyou.npt.config.facade.gate.GateConfigFacade" />
<property name="proxyFactory">
<bean class="com.caucho.hessian.client.HessianProxyFactory" p:hessian2Request="true" p:readTimeout="20000" p:connectTimeout="20000" p:hessian2Reply="true" />
####场景 对象调用自身具有事务传播的方法,同时使事务有效。 ####解决方法 使用AopContext.currentProxy()获取此类的AOP代理对象,用代理对象调用自身方法。注意,使用此解决方式,在spring配置文件的aop配置要添加expose-proxy="true"。 ####代码实现 Spring相关配置:<aop:aspectj-autoproxy proxy-target- expose-proxy="true"/> ####业务代码 在deliverItemAsyncCallback方法中调用deliverCallBackBusiness方法,并且使其事务有效。
将原有的RMI服务调用的权限控制系统改写成Hession服务调用时,遇到了LazyInitializationException异常。此权限系统用的是ORM框架,分析产生此问题的原因是Hessian序列化对象时,此对象中包含Hibernate的集合映射,此时Hibernate的session已经关闭。<br / >
解决方法
针对Hibernate的PersistentCollection订制一个Serializer。
实现: 继承AbastractSerializer,重写WriteObject方法,再重写SerializerFactory,当对Hibernate 集合进行序列化的时候,使用定制化的序列化Class。
import com.caucho.hessian.io.AbstractHessianOutput;
import com.caucho.hessian.io.AbstractSerializer;
import com.caucho.hessian.io.CollectionSerializer;
@(系统架构)[分布式] ####架构 讲这之前先说一下我们的系统架构,整个电商平台分为商品系统、交易系统、资金系统、游戏通信系统,个系统之间通过Hessian服务调用。业务流程是游戏通过通信系统上架商品,商品系统处理商品,用户下单通过交易系统,用户支付订单时,交易系统调用资金系统,用户支付成功后,资金系统同步和异步回调支付结果。若支付成功,交易系统通知通信系统给买家发货,并通知商品系统,该商品已成功售出。 ####问题 由于是系统间服务调用,不能保证两服务之间的数据处理时一致的。拿下单举例,用户下单,交易系统通知商品系统减库存,如果减库存成功,但订单生成失败,此时就会出现数据不一致的情况:没有生成有效的订单,但是已经减库存了。
我们并没有采用分布式事务管理框架,而是采用幂等性和记录表进行处理的。
幂等性:服务多次调用不会影响预期结果。