2011-11-14 9 views
0

ejb-jar.xml 파일에서 구성 값을 읽는 ConfigParameter SLSB가 있습니다.ejb-jar.xml에서 값을 읽는 @Singleton bean

이 클래스에는 전용 필드 만 있고 각 필드에는 해당하는 getter 메서드가 있습니다. 내 응용 프로그램에서는 구성 값을 읽으려는 ConfigParameter의 인스턴스를 사용하는 다른 많은 EJB가 있습니다.

ConfigParameter@Singleton으로 만드는 것이 좋습니다. 상태는 전체 응용 프로그램에서 공유되므로 ConfigParameter@Singleton으로 만드는 것이 좋습니다.

그러나 ejb-jar.xml에서 session-typeStateful 또는 Stateless으로 설정할 수 있습니다. 이 파일은 다음과 같습니다

<?xml version="1.0" encoding="UTF-8"?> 
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0"> 
    <enterprise-beans>  
    <session> 
     <ejb-name>ConfigParameter</ejb-name> 
     <ejb-class>myapp.util.ConfigParameter</ejb-class>  
     <session-type>Stateless</session-type> <!-- make this a Singleton --> 
     <env-entry> 
     <env-entry-name>adminRoleName</env-entry-name> 
     <env-entry-type>java.lang.String</env-entry-type> 
     <env-entry-value>admin</env-entry-value> 
     </env-entry> 
    </session> 
    </enterprise-beans> 
</ejb-jar> 

내 질문

은 다음과 같습니다

  1. 가이 빈 싱글을 만들 수있는 좋은 생각인가?
  2. 그렇다면 어떻게해야합니까?
  3. 이해하기 : session-type을 싱글 톤으로 설정할 수없는 이유는 무엇입니까?
+0

'ConfigParameter'는 모두 환경 항목에서 검색되는 기본 필드 및/또는 문자열 필드만을 포함하는 간단한 POJO입니까? – shelley

+0

''COnfigParameter'는'@ Stateless'로 주석 처리 된 POJO였습니다. 필드 값은'@Resource (name = "...")를 통해 주입되었습니다. 나는 Piotr Nowickis의 대답을 따랐고 지금은 싱글 톤을 가지고있다 – hage

답변

3

EJB 3.0을 사용 중입니다. Singleton EJB는 EJB 3.1에 도입되었습니다. 당신이 적절한 버전을 정의해야하는 ejb-jar.xml의 그것을 정의하려면

<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" 
    version="3.1"> 

또는 단지 EJB 클래스 자체에 @Singleton 주석을 사용 (3.1로 변경 한 버전 속성과 XSD의 위치를 ​​기록) .

그렇습니다. 나는 이라고 말하고 싶습니다. 응용 프로그램 전체의 구성 bean을 Singleton으로 표시하는 것이 적절합니다 ().

+0

고마워! 내 EJB에 @ @ Singleton으로 주석을 달았지만 Eclipse는 3.0 사양 때문에 Singleton을'session-type '으로 사용할 수 없었습니다. 그리고 Stateless와 Singleton 정의가 문제를 일으켰습니다. 이제 작동합니다. 큰. – hage

+0

@hage 기뻤습니다.그러나 주석과 ejb-jar.xml 둘 다에서 지정할 필요는 없다는 것을 알고 있습니다 (이 중 하나만 있으면 충분합니다). 맞습니까? –

+0

알아요 - 지금 :) 우리 팀의 다른 누군가가 두 부분을 만들었습니다. 우리는 모두 JavaEE와 EJB에 대한 새로운 것들을 가지고 있습니다. – hage

0

Singleton EJB은 좋은 옵션이지만, 고려해야 할 또 다른 아이디어를 제안하고자합니다. 필요한 값 수와 사용 위치에 따라 더 나은 방법 일 수도 있고 그렇지 않을 수도 있습니다. 대신 모듈 또는 응용 프로그램 범위의 환경 항목 (java:module, java:app)를 사용하기 위해 ConfigParameter 싱글 EJB 이후

그냥 @Resource 주석을 통해 JNDI에서 그 값을 검색하는 POJO, 그것은 가능하다. 이렇게하면이 추가 EJB 클래스가 필요 없게됩니다. 대신 값이 필요한 각 EJB 내에서 @Resource 주석을 사용할 수 있습니다. 이렇게하려면 java:module 또는 java:app : @Resource(name="java:app...") 접두사가 붙은 이름을 사용하여 값이 필요한 EJB/web 구성 요소 내에서 @Resource 주석을 사용하기 만하면됩니다.