2013-02-11 60 views
2

我缺少一些非常基本的東西(與EAR或EAR配置中的類加載有關)。我無法弄清楚,爲什麼我的JSR 303驗證和Hibernate驗證不是從EAR內部觸發的......它會觸發如果我創建一個新的WAR項目。當EAR內部沒有觸發Bean驗證(JSR 303)和Hibernate驗證

我在Weblogic Server 10.3上使用Maven,JSF 2.0,Open-JPA,EJB 3.0設置了一個新項目。我使用maven原型創建了所有項目。我有一個最終的EAR構建其構造爲:

  • PROJName
    • EJB
    • 網絡
    • LIB
    • META-INF

在Web,我有一個login.xhtmluserNamePassword個領域與TestMPB變量和具有依賴性映射勁歌:驗證-API 1.0.0.GA,休眠,驗證4.2.0.Final ...

頁面後臺bean的(TestMPB)變量@Pattern@NotEmpty註解,但他們從來沒有被JSF驗證階段觸發。 JSF驗證工作正常,但我想使用JSR 303和Hibernate驗證。

login.xhtml包含以下IMPT行:

<h:messages layout="table" showDetail="false" showSummary="true"/> 
<h:inputText class="textbox" id="userId" value="#{testMPB.userId}"></h:inputText> 
<h:commandButton id="button" action="#{testMPB.login}" value="Login" ></h:commandButton> 

TestMPB包含:

@Pattern(regexp = "^(?=.*[a-zA-Z])[a-zA-Z0-9_]{2,15}\\s*$", message = "userId invalid") 
@NotEmpty(message = "userId empty") 
private String userId = ""; 

public String login(){ System.out.println("User Login ::"+getUserId()); 
    return "/web/ui/s/home/home.xhtml"; 
} 

Application.xml中包含

<?xml version="1.0" encoding="UTF-8"?> 
<application 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/application_5.xsd" version="5"> 
<display-name>ear</display-name> 
    <module> 
    <web> 
     <web-uri>web</web-uri> 
     <context-root>/NewAccountsWeb</context-root> 
    </web> 
    </module> 
    <module> 
    <ejb>ejb</ejb> 
    </module> 
    <library-directory>lib</library-directory> 
</application> 

調試,我確信:

  • JSF託管頁面bean(TestMPB)在頁面加載時初始化(通過在構造函數中添加SOP)
  • 頁面提交時,調用方法並打印userName值。
  • 在POM中添加JAR依賴關係是正確的,它們存在於最終的EAR構建中。
  • 當我創建一個WAR項目時,相同的JSR 303和Hibernate驗證使用同一組login.xhtml和TestMPB.java。
  • 創建階段偵聽器並打印所有階段以確保階段被調用。
  • 爲了測試,我還添加了JSF驗證(required=true),它在h:message中工作並顯示消息。

能想出什麼可以解決這個問題嗎?

+0

你可以顯示哪裏的bean驗證api和hibernate驗證器jar在最後的耳朵最終?當在類路徑上檢測到Bean驗證API時,應該自動啓用Bean驗證。我的猜測是有一個類加載問題。 – Hardy 2013-02-12 09:34:13

回答

1

我能解決我自己這個問題...

我加SLF4J-log4j12在我的項目類路徑1.6.4瓶子和兩個豆&休眠字段級驗證開始工作...... jboss-logging-3.1.0.GA。jar也可能工作...另外Log4j jar已經在classpath中。

看來,爲了進行日誌記錄,Hibernate Validator使用一些Logging API,這是一個支持一些日誌記錄解決方案的抽象層作爲實現。因此,如果您只是將支持的日誌記錄庫添加到類路徑中,並且日誌記錄會將任何日誌請求委託給該提供程序。

奇怪的是,我的服務器日誌或編譯時沒有錯誤,Hibernate(或Bean JSR 303)驗證缺少日誌依賴關係......我浪費了3天的時間,但很高興它的工作現在...