2014-03-12 139 views
0

相當新來的Java來自c#背景。org.springframework.jdbc.cannotgetjdbcconnectionexception禁用Rmi類加載器

我想實現的只是通過jmx和rim向jConsole公開一個方法。

當我運行我的服務並打開jConsole時,我可以看到那裏的方法和所有看起來不錯的問題,現在問題出現在我嘗試通過控制檯運行此方法時出現。我得到的錯誤是「問題調用helloWorld:java.rmi.UnmarshalException:錯誤解組返回;嵌套異常是:java.lang.ClassNotFoundException:org.springframework.jdbc.CannotGetJdbcConnectionException(沒有安全管理器:RMI類加載器被禁用)」。

的方法IM試圖揭露是

@ManagedOperation 
public int helloWorld() throws Exception { 

    return jdbcTemplate.queryForInt(sql); 
} 

這裏是我的applicationContext文件

<!-- this bean must not be lazily initialized if the exporting is to happen --> 
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false"> 
    <property name="assembler" ref="assembler" /> 
    <property name="namingStrategy" ref="namingStrategy" /> 
    <property name="autodetect" value="true" /> 
</bean> 

<bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource" /> 

<!-- will create management interface using annotation metadata --> 
<bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"> 
    <property name="attributeSource" ref="jmxAttributeSource" /> 
</bean> 

<!-- will pick up the ObjectName from the annotation --> 
<bean id="namingStrategy" class="org.springframework.jmx.export.naming.MetadataNamingStrategy"> 
    <property name="attributeSource" ref="jmxAttributeSource" /> 
</bean> 

<context:component-scan base-package="com.bulks" /> 


<!-- enable annotations like @Autowired, which you also most likely need --> 
<context:annotation-config/> 

<bean class="com.bulksms.resources.HelloWorldResource"/> 

<!-- setup basic datasource --> 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
    <property name="url" value="jdbc:mysql://localhost:3306/apu"></property> 
    <property name="username" value="root"></property> 
    <property name="password" value="password"></property> 
</bean> 

<!-- jdbcTemplate bean --> 
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSource"></property> 
</bean> 

我失去了什麼,所以我的方法可以從控制檯執行?

-----解決方案------ 所以在長時間的攻擊之後,我試着把sql部分放在自己的方法中,然後在helloWorld方法中調用方法....低下,瞧!成功!!!

public int helloWorld() throws Exception { 
    setValueFromQuery(); 
    return value; 
} 

private void setValueFromQuery() { 
    this.value = jdbcTemplate.queryForInt(sql); 

} 
+0

這是關於'禁用RMI類加載器',阻止人們閱讀堆棧跟蹤的其餘部分?這事兒常常發生。 – EJP

回答

0

您的例外是嵌套的異常,因此它發生在您的應用程序,

java.lang.ClassNotFoundException: org.springframework.jdbc.CannotGetJdbcConnectionException 

因此,它說是有缺失的類,它可能是jdbc,請確保您有它在你的課堂路徑中。

所以如果你有它,檢查連接標準爲你的DB

+0

剛剛檢查了應用程序的pom.xml並在那裏定義。你是否會在OS級而不是在Eclipse? – Ernie

相關問題