File: AnotherBean.java
import javax.ejb.Stateless;
@Stateless
public class AnotherBean implements AnotherBeanLocal {
public void doAnother(){
System.out.println("from another bean");
}
}
File: AnotherBeanLocal.java
public interface AnotherBeanLocal {
public void doAnother();
}
File: Employee.java
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.PostRemove;
@Entity
public class Employee implements java.io.Serializable {
private int id;
private String firstName;
private String lastName;
@Id
@GeneratedValue
public int getId() {
return id;
}
@PostRemove
public void postRemove()
{
System.out.println("@PostRemove");
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String first) {
this.firstName = first;
}
public String getLastName() {
return lastName;
}
public void setLastName(String last) {
this.lastName = last;
}
}
File: EmployeeBean.java
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
@Stateless
@EJB(name = "audit", beanInterface = AnotherBeanLocal.class)
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote {
public EmployeeBean() {
}
public void doAction() {
System.out.println("doAction");
try {
Context ctx = new InitialContext();
AnotherBeanLocal a = (AnotherBeanLocal) ctx.lookup("java:comp/env/audit");
a.doAnother();
} catch (NamingException e) {
throw new EJBException(e);
}
}
}
File: EmployeeServiceLocal.java
import java.util.Map;
import javax.ejb.Local;
@Local
public interface EmployeeServiceLocal {
public void doAction();
}
File: EmployeeServiceRemote.java
import javax.ejb.Remote;
@Remote
public interface EmployeeServiceRemote {
public void doAction();
}
File: jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
File: Main.java
import javax.ejb.EJB;
import javax.naming.InitialContext;
public class Main {
public static void main(String[] a) throws Exception {
EmployeeServiceRemote service = null;
// Context compEnv = (Context) new InitialContext().lookup("java:comp/env");
// service = (HelloService)new InitialContext().lookup("java:comp/env/ejb/HelloService");
service = (EmployeeServiceRemote) new InitialContext().lookup("EmployeeBean/remote");
service.doAction();
}
}
分享到:
相关推荐
下面是一个简单的JNDI查找EJB的步骤: 1. 创建`InitialContext`:这是JNDI操作的第一步,通常在客户端或EJB内部进行。 ```java Properties props = new Properties(); props.put(Context.INITIAL_CONTEXT_FACTORY, ...
2. **JNDI查找**:如何在客户端代码中使用JNDI查找EJB实例。 3. **接口编程**:理解EJB的接口定义,以及如何通过接口调用Bean的方法。 4. **部署描述符**:EJB的部署信息通常在XML文件(如ejb-jar.xml)中定义,描述...
当两个EJB(例如EJB A和EJB B)位于同一个应用服务器上时,可以直接使用默认的JNDI上下文进行查找,而无需提供额外的JNDI入口信息。这种方式相对简单,但在JNDI名字发生改变时,代码需要调整。具体实现步骤如下: `...
通过JNDI,开发者可以使用一个全局唯一的名称来查找EJB,这个名称称为JNDI名称。JNDI查找通常分为两个步骤:查找EJB的引用(lookup)和创建实际的EJB实例(create或activate)。 1. JNDI查找过程: - 定义JNDI名称...
在EJB3中,可以使用`@EJB`注解来自动注入另一个EJB组件。例如: ```java @Stateless public class MyService { @EJB private OtherService otherService; } ``` 如果需要查找并引用EJB组件,可以使用`javax....
下面是一个简单的JNDI查找EJB的Java代码示例: ```java import javax.naming.InitialContext; import javax.naming.NamingException; import javax.ejb.EJB; public class EJBClient { @EJB private ...
EJB3.0另一个重大改变是引入了Java Persistence API(JPA)来替代EJB2.0的实体Bean。JPA允许直接将领域模型类(Domain Model)持久化到数据库,避免了EJB2中实体Bean和Model类之间的转换。EntityManager作为JPA的...
在`EJBTest`中,我们创建了一个JNDI上下文,并通过它查找并创建EJB实例,然后调用`hello()`方法。注意,`lookup`方法中的“ejb/HelloWorld”是EJB的JNDI名称,它在部署描述符中被定义。 EJB2.0的开发还包括了实体...
创建一个或多个EJB项目,例如`EJB3`,每个EJB项目都将对应一个jar包,建议遵循命名规范,如`XXXEJBModule.jar`。同样,这些EJB项目也需要添加到`WEBEJB3`项目中。 4. **部署到WebSphere**: 使用RAD,可以直接...
这可以通过Eclipse中的EJB视图完成,选择“Add EJB”->“Session”来创建一个新的Session Bean。在这个示例中,我们创建了一个名为`hello`的Session Bean类。 **代码示例**: ```java package com.first.ejb; ...
2. **创建EJB项目**:使用IDE(如Eclipse或IntelliJ IDEA)创建一个EJB 3.0项目,并编写必要的Bean和持久化配置。 3. **编译和打包**:将EJB项目编译为JAR或WAR文件,包含所有必要的类和资源。 4. **部署EJB**:将...
7. **安全性考虑**:在使用JNDI查找EJB时,应确保JNDI名称的安全性,避免被恶意用户滥用。此外,EJB还提供了细粒度的安全控制,例如角色基访问控制(Role-Based Access Control,RBAC),可以根据用户的角色决定他们...
JNDI(Java Naming and Directory Interface)是Java中用于查找和绑定对象的一个接口,它在EJB中扮演着至关重要的角色,尤其是在查找和访问企业 Bean 实例时。这个名为“EJB中JNDI的使用源码例子.rar”的压缩包,很...
首先,配置JNDI上下文,并查找EJB的JNDI名称,这通常是在服务器的部署描述符(如ejb-jar.xml或web.xml)中指定的: ```java import javax.naming.InitialContext; import javax.naming.NamingException; import ...
EJB3.0是EJB规范的一个重大改进,它引入了注解驱动的编程模型,大大简化了EJB的开发和部署流程。在本教程中,我们将关注如何在WebLogic 11g服务器上发布和使用EJB3.0项目。 1. **无状态会话Bean(Stateless Session...
`context.lookup("topic/destination")`查找并返回一个Topic对象。 6. **创建生产者**: 使用Topic会话创建一个TopicPublisher,它负责发布消息到Topic。`publisher = session.createPublisher(topic);` 7. **...
JNDI配置主要涉及两个核心属性:`Context.INITIAL_CONTEXT_FACTORY` 和 `Context.PROVIDER_URL`。 - **`Context.INITIAL_CONTEXT_FACTORY`**:该属性指定用于创建`InitialContext`实例的工厂类名。 - **`Context....
1. **查找EJB组件**:开发者可以使用JNDI名称来查找部署在应用服务器上的EJB。例如,一个名为`MySessionBean`的会话bean可能有一个JNDI名称`java:global/myApp/MySessionBean!com.example.MySessionBeanInterface`。...
【标题】"javax.ejb.jar.zip" 是一个与Java企业版(Java EE)相关的压缩文件,其中包含`javax.ejb.jar`这个核心组件。该组件是Java平台企业版的一部分,主要用于实现企业级Java应用中的Enterprise JavaBeans(EJB)...