2011-11-05 2 views
3

앞으로는 상당히 커질 계획 인 Java EE 프로젝트에서 작업하고 최대한 많은 코드를 공유하고 싶습니다. 여기에는 Java 코드뿐만 아니라 UI 요소에 대한 코드도 포함되었습니다. 저는 메시지, 콩 등을 기반으로 상호 작용하는 명확한 정의 된 주제 (사용자 관리, 세금, 제품 등)를 기반으로 엔터프라이즈 구성 요소를 개발하는 것에 대해 생각합니다. 또한 나중에 웹 UI에서 사용할 수있는 몇 가지 기본 기능을 제공하기 위해 이러한 모든 구성 요소에 관리 Bean과 JSF 컴포지트를 제공하는 것에 대해 생각해 보겠습니다. 그것이 바로 컨텍스트입니다 ...JSF 복합 컴포넌트를 공용으로 배포하기

구체적으로 말하자면 : 사용자 관리를 위해 EAR (um.ear)이 있다고 가정 해 봅시다. 그 안에 데이터베이스 연결을위한 JPA 엔티티 (jpa.jar)가 있고 인증 (ejb.jar)과 같은 기본 기능을위한 엔터프라이즈 bean이 있습니다. 또한, (jsf.jar)에 다른 bean jar 파일을 넣고 싶습니다. 관리 빈을 포함하고 있습니다. LoginController (사용자 이름과 비밀번호를 입력으로 사용) login_box.xhtml 나중에 웹 프런트 엔드에 배치하고 싶습니다. 실제 위치에 따라 달라집니다.

login_box.xhtml :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:composite="http://java.sun.com/jsf/composite" 
    xmlns:e="http://java.sun.com/jsf/composite/login"> 
<h:head> 
    <title>Login Box</title> 
</h:head> 
<h:body> 
    <composite:interface> 
    </composite:interface> 
    <composite:implementation> 
     <h:outputStylesheet library="css" name="login.css" target="head" /> 
     <div class="login_box"> 
      <h:form> 
       <h:messages /> 
       <h:panelGrid columns="2" columnClasses="rightAlign,leftAlign"> 
        <h:outputText value="Email address:" /> 
        <h:inputText label="Email address" value="#{LoginController.email}" 
         required="true" size="8"> 
         <f:validator validatorId="emailAddressValidator" /> 
         <f:validateLength minimum="5" maximum="128" /> 
        </h:inputText> 
        <h:outputText value="Password:" /> 
        <h:inputText label="Password" value="#{LoginController.password}" 
         required="true" size="8" /> 
       </h:panelGrid> 
       <h:commandButton action="${LoginController.login()}" 
        value="Login..." /> 
      </h:form> 
     </div> 
    </composite:implementation> 
</h:body> 
</html> 

내 주요 응용 프로그램에서 나는 페이지를 생성하기 위해 JSF 템플릿 작업 할 나는 필요에 따라 페이지에 태그로 로그인 상자를 넣고 싶다.

현재 설정은 다음과 같습니다

jsf.jar inside um.ear: 
|- META-INF/ 
| |- faces-config.xml 
| |- web.xml 
| |- sub-web.xml 
| \- resources 
|  \- login 
|   \- login_box.xhtml 
\- com 
    |- inside it the managed bean classes 

호출하는 XHTML은 다음과 같습니다 내가, 내가 오류를 얻을하지 않습니다 내 결과 HTML에서 내가 보는 그 방법을 사용하는 경우

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:e="http://java.sun.com/jsf/composite/login"> 
<h:head> 
    <title>Title</title> 
</h:head> 
<h:body> 
    <e:login_box /> 
</h:body> 
</html> 

원하는 로그인 상자 대신.

나는 이것을 모두 하나의 EAR 내에서 수행하고, 관리되는 빈과 JSF 자료를 EAR 내부의 WAR (클래스는 WEB-INF/classes로 옮기고 WEB-INF/resources로 옮긴다)에 넣는다. 잘 작동합니다. 하지만 나중에 다른 EAR 또는 JAR에서 사용하기 위해 관리 Bean과 JSF를 배포 할 수 있습니까? 나는 /META-INF/faces-config.xml이 컨테이너가 JSF 항목을 스캔하도록 강제하는 데 충분할 것이라고 읽었다.

내 얼굴-config.xml 파일 : 나는 보스와 함께 작동

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 
</faces-config> 

6.1 - 최종 내가 나를 위해 논리적이었다 JAR 내부의 모든 가능한 위치를 시도했다. 나는 클래스와 리소스 디렉토리를/META-INF와 WEB-INF에 root '/'에 둔다. 이 모든 것은 효과가 없었습니다. 누구든지 제안을 했습니까? 여기서 무엇이 잘못 되었습니까?

답변

3

그 JAR은 WAR의 /WEB-INF/lib으로 끝나야합니다 (EAR의 일부 임).

JAR 파일 구조는 정상입니다.

+0

감사합니다. 빠른 답변입니다. 나는 그것을 시도 할 것이다. 그러나 um.ear을 JBoss에 넣고 거기에서 합성물을 사용하는 방법이 있습니까? EJB는 한 번 배포됩니다 ... –

+0

불가능합니다. JBoss에서 WAR에는 EAR의 libs에 액세스 할 수없는 자체 클래스 로더가 있습니다. – BalusC

+0

감사합니다. JSF는 이제 작동합니다. 이제는 JSF를 렌더링을 위해 한 곳에서 어셈블해야한다는 것을 알게되었습니다. 이제 EAR에서 원격 EJB와 관련된 문제가 발생합니다. 이것은 다른 질문이 될 수도 있습니다. 내일까지 알아 내지 못하면 ...-) –

관련 문제