程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> WebLogic下開發EJB3遇到的問題

WebLogic下開發EJB3遇到的問題

編輯:關於JAVA
 

1.webLogic部署方法和如何查看JNDI

如EjbTestBean類 遠程調用

1.jboss Jnd名子EjbTestBean/remote

2.webLogic名子EjbTestBean#接口全路徑(com.IejbTest)如EjbTestBean#com.IejbTest

2.weblogic中文培訓教程配置 JDBC 數據源

可查看相關資料,這裡不多說

 

5. WebLogic中必須要加入mappedName

Ejb遠調調用類中一定要指定mappedName

@Stateless(mappedName="EjbTest")中的mappedName屬性

 

 

 

6. WebLogi不支持從得到父類的泛化參數

Type genType = clazz.getGenericSuperclass();

想得到一個父類中的泛化參數,在WebLogic是得不到的

 

7. WebLogic EQL語句

要以select , update ,delete開頭

Count()裡要放入對象,不能是 * 號

Fetch遇到的問題 有fetch的語句不能用select count(s) from SpBean as s left join fetch s.lbBean來查詢,因為fetch會立即加載,但加載的時候沒有在返回的值中找到與之對應的外鍵ID,所以會出錯

 

WebLogic有時返回List 會出問題,不知是為什麼,可以自己寫一個List對象繼承ArrayList

這樣也就實現等於實現了List接口,也是一個List對象

 

 

8. WebLgic一對多配置方法

/** 商品端

* CascadeType.REMOVE這裡不級連刪除,因為當商品表中有多於1條數據時,級連刪除會出錯

* @return

*/

@OneToMany(cascade={CascadeType.PERSIST},fetch=FetchType.LAZY,mappedBy="lbBean")

@OrderBy(value="spId desc")

public List<SpBean> getSpSet() {

return spSet;

}

 

 

/**

* 類別

*/

@ManyToOne(cascade={CascadeType.REFRESH})

@JoinColumn(name="lb_id",insertable=false,updatable=false)

public LbBean getLbBean() {

return lbBean;

}

//商品Bean中要實例化類別Bean

//並且在添加和修改時要指定這個Bean 中的Id,不然會出錯的

private LbBean lbBean = new LbBean();要初如化

 

 

這樣就可以對商品表中的數據操作,但是在對類別表中的刪除時會有問題

JPA不支持對類別表中的刪除,同時刪除商品表中的多條數據

這個時候我們就要自己寫刪除語句,先刪除商品表,然後刪除類別表

 

 

 

9. Ejb WebService 服務端

 

1,返回List 對象List 中包含一個對象,這些是可以直截返回的

@WebMethod

@WebResult(name="List")

public List<TestBean> returnListAA(String st) {

 

List list = new ArrayList<UserBean>();

list.add(new TestBean(11,"dddd"));

list.add(new TestBean(333,"eeee"));

return list;

}

2.返回Bean 對象

@WebMethod

@WebResult(name="UserBean")

public UserBean getUserBean(String st){

UserBean bean = new UserBean("22","落地燈霜"+st);

return bean;

}

3.返回HashMap對象 要經過封裝

1> MapValues 類

 

 

 

public class MapValues {

 

public String key;

public Object value;

 

public MapValues(){}

public MapValues(String key,Object value){

this.key = key;

this.value = value;

}

}

 

2> MapValuesAdapter類 繼承XmlAdapter,實現裡面的方法

 

public class MapValuesAdapter extends XmlAdapter<MapValues[], HashMap<String, Object>>{

 

/**

* 將HashMap轉化為數組

*/

@Override

public MapValues[] marshal(HashMap<String, Object> arg0) throws Exception {

MapValues[] mv = new MapValues[arg0.size()];

int i = 0;

for(Entry<String, Object> en:arg0.entrySet()){

mv[i++] = new MapValues(en.getKey(),en.getValue());

}

return mv;

}

 

/**

* 將數組對象轉化為HashMap

*/

@Override

public HashMap<String, Object> unmarshal(MapValues[] arg0) throws Exception {

HashMap<String, Object> hm = new HashMap<String, Object>();

for(MapValues mv:arg0){

hm.put(mv.key, mv.value);

}

return hm;

}

 

}

 

3> UserHashMap類 在類中HashMap屬性中加入@XmlJavaTypeAdapter(MapValuesAdapter.class)

這些就可以傳遞HashMap對象

 

public class UserHashMap {

 

@XmlJavaTypeAdapter(MapValuesAdapter.class)

public HashMap<String, Object> hMap;

 

 

 

 

}

 

用法:

@WebMethod

@WebResult(name="UserHashMap")

public UserHashMap returnHashMap(String st) {

HashMap<String, Object> map = new HashMap<String, Object>();

map.put("111", "aaaa");

map.put("22", new UserBean("333","rrr"));

map.put("33", new TestBean(44,"ttt"));

 

UserHashMap uhm = new UserHashMap();

uhm.hMap = map;

 

return uhm;

}

 

4,傳入List對象,HashMap對象,Bean 對象,返回List對象

@WebMethod

@WebResult(name="List")

public List<TestBean> search( List list,

UserHashMap seachMap,

TestBean bean){

 

 

return ejbLog.testLog("我是日志");

}

 

 

WebSerice類中的要加入的注解

@WebService(name = "IEjbTest", serviceName = "EjbTestService",targetNamespace="http://192.168.0.127")

@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)

public class EjbTest implements IEjbTest {

 

這個服務端就寫好了,WebLgic提供有測試的頁面可以在裡面測試一下

 

3.生成Weblogic客戶端包

供JNDI查找調用

 

今天嘗試著測試一下Weblogic 11g的MDB功能,發現盡管引入了weblogic.jar,可是仍然有很多J2EE的Class找不到。我本地沒有安裝Weblogic,只好一個類庫,一個類庫的找。後來在網上發現,原來在Weblogic 10以後,應該使用wlfullclient.jar來取代weblogic.jar。可以使用下面的辦法生成wlfullclient.jar。

Creating a wlfullclient.jar File for a Client Application

Use the following steps to create a wlfullclient.jar file for a client application:

  1. Change directories to the server/lib directory.
cd WL_HOME/server/lib
  1. Use the following command to create wlfullclient.jar in the server/lib directory:
java -jar ../../../modules/com.bea.core.jarbuilder_1.0.0.0.jar
  1. You can now copy and bundle the wlfullclient.jar with client applications.
  2. Add the wlfullclient.jar to the client application's classpath.

 

生成的wlfullclient.jar放到客戶端服務器Lib中,

如放入Jboss

D:\Jboss\jboss-4.2.2.GA\server\default\lib  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved