注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

IOS & JAVA KEY

(iMilo)

 
 
 

日志

 
 
关于我

All the splendor in the world is not worth a good friend!! Hello my friend!!

网易考拉推荐

依赖注入{EJB3入门实例}  

2010-03-11 09:03:05|  分类: Ejb3 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

引入:JNDI查找时把客户端与实际的服务端实现解耦的关键步骤,但是,直接使用一个字符串进行JNDI查找并不优雅,原因如下:

①     客户端与服务端必须有一致的基于字符串的名字。它没有在编译时得到认证或部署是得到检查;

②     从JNDI返回的服务对象的类型没有在编译时进行检查,有可能在运行时出现转换错误;

③     冗长的查找代码,有着自己的try-catch代码块 ,在应用之间是重复杂乱的。

 

EJB中依赖注入普通EJB使用:

@EJB(beanName = “SomeInterfaceBean”)

SomeInterface someInterface;

beanName属性指定EJB类名(不带包名),其另一个属性mappedName指定Bean实例的JNDI名。

 

EJB中依赖注入数据源使用

@Resource(mappedName = "数据源JNDI名称")

DataSource dataSource;

如果JNDI对象在本地(java:comp/env)JNDI目录中,只需给定他的映射名称即可,不需要带前缀,如下面例子注入一个消息connection factory 和一个 message queue

@Resource(mappedName = “ConnectionFactory”)

QueueConnectionFactory factory;

 

@Resource(mappedName = “queue/A”)

Queue queue;

 

对于“well-known”对象,@Resource注释可以不指定JNDI名就能注入他们,他通过变量的类型就能获得他的JNDI名。

       @Resource

       TimerService tms;

 

       @Resource

       SessionContext ctx;

EG:

①    建立两个接口:HelloWorld.java和Injection.java代码如下:

HelloWorld.java

package com.teana.ejb3;

public interface HelloWorld
      {
           String sayHello(String name);
      }

 

Injection.java

package com.teana.ejb3;
/**
 * @author TEANA -- 2010-2-22
 * 依赖注入实现类接口
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */

public interface Injection
{
 String sayHello();
}

②    编写两个实现类HelloWorldBean.java和InjectionBean.java代码如下:

HelloWorldBean.java

package com.teana.ejb3.impl;

import javax.ejb.Remote;
       import javax.ejb.Stateless;

import com.teana.ejb3.HelloWorld;
       @Stateless
       @Remote({HelloWorld.class})
        public class HelloWorldBean implements HelloWorld
       {
       public String sayHello(String name)
        {

return name + "说:你好,世界!";
}
      }

 

package com.teana.ejb3.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.sql.DataSource;

import com.teana.ejb3.HelloWorld;
import com.teana.ejb3.Injection;
/**
 * @author TEANA -- 2010-2-22
 * 依赖注入实现类--注入HelloWorld
 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释
 */
@Stateless
@Remote({Injection.class})
public class InjectionBean implements Injection
{
 //注入HelloWorldBean
 @EJB(beanName = "HelloWorldBean")
 HelloWorld helloWorld;
 //注入数据源
 @Resource(mappedName = "java:/teanaDS")
DataSource dataSource;
 
 @Override
 public String sayHello()
 {
  Connection conn = null;
  Statement st = null;
  ResultSet rs = null;
  String str = "";
  try
  {
   conn = dataSource.getConnection();
   st = conn.createStatement();
   rs = st.executeQuery("SELECT * FROM google");
   if(rs.next())
    str = rs.getString(2);
  }
  catch (SQLException e)
  {
   e.printStackTrace();
  }
  finally
  {
   try
   {
    rs.close();
    st.close();
    conn.close();
   }
   catch (SQLException e)
   {
    e.printStackTrace();
   }
  }
  return helloWorld.sayHello("TEANA 注入者" + str);

}

  评论这张
 
阅读(1076)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017