我是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字段上的自动装配似乎没有发生......我如何使这个工作?
答案 0 :(得分:1)
你从JNDI得到PersonEjb,所以你应该是EJB端的init Person字段。
这不是春天的事。如果你想让spring这样做,可以使用Spring ejb组件部署到JNDI并使用client来调用它。