【发布时间】:2014-01-17 05:13:42
【问题描述】:
我正在致力于在 Eclipse 中使用 EJB 和 JBOSS7.1 实现有状态会话的项目。
我在运行客户端代码时遇到了一个异常
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sridhar.client.ShoppingCartClient.main(ShoppingCartClient.java:15)
这里有什么问题?
下面是我的代码,
界面:
package com.sridhar.shoppingcart;
import java.util.HashMap;
import javax.ejb.Remote;
import javax.ejb.Remove;
@Remote
public interface ShoppingCartLocal {
void buy(String product,int quantity);
HashMap<String,Integer> getCartContents();
@Remove void checkOut();
}
实现业务逻辑的 Bean
package com.sridhar.shoppingcart;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.Remote;
import javax.ejb.Stateful;
/**
* Session Bean implementation class ShoppingCart
*/
@Stateful
@Remote(ShoppingCart.class)
public class ShoppingCart implements ShoppingCartLocal {
private Map<String,Integer> cart = new HashMap<String,Integer>();
/**
* Default constructor.
*/
@Override
public void buy(String product, int quantity) {
// TODO Auto-generated method stub
if(cart.containsKey(product)){
int currentQuantity = cart.get(product);
currentQuantity = currentQuantity+quantity;
cart.put(product, currentQuantity);
}else{
cart.put(product, quantity);
}
}
@Override
public HashMap<String, Integer> getCartContents() {
// TODO Auto-generated method stub
return (HashMap<String, Integer>) cart;
}
@Override
public void checkOut() {
// TODO Auto-generated method stub
System.out.println("To be implemented");
}
}
用于访问和查找代码的客户端代码:
package com.sridhar.client;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.*;
import com.sridhar.shoppingcart.ShoppingCartLocal;
public class ShoppingCartClient {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
InitialContext context = new InitialContext();
ShoppingCartLocal cart = (ShoppingCartLocal)context.lookup("ShoppingCart/Remote");
System.out.println("Buying 1 memory stick");
cart.buy("Memory Stick",1);
System.out.println("Buying another memory stick");
cart.buy("Memory stick", 1);
System.out.println("Buying 1 laptop");
cart.buy("Lappy", 1);
HashMap<String,Integer>fullCart = cart.getCartContents();
for(String product : fullCart.keySet()){
System.out.println("full cart is:"+product+","+fullCart.get(product));
}
System.out.println("checkOut");
//cart.checkOut();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
有什么好的方法可以很好的运行这个项目吗,然后给出实现的步骤。
为什么会出现异常?如何解决?
【问题讨论】:
标签: java jakarta-ee jboss ejb