Вызов EJB из WAR вне EAR внутри одного WAS

Структура моего проекта будет такой:

-> Сервер приложений WebSphere (WAS)

-----> EAR

--------> Модули EJB

--------> EJB Client

-----> WAR

--------> Сервер веб-службы

как я могу позвонить или использовать EJB из этой войны?

я попробовал это прежде, чтобы позвонить в EJB, когда война в ухе:

public SomeEJBServiceClassBusiness getBusinessClass() throws RemoteException {

    SomeEJBServiceClassBusiness SomeEJBServiceClassBusiness = null;
    try {
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.ibm.websphere.naming.WsnInitialContextFactory");
        env.put(Context.PROVIDER_URL, "corbaloc:rir:/NameServiceServerRoot");
        Context context = new InitialContext(env);

        SomeEJBServiceClassHome remoteObject = (SomeEJBServiceClassHome) getRemoteObject(context, SomeEJBServiceClassHome.class.getName());
        SomeEJBServiceClassBusiness = remoteObject.create();
    } catch (NamingException e) {
        LOG.error("Error getting EJB " + SomeEJBServiceClassHome.class.getName());
    } catch (CreateException e) {
        LOG.error("Error creating EJB " + SomeEJBServiceClassHome.class.getName());
    }
    return SomeEJBServiceClassBusiness;
}

public Object getRemoteObject(Context ctx, String jndiName) throws NamingException {
    Object obj;
    StringBuffer fullJndiName;
    try {
        fullJndiName = new StringBuffer();
        fullJndiName.append("java:comp/env/").append(jndiName);
        LOG.debug("Trying connect to [" + fullJndiName.toString() + "]");
        obj = ctx.lookup(fullJndiName.toString());
    } catch (NamingException e) {
        try {
            fullJndiName = new StringBuffer();
            fullJndiName.append("java:comp/").append(jndiName);
            LOG.debug("Trying connect to [" + fullJndiName.toString() + "]");
            obj = ctx.lookup(fullJndiName.toString());
        } catch (NamingException e0) {
            try {
                fullJndiName = new StringBuffer();
                fullJndiName.append(jndiName);
                LOG.debug("Trying connect to [" + fullJndiName.toString() + "]");
                obj = ctx.lookup(fullJndiName.toString());
            } catch (NamingException e1) {
                throw e;
            }
        }
    }
    return obj;
}

Но теперь, когда мне нужно переместить WAR за пределы EAR, это больше не работает. Потому что мне нужно скопировать один JAR(из EAR) с EJBHome и EJBBusiness в качестве библиотеки для моей WAR. Есть ли способ для приложения WAR использовать EJB внутри EAR(другое приложение) без копирования jar-файла?

0 ответов

Другие вопросы по тегам