JMSを使用して通信する2つのSpringbootサーバーとクライアントアプリケーションを作成していますが、activemqのリリース5.12.1
ですべてが正常に機能していますが、5.12.3
バージョンに更新するとすぐに、次のエラー:
org.springframework.jms.support.converter.MessageConversionException: Could not convert JMS message; nested exception is javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: Java.lang.ClassNotFoundException: Forbidden class MyClass! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at http://activemq.Apache.org/objectmessage.html for more information on how to configure trusted classes.
私は続行しました RL 提供され、私の問題がActiveMQの5.12.2
リリースで実装された新しいセキュリティに関連していることを理解しました。定義することで修正できることを理解しています信頼できるパッケージですが、このような構成をSpringBootプロジェクトのどこに配置するかはわかりません。
クライアントとサーバーのJMSキューに対して行っている唯一の参照は、application.propertiesでURIを設定し、@EnableJms
を使用して「メイン」クラスでJMSを有効にすることです。別のブローカーでの設定は次のとおりです。 :
@Configuration
@ConfigurationProperties(prefix = "activemq")
public class BrokerConfiguration {
/**
* Defaults to TCP 10000
*/
private String connectorURI = "tcp://0.0.0.0:10000";
private String kahaDBDataDir = "../../data/activemq";
public String getConnectorURI() {
return connectorURI;
}
public void setConnectorURI(String connectorURI) {
this.connectorURI = connectorURI;
}
public String getKahaDBDataDir() {
return kahaDBDataDir;
}
public void setKahaDBDataDir(String kahaDBDataDir) {
this.kahaDBDataDir = kahaDBDataDir;
}
@Bean(initMethod = "start", destroyMethod = "stop")
public BrokerService broker() throws Exception {
KahaDBPersistenceAdapter persistenceAdapter = new KahaDBPersistenceAdapter();
persistenceAdapter.setDirectory(new File(kahaDBDataDir));
final BrokerService broker = new BrokerService();
broker.addConnector(getConnectorURI());
broker.setPersistent(true);
broker.setPersistenceAdapter(persistenceAdapter);
broker.setShutdownHooks(Collections.<Runnable> singletonList(new SpringContextHook()));
broker.setUseJmx(false);
final ManagementContext managementContext = new ManagementContext();
managementContext.setCreateConnector(true);
broker.setManagementContext(managementContext);
return broker;
}
}
信頼できるパッケージをどこに指定するかを知りたいのですが。
ありがとう:)
以下のようなJava_optsを設定し、Javaコマンドに渡して、その動作を確認します。
Java_OPTS=-Xmx256M -Xms16M -Dorg.Apache.activemq.SERIALIZABLE_PACKAGES=*
Java $Java_OPTS -Dapp.config.location=/data/config -jar <your_jar>.jar --spring.config.location=file:/data/config/<your config file path>.yml
はい、新しいバージョンの設定です
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
spring:
profiles:
active: @profileActive@
cache:
ehcache:
config: ehcache.xml
activemq:
packages:
trusted: com.stylrplus.api.model
それでも答えを探している人がいる場合は、以下のスニペットでうまくいきました
@Bean
public ActiveMQConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(BROKER_URL);
connectionFactory.setPassword(BROKER_USERNAME);
connectionFactory.setUserName(BROKER_PASSWORD);
connectionFactory.setTrustAllPackages(true); // all packages are considered as trusted
//connectionFactory.setTrustedPackages(Arrays.asList("com.my.package")); // selected packages
return connectionFactory;
}