dkey Posted February 22, 2019 Share Posted February 22, 2019 Hello, sorry for my english., i'm from Indonesia.my JasperServer version 7.1 community .I've following this "tutorial" for creating a dynamic datasource switch. based on this linkswitching-datasource-based-userthanks for mr. oscar16071987my knowledge on java programming is zero, so after i has applied and creating Bean DataSource, getting this error on logs/jasperserver.logUnexpected error occurs com.jaspersoft.jasperserver.api.JSException: The bean with the name JSCustomDS does not have method createDataSourceServiceThis is my code,file JSCustomDS.javapackage com.jasperserver.custom.ds;import java.util.Map;import java.sql.SQLException;import net.sf.jasperreports.engine.JRParameter;//import org.springframework.context.i18n.LocaleContextHolder; import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportDataSource;import com.jaspersoft.jasperserver.api.metadata.jasperreports.service.ReportDataSourceService;import com.jaspersoft.jasperserver.api.common.domain.ExecutionContext;import com.jaspersoft.jasperserver.api.common.service.BeanForInterfaceImplementationFactory;import com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.JdbcDataSourceService;import com.jaspersoft.jasperserver.api.engine.jasperreports.service.impl.JdbcReportDataSourceServiceFactory;import com.jaspersoft.jasperserver.war.common.JasperServerUtil;import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService;import com.jaspersoft.jasperserver.api.metadata.user.domain.impl.client.MetadataUserDetails;import org.springframework.security.core.context.SecurityContextHolder;public class JSCustomDS implements ReportDataSourceService { private JdbcDataSourceService connection; private RepositoryService repositoryService; private BeanForInterfaceImplementationFactory dataSourceService; public JSCustomDS(RepositoryService repositoryService, BeanForInterfaceImplementationFactory dsServiceFactory) { super(); this.repositoryService = repositoryService; this.dataSourceService = dsServiceFactory; } @SuppressWarnings({ "unchecked", "rawtypes" }) public void setReportParameterValues(Map parametersValue) { MetadataUserDetails userID = (MetadataUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String userName = userID.getUsername(); // obtain a connection based on the username. String ds_uri = "/datasources/dscloud01"; if (userName.equalsIgnoreCase("jasperadmin")) { ds_uri = "/datasources/dslocal01"; } connection = getRepositoryDatasource(ds_uri); try { parametersValue.put(JRParameter.REPORT_CONNECTION, connection.getDataSource().getConnection()); } catch (SQLException e) { e.printStackTrace(); } } public JdbcDataSourceService getRepositoryDatasource(String repositoryURI) { //ExecutionContext context = JasperServerUtil.getExecutionContext(LocaleContextHolder.getLocale()); ExecutionContext context = JasperServerUtil.getExecutionContext(); ReportDataSource datasource = (ReportDataSource) repositoryService.getResource(context, repositoryURI); JdbcReportDataSourceServiceFactory factory = (JdbcReportDataSourceServiceFactory) dataSourceService.getBean(datasource.getClass()); JdbcDataSourceService DSservice = (JdbcDataSourceService) factory.createService(datasource); return DSservice; } @Override public void closeConnection() { if(connection != null) { connection.closeConnection(); } }}file JSCustomDSFactory.javapackage com.jasperserver.custom.ds;import com.jaspersoft.jasperserver.api.metadata.common.service.RepositoryService;import com.jaspersoft.jasperserver.api.metadata.jasperreports.domain.ReportDataSource;import com.jaspersoft.jasperserver.api.metadata.jasperreports.service.ReportDataSourceService;import com.jaspersoft.jasperserver.api.metadata.jasperreports.service.ReportDataSourceServiceFactory;import com.jaspersoft.jasperserver.api.common.service.BeanForInterfaceImplementationFactory; public class JSCustomDSFactory implements ReportDataSourceServiceFactory { private RepositoryService repositoryService; private BeanForInterfaceImplementationFactory dataSourceService; public JSCustomDSFactory() { } /* Factory methods */ public JSCustomDS createDataSourceService() { return new JSCustomDS(repositoryService, dataSourceService); } @Override public ReportDataSourceService createService(ReportDataSource dataSource) { return new JSCustomDS(repositoryService, dataSourceService); } /* getters */ public RepositoryService getRepositoryService() { return repositoryService; } public BeanForInterfaceImplementationFactory getDataSourceServiceFactory() { return dataSourceService; } /* Setters */ public void setRepositoryService(RepositoryService repositoryService) { this.repositoryService = repositoryService; } public void setDataSourceServiceFactory(BeanForInterfaceImplementationFactory dataSourceService) { this.dataSourceService = dataSourceService; } }file applicationContext-JSCustomDS.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean id="JSCustomDS" class="com.jasperserver.custom.ds.JSCustomDSFactory"> <property name="repositoryService"> <ref bean="repositoryService"/> </property> <property name="dataSourceServiceFactory"> <ref bean="dataSourceServiceFactories"/> </property> </bean></beans>both file JSCustomDS.class and JSCustomDSFactory.class apply on apache-tomcat/webapps/jasperserver/WEB-INF/classes/com/jasperserver/custom/ds,and i apply too JSCustomDS.jar on apache-tomcat/webapps/jasperserver/WEB-INF/lib Thanks for your help.Best regards! Link to comment Share on other sites More sharing options...
dkey Posted November 28, 2019 Author Share Posted November 28, 2019 Please.. anyone can help me.. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now