Я работаю над проектом для достижения сеанса с использованием состояния с использованием EJB и JBOSS7.1 в eclipse.Использование компонента stateful bean в EJB с использованием клиента
я придумал исключение во время выполнения кода клиента как
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();
}
Бин, который реализует бизнес-логику кода
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();
}
}
}
Есть ли хороший способ запустить этот проект ?, затем дать шаги для достижения.
Почему возникает исключение? как его решить?
CONTEXT_FACTORY_CLASS не является разрешенным полем или константой, должен ли я предоставить Context.Applet? –
Да, вы можете использовать для указания апплета. Перейдите в Контекстную документацию и проверьте. Мой ответ показывает, как инициализировать InitialContext – Keerthivasan