Доступ к удаленному EJB3 из JSP с сервера Glassfish - PullRequest
0 голосов
/ 17 января 2012

Я новичок в области J2EE / EJB, и я пытаюсь развернуть и запустить простой проект с удаленным модулем EJB3 без сохранения состояния, вызываемый модулем JSP.

Здесь у вас есть удаленный BusinessИнтерфейс моего bean

package converter.ejb;

import java.math.BigDecimal;

import javax.ejb.Remote;

@Remote
public interface Converter {
    public BigDecimal dollarToYen(BigDecimal dollars);

    public BigDecimal yenToEuro(BigDecimal yen);
}

Здесь у вас есть код моего bean:

package converter.ejb;

import java.math.BigDecimal;
import javax.ejb.Stateless;

@Stateless
public class ConverterBean implements Converter {
    private BigDecimal yenRate = new BigDecimal("83.0602");
    private BigDecimal euroRate = new BigDecimal("0.0093016");

    @Override
    public BigDecimal dollarToYen(BigDecimal dollars) {
        BigDecimal result = dollars.multiply(yenRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }

    @Override
    public BigDecimal yenToEuro(BigDecimal yen) {
        BigDecimal result = yen.multiply(euroRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }
}

Эти 2 класса развернуты в пакете "converter.ejb" и в файле jar "converter-ejb.jar "

Я хотел бы получить доступ к моему бину с этой страницы JSP

<%@page import="java.util.Properties"%>
<%@ page import="converter.ejb.Converter,java.math.*,javax.naming.*"%>

<%!private Converter converter = null;

    public void jspInit() {
        try {

            InitialContext ic = new InitialContext();
            converter = (Converter) ic.lookup(Converter.class.getName());
        } catch (Exception ex) {
            System.out.println("Couldn't create converter bean."
                    + ex.getMessage());
        }
    }

    public void jspDestroy() {
        converter = null;
    }%>
<html>
<head>
<title>Converter</title>
</head>

<body bgcolor="white">
    <h1>Converter</h1>
    <hr>
    <p>Enter an amount to convert:</p>
    <form method="get">
        <input type="text" name="amount" size="25"> <br>
        <p>
            <input type="submit" value="Submit"> <input type="reset"
                value="Reset">
    </form>

    <%
        String amount = request.getParameter("amount");
        if (amount != null && amount.length() > 0) {
            BigDecimal d = new BigDecimal(amount);

            BigDecimal yenAmount = converter.dollarToYen(d);
    %>
    <p>
        <%=amount%>
        dollars are
        <%=yenAmount%>
        Yen.
    <p>
        <%
            BigDecimal euroAmount = converter.yenToEuro(yenAmount);
        %>
        <%=yenAmount%>
        Yen are
        <%=euroAmount%>
        Euro.
        <%
            }
        %>

</body>
</html>

, которая развернута в другом файле jar" converter-jsp.jar ".

Я получаю исключение во время выполнения, в котором говорится, что пакет "converter.ejb" и класс "Converter" не найдены.

Пожалуйста, помогите мне.

Обновление

Я упаковал свою заявку с такой структурой:

converter-ejb.jar
├── converter
│   └── ejb
│       ├── ConverterBean.class
│       └── Converter.class
└── META-INF
    ├── ejb-jar.xml
    ├── MANIFEST.MF
    └── sun-ejb-jar.xml

converter-jsp.war
├── index.jsp
├── META-INF
│   └── MANIFEST.MF
└── WEB-INF
    ├── classes
    ├── lib
    └── sun-web.xml

converter-jsp-app.ear
├── converter-ejb.jar
├── converter-jsp.war
└── META-INF
    ├── application.xml
    └── MANIFEST.MF

Яработа с Eclipse IDE и единственный способ скомпилировать проект converter-jsp - добавить ссылку на проект converter-ejb.Единственный способ запустить мое приложение jsp - создать проект EAR со ссылками на файл converter-ejb.jar и файл converter-jsp.war.

Я хотел бы знать, смогу ли я развернуть свое приложение без создания этого нового проекта EAR, но при этом поддерживая отделение EJB от кода JSP.Я попытался добавить ссылку на мой файл converter-ejb.jar в проекте converter-jsp, но во время выполнения я получаю исключение о том, что класс Converter не найден.

Обновление 2

То, чего я пытаюсь достичь, описано на стр. 39 Руководства по развертыванию приложений Oracle .Я хотел бы развернуть все различные модули на сервере приложений и запустить приложение без создания и развертывания приложения «EAR».

Обновление 3 Я не знаю, что мне нужносделать можно или нет.Но я думаю, что это будет похоже на использование RMI для удаленного вызова метода на удаленном EJB.

1 Ответ

1 голос
/ 17 января 2012

Ваш converter-jsp.jar должен иметь интерфейсы ejb в качестве зависимости.Я бы порекомендовал поместить ваши интерфейсы в другой пакет и сделать их зависимыми от вашего jsp-файла.

Развернуты ли они в разных файлах EAR / WAR?Можете ли вы описать структуру упаковки?

Если вы обновите свой вопрос, я соответствующим образом обновлю свой ответ.

...