gpt4 book ai didi

java - 使用客户端在 EJB 中使用有状态 bean

转载 作者:行者123 更新时间:2023-12-01 13:37:12 27 4
gpt4 key购买 nike

我正在研究在 eclipse 中使用 EJB 和 JBOSS7.1 实现有状态 session 的项目。

我在运行客户端代码时遇到异常

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();
}
}

}

有什么好的方法可以运行好这个项目吗?,然后给出实现步骤。

为什么会出现异常?怎么解决呢?

最佳答案

您必须实例化 InitialContext 并像这样传递环境

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,CONTEXT_FACTORY_CLASS);
Context ctx = new InitialContext(env);

这是初始化客户端应用程序中的上下文所必需的。请引用documentation了解更多信息。希望这有帮助!

关于java - 使用客户端在 EJB 中使用有状态 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com