Hi,

I have noticed that when loading beans in a webapp, on WebLogic, by passing a 
init-parameter in the CXF-Servlet configuration (see "Sample 2" below), I am 
able to load my spring beans perfectly well.  But if I pass the bean 
configuration to a Spring ContextLoaderListener as in "Sample 3" below, I get 
Weblogic security exceptions.  I know this maybe irrelevant on a CXF forum but 
I thought it was interesting enough that I share to see if I could hear some 
feedbacks.


I am creating a DefaultMessageListener that connects to a remote Topic with a 
connectionFactory configuration and waits for messages.  Loadings beans via 
ContextLoaderListener vs CXFServlet apparently has some different behaviors.  
The following is my bean configuration:

Sample 1:

      <bean id="helloWorld" class="x.y.HelloWorld"/>
      <context:property-placeholder location="classpath:MyProps.properties" />


      <bean id="jmsContainer"
            
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="myTopicConnectionFactory" />
            <property name="destination" ref="myTopic" />
            <property name="messageListener" ref="helloWorld" />
            <property name="messageSelector" value="${myMessageSelector}"/>
      </bean>


      <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
            <property name="environment">
                  <map>
                        <entry key="java.naming.factory.initial" 
value="${myJavaNamingFactoryInitial}" />
                <entry key="java.naming.provider.url" 
value="t3://foresight-test.co.ihc.com:9002" />
                       <entry key="java.naming.security.principal" value=""/>
                       <entry key="java.naming.security.credentials" value=""/>
                 </map>
            </property>
      </bean>

    <bean id="foreSightTopicConnectionFactory" 
class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate" />
        </property>
        <property name="jndiName">
            <value>${myJMSConnectionFactoryJndiName}</value>
        </property>
    </bean>

    <bean id="myTopic" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate">
            <ref bean="jndiTemplate" />
        </property>
        <property name="jndiName">
            <value>${myJMSTopicJndiName}</value>
        </property>
    </bean>


Sample 2:

<servlet>
            <servlet-name>CXFServlet</servlet-name>
            
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
           <init-param>
                  <param-name>config-location</param-name>
                  <param-value>WEB-INF/beans.xml</param-value>
            </init-param>
           <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
            <servlet-name>CXFServlet</servlet-name>
            <url-pattern>/services/*</url-pattern>
      </servlet-mapping>


Sample 3:

<context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>WEB-INF/beans.xml</param-value>
      </context-param>

      <listener>
            <listener-class>
                  org.springframework.web.context.ContextLoaderListener
            </listener-class>
      </listener>
<servlet>
            <servlet-name>CXFServlet</servlet-name>
            <display-name>CXF Servlet</display-name>
            <servlet-class>
                  org.apache.cxf.transport.servlet.CXFServlet
            </servlet-class>
            <load-on-startup>5</load-on-startup>
      </servlet>

      <servlet-mapping>
            <servlet-name>CXFServlet</servlet-name>
            <url-pattern>/services/*</url-pattern>
      </servlet-mapping>


Sample 3: Stacktrace

2011-07-07 16:28:15,654 [[STANDBY] ExecuteThread: '4' for queue: 
'weblogic.kernel.Default (self-tuning)'] INFO  
org.springframework.context.support.DefaultLifecycleProcessor - Starting beans 
in phase 2147483647
2011-07-07 16:28:15,654 [[STANDBY] ExecuteThread: '4' for queue: 
'weblogic.kernel.Default (self-tuning)'] DEBUG 
org.springframework.context.support.DefaultLifecycleProcessor - Starting bean 
'jmsContainer' of type [class 
org.springframework.jms.listener.DefaultMessageListenerContainer]
2011-07-07 16:28:15,670 [[STANDBY] ExecuteThread: '4' for queue: 
'weblogic.kernel.Default (self-tuning)'] DEBUG 
org.springframework.jms.listener.DefaultMessageListenerContainer - Could not 
establish shared JMS Connection - leaving it up to asynchronous invokers to 
establish a Connection as soon as possible
java.lang.SecurityException: [Security:090398]Invalid Subject: 
principals=[weblogic, Administrators]



thanks

-Sonam

Reply via email to