Hessian HessianProxy.invoke(HessianProxy.java:197)

今天中午接到一個小需求:一訂單系統的小夥伴需要訪問我產品中心的一個表,那鐵定不能直接讀我PC(產品中心)的表啊,於是乎我需要寫一個hessian接口給他。一頓神操作,不到十分鐘,接口完成,如下所示:

//java bean
public class LogisticsLanguagesTrackingUrl{
    int logistics_id;
    int languages_id;
    String pc_url;
    String mobile_url;
    String app_url;
 ...省略set,get,toString方法
 }
//接口
public List<LogisticsLanguagesTrackingUrl> getLogisticsLanguagesTrackingUrlByLoidAndLaid(Integer loId, Integer laId)
//實現
@Override
	public List<LogisticsLanguagesTrackingUrl> getLogisticsLanguagesTrackingUrlByLoidAndLaid(Integer loId, Integer laId) throws Exception {
		return productsManager.getLLTU(loId,laId);
	}

public List<LogisticsLanguagesTrackingUrl> getLLTU(int lo,int la) throws Exception {
		return productsDao.getLLTU(lo,la);
	}

public List<LogisticsLanguagesTrackingUrl> getLLTU(int lo, int la) throws Exception {
		return mapper.getLogisticsLanguagesTBL(lo,la);
	}
<select id="getLogisticsLanguagesTBL" resultType="com.litb.pc.common.entity.bean.resource.LogisticsLanguagesTrackingUrl">
		select * from logistics_languages_tracking_url
		where logistics_id = #{loId}
		and languages_id = #{laId};
	</select>

一切都是那麼的自然與隨意。接下來就是幹什麼呢?測試?不存在的!直接在羣裏大吼一聲,開發好了,並@訂單的小夥伴。

過了大約一分鐘吧,訂單的小夥伴發回我一串包錯信息並附加一個微笑的表情。

com.caucho.hessian.client.HessianConnectionException: 500: java.io.IOException: Server returned HTTP response code: 500 for URL: http://xxx:8083/products.api
	at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:197)
	at com.sun.proxy.$Proxy2.getLogisticsLanguagesTrackingUrlByLoidAndLaid(Unknown Source)

心想這還不簡單嗎,這不是500了嗎,這不是鏈接異常了嗎,那鐵定是項目沒有部署好唄。再次一頓神操作,依然報同樣的錯。此時已經意識到事情沒有這麼簡單,先查看整體流程,發現沒毛病,然後跟蹤代碼發現已調用mapper方法,返回Javabean的時候就報錯,此時已經百思不得其解,這數據庫和hessian鏈接有啥關係。

然後開始了漫長的查找錯誤的過程。。。。。

沒查到,上個廁所,梳理一下hessian原理。突然恍然大悟,是不是我的Javabean沒有序列化,回來一看,果然如此。

改成如下:

public class LogisticsLanguagesTrackingUrl implements Serializable {
    int logistics_id;
    int languages_id;
    String pc_url;
    String mobile_url;
    String app_url;
    }

測試通過,一切正常 。
所以說這個原理是有用的,但是隻懂原理不實踐是屁用沒有的,因爲你實踐的時候不一定能想到原理這檔子事。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章