簡體   English   中英

創建一個EJB3.1 + Portlet項目

[英]Creating a EJB3.1 + Portlet Project

我只想創建一個Portlet並在此Portlet中使用EJB。

Iam使用JBoss 7.1和Liferay 6.2。

我創建了一個EJB項目和一個liferay插件項目。

我只想從EJB調用一個方法,如下所示:

@Local
public class PortletController {

 public PortletController() {
 }

 public String getUserName() {
  return "foobar";      
 }
}

我的portlet嘗試獲取用戶名,如下所示:

public class ABPortlet extends MVCPortlet {

private String userName;

@EJB
PortletController controller;


public ABPortlet() {}

public void doView(RenderRequest rr, RenderResponse rp) throws IOException, PortletException {

    userName = controller.getUserName();
    if(userName==null) {
        userName = "nope";
    }
    rr.setAttribute("userName", userName);
    super.doView(rr, rp);
}
}

我做錯了嗎? 我在一個教程中讀到,如果bean在與portlet相同的JRE中運行,則無需查找即可訪問本地bean。

如何正確部署兩個項目? 我將EJB項目導出為jar,並將其作為依賴項添加到portlet項目,但是在以下代碼行中,我只是在doView方法中得到了NullpointerException:

        userName = controller.getUserName();

我在一個教程中讀到,如果bean在與portlet相同的JRE中運行,則無需查找即可訪問本地bean。

提到JRE時 ,您的意思是在同一個JVM中,是的,如果您的portlet和ejb模塊都在同一JVM實例中本地運行,那么您就不必為JNDI查找而煩惱。

關於打包應用程序的方式,我建議不要這樣做(ejb和portlet在同一jar中),因為從最佳實踐中可以知道,最好將業務模塊 (ejb)與視圖模塊 (portlet)分開。 因此,您可能需要分別打包每個組件,將portlet轉到war歸檔中,並將ejb放入其自己的jar / module中。

現在回到您的代碼,您需要回顧以下企業歸檔編碼約定:

使用POJI聲明您的本地bean骨架:

@Local
public interface PortletControllerLocal 
{
  public String getUserName();
}

實現您的Stateless/Stateful會話bean,並指定其name注釋屬性:

@Statefull
@EJB(name = "portletControllerBean")
public class PortletControllerBean implements PortletConrollerLocal
{
  public String getUsername()
  {
    //Do you stuff
  }
}

使用beanName屬性在portlet控制器類下注入bean:

public class ABPortlet extends MVCPortlet 
{
  private String userName;
  @EJB(beanName = "portletControllerBean")
  PortletControllerBean controller;

  public ABPortlet() {}

  public void doView(RenderRequest rr, RenderResponse rp) throws IOException,PortletException 
  {
    userName = controller.getUserName();
    if(userName==null) {
      userName = "nope";
    }
    rr.setAttribute("userName", userName);
    super.doView(rr, rp);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM