当前位置:编程学习 > JAVA >>

MDB中的依赖注入(JavaEE)

1.Student.java
    
package com.bean;

import javax.ejb.*;

@Remote
public interface Student
{
void add(String name , String sex 
, int age)throws Exception;
}

2.StudentBean.java

package com.bean;

import java.sql.*;
import javax.sql.*;
import javax.ejb.*;
import javax.annotation.*;

@Stateless(name="StudentBean")//内部标志名
public class StudentBean
implements Student
{
@Resource(name="test")//资源注入,test是数据源的jndi名
private DataSource ds;
public void add(String name , String sex 
, int age) throws Exception
{
Connection conn = null;
PreparedStatement pstmt = null;
try
{
conn = ds.getConnection();
pstmt = conn.prepareStatement("insert into student values(001 , ? , ? , ?)");
pstmt.setString(1 , name);
pstmt.setString(2 , sex);
pstmt.setInt(3 , age);
pstmt.executeUpdate();
}
finally
{
pstmt.close();
conn.close();
}
}
}




3.MessageBean.java

package com.bean;

import javax.ejb.*;
import javax.jms.*;

@MessageDriven(mappedName = "MessageBean", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })//MessageBean是消息目的jndi绑定名
public class MessageBean implements MessageListener {

@EJB(name="StudentBean")//ejb注入
private Student stu;
public void onMessage(Message msg) {
// TODO Auto-generated method stub
try {
if (msg instanceof MapMessage) {
MapMessage map=(MapMessage)msg;
String name=map.getString("name");
String sex=map.getString("sex");
int age=map.getInt("age");
stu.add(name, sex, age);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

}




4.测试主文件:MessageSender。java


package com.test;

import javax.jms.*;
import javax.naming.*;
import java.util.Properties;

public class MessageSender {
public void sendMessage() throws NamingException, JMSException {

Context ctx = getInitialContext();
ConnectionFactory connFactory = (ConnectionFactory) ctx
.lookup("message");//message是工厂的jndi名
Destination dest = (Destination) ctx.lookup("MessageBean");//MessageBean是消息目的的jndi绑定名
Connection conn = connFactory.createConnection();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer sender = session.createProducer(dest);
sender.setDeliveryMode(DeliveryMode.PERSISTENT);
sender.setTimeToLive(20000);

MapMessage map=session.createMapMessage();
map.setString("name", "jingxuan");
map.setString("sex", "male");
map.setInt("age", 20);
sender.send(map);
session.close();
conn.close();
}

private Context getInitialContext() {
final String INIT_FACTORY = "weblogic.jndi.WLInitialContextFactory";
final String SERVER_URL = "t3://localhost:7001";
Context ctx = null;
try {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, INIT_FACTORY);
props.put(Context.PROVIDER_URL, SERVER_URL);
ctx = new InitialContext(props);
} catch (NamingException ne) {
System.err.println("不能连接WebLogic Server在:" + SERVER_URL);
ne.printStackTrace();
}
return ctx;
}

public static void main(String[] args) throws Exception {
MessageSender mp = new MessageSender();
mp.sendMessage();
}
}



5.上述文件说明:
  (1)我用myeclispe吧前面三个文件(1,2,3)打包成jar文件部署到weblogic上,这个过程完全没有问题,没有报任何错误。
  (2)设计思路是:利用weblogic的jms传递消息,测试下mdb通过依赖注入是否可以调用无状态session bean.
   (3) 部分weblogic服务器部署图片:
      1.
      2.
         
      3.
          
   (4)异常信息:
        
      
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,