質問
この質問に答えはこちら
大学のプロジェクトに展開しているwebapplicationと当財団.私は遠いのフロントエンド.フェロー studendはないといけないと考えていバックエンドます。両部品を設計するseerate願います。両方のコミュニケーションRMI.私は開いている接続回展開。
私はこの点を解決の接続です。にしようとしていることと@ApplicationScoped ManagedBean:
//Constructor of ApplicationScoped ManagedBean
public Communication() {
this.connect();
}
はそのようにできますか?んでいてもっと学んでもらえること、managedBeanのようなと呼ばれる..
ご相談は、最?
@Brian:残念ながら利用しないEJB全-.-
@BalusCの鍋を作成しましたcommunicationbean:
@ManagedBean(name="communication")
@ApplicationScoped
public class Communication {
public static FrontendCommInterface server;
public Communication() {
this.connect();
}
そのLoginBean:
@ManagedBean
@ViewScoped
public class Login {
@ManagedProperty(value="#{communication}")
private Communication communicationBean;
public FrontendCommInterface server;
private String username;
private String password;
public Login() {
server = communicationBean.getConnection();
}
public String login(){
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
String sessionId = session.getId();
try {
server.login(getUsername(), getPassword(), sessionId);
return "start.xhtml";
} catch (RemoteException e) {
e.printStackTrace();
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Anmeldung nicht erfolgreich: ", getUsername()+", "+getPassword()+", "+sessionId));
return "login.xhtml";
}
}
残念ながらこす例外:
com.sun.faces.mgbean.ManagedBeanCreationException: Klasse org.dhbw.stg.wwi2008c.mopro.ui.managedBeans.Login can not be instanciated.
java.lang.NullPointerException
org.dhbw.stg.wwi2008c.mopro.ui.managedBeans.Login.<init>(Login.java:28)
後debugingしていることが分かった私のManagedPropertyがNullの場合!明かそう、おすすめています。どのようになる。と思った参照によmanagedpropertyうに創造していくかについて-.-
解決
マネージドBeanは、自動作成され、それがビューにそのままのいずれかでアクセスすることによって発生する可能性のEL #{managedBeanName}
によって参照されていたびにある、または別のBeanの管理プロパティとして注入される、または手動で、例えばによってEL分解されることによってApplication#evaluateExpressionGet()
ます。
あなたの特定のケースでは、あなたが実際にWebアプリケーションの起動中にいくつかのものをintializeたいです。あなたはむしろ ServletContextListener
のはこのために使用したいです。
@WebListener
public class Config implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// Do stuff during webapp's startup.
}
public void contextDestroyed(ServletContextEvent event) {
// Do stuff during webapp's shutdown.
}
}
あなたも、アプリケーションが管理Beanのスコープ事前に作成することもできますが、必要な時はいつでも(@ManagedProperty
によって他のBeanからアクセスできるようにする目的で、あなたの場合)。
public void contextInitialized(ServletContextEvent event) {
event.getServletContext().setAttribute("bean", new Bean());
}
JSF格納アプリケーションはServletContext
の属性として豆をスコープと一つ以上のコード例で作成されたものと同じでよくとしてJSFで使用されるように一方が、既に存在する場合、JSFは、別のものを自動的に作成しませんます。
他のヒント
使いいただけるのであればEJB lite3.1{1}webアプリを利用することができましのセッション豆、含@起動時に、@PostConstruct方法です。している次のように記述されています。
@Singleton
@Startup
public class CachePrimer {
@PostConstruct
public void loadOpenRequests() {
...
}
}
{1}:EJB lite3.1のウェブロJavEE6日およびwebプロサーバーのように Glassfish, JBoss6, は、 樹脂.利用に際してはウェブプロファイルサーバ、単におEJBsでおります。warファイルの追加的な作業が必要です。