返回首页
当前位置: 主页 > 编程语言 > JAVA教程 >

WebLogic下开发EJB3遇到的问题

时间:2014-02-21 01:34来源:电脑教程学习网 www.etwiki.cn 编辑:admin

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

EjbTestBean 远程调用

1.jboss Jnd名子EjbTestBean/remote

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

2weblogic中文培训教程配置 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 11gMDB功能,发现尽管引入了weblogic.jar,可是仍然有很多J2EEClass找不到。我本地没有安装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

------分隔线----------------------------
标签(Tag):java java技巧 java实例教程 java源代码 java基础教程
------分隔线----------------------------
推荐内容
猜你感兴趣