在Weblogic中使用Spring在EAR中打包EJB

时间:2014-11-13 03:29:46

标签: spring ejb weblogic ear

我是Spring框架的新手。我是weblogic 12.我创建了一个打包到EAR中的ejb jar。所以我有两个实体:Person和Address以及EJB PersonEjb。

public class Address implements Serializable {
    String city;  
    String state;
    // getters/setters...
}

public class Person implements Serializable {
    String name;  
    Address address;        
    // getters/setters...
}

@Stateless(name = "PersonEjbBean", mappedName = "PersonEjbBean")
public class PersonEjbBean implements PersonEjb, PersonEjbLocal {

    @Autowired
    Person person;

    public void sayHi() {     
        return "Hello " + person.getName() + " from " + person.getAddress().getCity() + ", " + person.getAddress().getState();
    }
}

我的spring config xml文件如下

beanRefContext.xml

<bean id="businessBeanFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext">
    <constructor-arg value="businessApplicationContext.xml" />
</bean>

businessApplicationContext.xml

<bean id="address" class="org.example.entities.Address">
    <constructor-arg value="Tom" />
    <constructor-arg value="IL" />
</bean> 
<bean id="person" class="org.example.entities.Person">
    <constructor-arg value="Tom" />
    <constructor-arg ref="address" />
</bean>
  

这是我的结构:
   - EAR /
   - EAR / APP-INF / lib / spring.jar
   - EAR / META-INF / application.xml
   - EAR / META-INF / manifest.mf
   - EAR / ejb.jar
   - ebj.jar有Person,Address,PersonEjb,beanRefContext.xml和businessApplicationContext.xml

我成功部署了EAR并设置了jndi条目。我有一个在本地运行的客户端执行以下操作。

Properties p = new Properties();
p.put(Context.PROVIDER_URL, "t3://localhost:7001");         
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
Context ctx = new InitialContext(p);        
PersonEjb bean = (PersonEjb) ctx.lookup("PersonEjbBean#org.example.ejbs.PersonEjb");                        
System.out.println(bean.sayHi());

bean被实例化,但是EJB中的person字段上的自动装配似乎没有发生......我如何使这个工作?

1 个答案:

答案 0 :(得分:1)

你从JNDI得到PersonEjb,所以你应该是EJB端的init Person字段。

这不是春天的事。如果你想让spring这样做,可以使用Spring ejb组件部署到JNDI并使用client来调用它。